我有两个表,分别称为dbo.T1
和dbo.T2
。我想使用CDC每隔几个小时捕获一次增量。
我第一次查询CDC时,我以{strong> @from_lsn 的身份传入sys.fn_cdc_get_min_lsn('dbo_t1')(和sys.fn_cdc_get_min_lsn('dbo_t2')) >用于 cdc.fn_cdc_get_net_changes_ dbo_t1(和cdc.fn_cdc_get_net_changes_dbo_t2)函数。
另外,sys.fn_cdc_get_max_lsn()为 @to_lsn 。
到目前为止很好。
现在,下次运行查询时,我仅只想捕获自上次捕获以来的增量。我仍然可以调用sys.fn_cdc_get_max_lsn()来获取@to_lsn,但是我需要为这些表专门获取@from_lsn,这些表下一个有效数字大于先前捕获的针对特定表的最大lsn (不能使用与以前相同的min fx,因为我想要增量最后一次捕获后)。
示例:
第一次:T1 @from_lsn = 1(让我们使用int使其简单),T2 @from_lsn =5。全局@to_lsn = 10
第二次:T1 @from_lsn = 14 和T2 @from_lsn = 12 。全局@to_lsn = 20
如何获取第二次以上捕获的@from_lsn?我不能以最小的形式传入@to_lsn,因为CDC会由于捕获的实例中的无效值而引发错误。基本上,我需要在查询T1时传递14和在第二次以@from_lsn查询T2时传递12。
答案 0 :(得分:1)
使用sys.fn_cdc_increment_lsn(last_to_lsn_value)。这将使您获得序列中的下一个lsn。 lsn是否对您的表进行任何事务都无关紧要。我可能会也可能不会。但是,您希望从lsn到表的高水位线都进行更改。