动态列出数据库中持续更新

时间:2018-02-25 14:41:25

标签: oracle monitoring

这是一个现实世界的问题,我相信解决方案存在但无法找到解决方案。

所以我们有一个名为 Transactions 的数据库,其中包含PositionsSecuritiesBogiesAccounts等表格,Commodities等每当新事务发生时每秒都会不断更新。目前,我们已将master数据库事务复制到一个名为TRN的新数据库,我们会在其中执行所有查询和更新。

我们想要一种适用于数据库的监控系统(如htop process viewer in Linux),可以随时动态列出数据库表中的更新行。

TL;DR 有没有办法在数据库的任何表中获得连续更新的行列表?

目前我们正在研究Sybase& Linux(Ubuntu)平台上的Oracle DBMS,但我们希望获得涉及大多数平台以及DBMS(包括MySQL)的任何通用答案以及可以帮助我们的任何工具,实用程序或脚本将来也可以轻松迁移到其他平台和/或DBMS。

2 个答案:

答案 0 :(得分:0)

要列出更新的行,您在概念上需要以下两种方法之一:

  1. 更新声明对表格的影响。
  2. 要与之比较的表的先前版本。
  3. 你如何得到它们以及以何种形式完全取决于你。

    第一个选项允许您列出具有语句粒度的更新,而第二个选项更适合基于时间的粒度。

    我头脑中的一些选项:

    • 写入临时表
    • 添加包含交易ID /时间戳
    • 的字段
    • 定期制作表格的克隆

    AFAICS,Oracle没有内置工具来获取受影响的行,只有他们的计数。

答案 1 :(得分:0)

问题中没有太多细节,所以不确定这将有多大用处......

  • 提到了“Sybase”,但没有说明哪个Sybase RDBMS产品(ASE?SQLAnywhere?IQ?Advantage?)
  • by'replicated master database transaction'我假设这意味着正在复制主数据库(而不是Sybase ASE实例中名为'master'的数据库)
  • 没有提到使用什么产品/工具将交易'复制'到名为'TRN'的'新数据库'

因此,假设您的环境的一部分包括Sybase(SAP)ASE ...

  • MDA表可用于在给定时间段内捕获DML操作的计数器(例如,插入/更新/删除)
  • MDA表可以捕获一些SQL文本,但是如果a)MDA未正确配置和/或b)DML操作包含在预准备语句,存储过程和触发器中,则卷/质量可能会有疑问
  • 可以启用审计来捕获一些命令但是再次,根据DML命令的执行方式,卷/质量可能会有疑问
  • 还要记住,使用MDA表和/或审核会导致性能下降,基于个人配置设置和DML活动量的性能下降水平

假设您正在使用Sybase(SAP)Replication Server产品,那些通过repserver发送的复制事务可能具有您需要知道哪些表/行受影响的所有信息;所以你有几个选择:

  • 将事务的副本路由到另一个数据库,您可以在其中以您需要的任何格式捕获事务[您需要设计数据库和/或任何自定义的repserver函数字符串]
  • 考虑使用Sybase(SAP)实时数据流产品(是的,需要额外的利益),这是专为像您这样的方案设计的,即从服务器队列拉出事务和格式以便在下游系统中使用(例如,tibco / mqs,自定义应用程序)

根据您(有限)的要求,我不知道任何“通用”产品可以开箱即用。您可能会查看一些不同的解决方案和/或自定义代码来涵盖您的特定情况。