CDC LSN:查询返回不同的最小值

时间:2018-02-19 11:02:44

标签: sql sql-server tsql change-data-capture

我在表上启用了CDC,并且我试图获得该表的最小LSN以用于ETL作业。但是,当我运行此查询时

select sys.fn_cdc_get_min_lsn('dbo_Table')

我对此查询得到了不同的结果

select min(__$start_lsn) from cdc.dbo_Table_CT

这些查询不应该返回相同的值吗?如果他们不这样做,为什么不呢?以及如何让他们恢复同步?

1 个答案:

答案 0 :(得分:1)

第一个查询:

select sys.fn_cdc_get_min_lsn('dbo_Table')

调用一个系统函数,该函数返回捕获实例的最低POSSIBLE lsn。清除功能运行时设置此值。它记录在cdc.change_tables中并从中查询。

第二个问题:

select min(__$start_lsn) from cdc.dbo_Table_CT

查看实际的捕获实例并返回实例的最低ACTUAL lsn。在清除功能运行后记录对实例的第一次实际更改时,将设置此值。它记录在cdc.dbo_Table_CT中并从中查询。

从统计数据来看,它们不太可能出现问题。出于ETL作业的目的,使用对系统表的调用可能会更快,并且可以更准确地反映何时开始累积当前的更改记录集。