使用Goldengate将来自另一个系统的数据实时复制到SQL Server 2005数据库中(白天,数百个事务/秒)。我想能够判断最近是否有交易,这将告诉我当前是否正在进行复制。即使在非工作时间,我也可以期待每隔几分钟进行一次交易,但我不知道它会进入400张桌子中的哪一张。

这是我目前的流程:

  1. 最流行的复制表上的IUD触发器
  2. 在“同步通知”中更新日期每次表格上有任何活动
  3. SQL代理作业每隔几分钟运行一次,并将此日期与GETDATE()进行比较。如果时间太长,它会通过电子邮件发送给我。
  4. 这在大多数情况下都有效,但如果其他表中有活动,我会得到误报,而不是受监控的活动,这可能会在一夜之间发生。

    除了将相同的触发器添加到数据库中的每个表之外,还有其他任何建议吗?如果我确实添加了触发器,那么如何防止“同步通知”中的死锁和争用?表?由于我不关心最近的日期在高争用期间是否准确,有没有办法让SQL尝试更新日期但是如果其他进程锁定了它就跳过它?

    唯一的“应用程序级别”选择我的是TELNET到Goldengate显示器并要求复制滞后,然后屏幕刮掉结果。我对此持开放态度,但如果它更可行,我想做一些SQL端的事情。

有帮助吗?

解决方案

这是一个自动化的工作还是你想要时不时看到的东西?如果是后者,那么你可以使用事务日志检查工具(Redgate Log Rescue,Apex SQLLog,可能还有其他人)。

另一个可供选择的选项是sysindexes(SQL Server 2000:dbo.sysindex; 2005:sys.sysindexes)。列rowmodctr(引用MSDN)"计算自上次更新表“的统计信息以来插入,删除或更新的行的总数。它可能不会返回您需要知道的所有内容,但是,如果您有覆盖索引,它将指示定期采样时有多少和哪些更改。

其他提示

您可以检查 SELECT * FROM :: fn_dblog(@startLSN,NULL),看看自上次检查后是否发生了任何 LOP_MODIFY_ROW 操作(自您检查的上一个LSN以来)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top