在SQL Server 2012上使用CDC。
我有一张启用了CDC的表(MyTable
)。我认为以下两个查询总是返回相同的值:
SELECT MIN(__$start_lsn) FROM cdc.dbo_MyTable_CT;
SELECT sys.fn_cdc_get_min_lsn('dbo_MyTable');
但他们似乎没有这样做:在我的情况下,第一个返回0x00001EC6000000DC0003
而第二个返回0x00001E31000000750001
,因此表中的绝对最小值实际上大于返回的值fn_cdc_get_min_lsn
。
我的问题:
fn_cdc_get_all_changes_dbo_MyTable
的第一个参数是否有任何问题? (我见过的所有例子都使用了第二个查询中的值)答案 0 :(得分:1)
我的理解是,第一个返回当前在CDC表中的数据的最旧LSN,后者反映何时将表添加到CDC。我会注意到你只想使用最小值(无论你采用哪种方法),这样你就不会处理重复的记录。此外,由于第二种方法的结果来自sys.cdc_tables(很可能比CDC表的行数少得多),因此效率会更高。
答案 1 :(得分:0)
sys.fn_cdc_get_min_lsn返回更改捕获表的最小可用 lsn。
就像@Ben所说,这个可以与实际捕获的最早变化不同(早期),例如当一个表首次添加到CDC并且还没有任何变化时。< / p>
根据MSDN doco,您应始终使用此功能在执行前验证您的查询范围,因为最终会清除更改数据。所以你不会只使用一次 - 你每次都会检查它。
你应该使用它而不是获得min LSN的其他方式,因为
工作流程通常是: