使用Goldengate将来自另一个系统的数据实时复制到SQL Server 2005数据库中(白天,数百个事务/秒)。我想能够判断最近是否有交易,这将告诉我当前是否正在进行复制。即使在非工作时间,我也可以期待每隔几分钟进行一次交易,但我不知道它会涉及400张桌子中的哪一张。
这是我目前的流程:
这在很大程度上起作用,但如果其他表中有活动,我会得到误报,而不是受监控的活动,这可能会在一夜之间发生。
除了将相同的触发器添加到数据库中的每个表之外,还有其他任何建议吗?如果我确实添加了触发器,如何防止“同步通知”表上出现死锁和争用?由于我不关心最近的日期在高争用期间是否准确,有没有一种方法可以让SQL尝试更新日期但是如果其他进程锁定了它就跳过它?
我唯一的“应用程序级”选择是TELNET到Goldengate监视器并询问副本滞后,然后屏幕刮取结果。我对此持开放态度,但如果它更可行,我想做一些SQL端的事情。
答案 0 :(得分:2)
这是一个自动化的工作还是你想要时不时看到的东西?如果是后者,那么你可以使用事务日志检查工具(Redgate Log Rescue,Apex SQLLog,可能是其他人)。
另一个可供选择的选项是sysindexes(SQL Server 2000:dbo.sysindex; 2005:sys.sysindexes)。列rowmodctr(引用MSDN)“计算自上次更新表”的统计信息以来插入,删除或更新的行的总数。它可能不会返回您需要知道的所有内容,但是,如果您有覆盖索引,它将指示定期采样时有多少和哪些更改。
答案 1 :(得分:1)
您可以查看SELECT * FROM ::fn_dblog(@startLSN, NULL)
并查看自上次检查后是否发生了LOP_MODIFY_ROW
次操作(自您上次检查的LSN以来)。