代码之家  ›  专栏  ›  技术社区  ›  SqlRyan

查找最新的SQL Server数据库活动

  •  0
  • SqlRyan  · 技术社区  · 15 年前

    来自另一个系统的数据使用goldengate实时复制到SQL Server 2005数据库中(在一天中,每秒事务数为数百个)。我想知道最近是否有一个事务,这将告诉我复制是否正在发生。即使在下班时间,我也可以每隔几分钟进行一次交易,尽管我不知道它将进入400个表中的哪一个。

    以下是我目前的流程:

    1. 最流行的复制表上的IUD触发器
    2. 每当“同步通知”表上有任何活动时,更新“同步通知”表中的日期
    3. SQL代理作业每隔几分钟运行一次,并将此日期与GetDate()进行比较。如果时间太长,就给我发邮件。

    这在很大程度上是可行的,但是如果在其他表中有活动,我会得到误报,而不是被监视的活动,这可能会在一夜之间发生。

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

    我唯一的“应用程序级别”选择是通过telnet连接到goldengate监视器并请求复制延迟,然后屏幕抓取结果。我对此持开放态度,但如果可行的话,我想做一些SQL方面的工作。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Callie J    15 年前

    这是为了一个自动化的工作还是你时不时想看的东西?如果是后者,那么可以使用事务日志检查工具(redgate log rescue、apex sqllog,可能还有其他工具)。

    另一个对您开放的选项是查看sysindexes(SQL Server 2000:dbo.sysindex;2005:sys.sysindexes)。rowmodctr列(引用msdn) 统计自上次更新表的统计信息以来插入、删除或更新的行的总数。 . 它可能不会返回您需要知道的所有信息,但是,如果您有覆盖索引,它会给出一个指示,如果定期抽样,会有多少变化以及在哪里变化。

        2
  •  1
  •   Remus Rusanu    15 年前

    你可以检查 SELECT * FROM ::fn_dblog(@startLSN, NULL) 看看有没有 LOP_MODIFY_ROW 自上次检查(自上次检查LSN以来)后发生操作。