【问题标题】:SQL Server Change Data Capture - how to separate log entries by transaction?SQL Server 更改数据捕获 - 如何按事务分隔日志条目?
【发布时间】:2015-03-26 20:10:08
【问题描述】:

我刚刚开始使用 SQL Server 的变更数据捕获功能。我希望能够根据它们所属的事务从更改表中挑选出条目。有没有办法做到这一点?这些表中的事务 ID 字段似乎没有对应任何有意义的内容。

我知道有 LSN,您可以查找一般的开始和结束时间,但是是否可以考虑同时运行的多个事务,每个事务都会影响不同的记录? (不同操作的开始和结束时间可能交错)

【问题讨论】:

    标签: sql sql-server logging transactions change-data-capture


    【解决方案1】:

    几分钟前我遇到了同样的问题。我做了一些谷歌搜索,似乎有一个 cdc.lsn_time_mapping 表可以为您执行此操作。

    这是我使用它的方式(不确定这有多可靠,如果截断事务日志会发生什么等):

    DECLARE @from_lsn binary(10), @to_lsn binary(10);
    SET @from_lsn = sys.fn_cdc_get_min_lsn('Application_Person');
    SET @to_lsn   = sys.fn_cdc_get_max_lsn();
    SELECT m.*, c.*
    FROM cdc.fn_cdc_get_all_changes_Application_Person(@from_lsn, @to_lsn, N'all') c
    INNER JOIN cdc.lsn_time_mapping m ON c.__$start_lsn = m.start_lsn
    

    其他对未来读者有用的链接:

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      相关资源
      最近更新 更多