【发布时间】:2019-06-06 22:54:19
【问题描述】:
我有两张桌子,分别叫它们dbo.T1 和dbo.T2。我想使用 CDC 每隔几个小时捕获一次增量。
第一次查询 CDC 时,我将 sys.fn_cdc_get_min_lsn('dbo_t1') ( 和 sys.fn_cdc_get_min_lsn('dbo_t2') ) 作为 @from_lsn 传入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,具体是 next VALID number 大于上一个捕获的 max lsn FOR THOSE SPECIFIC TABLES(不能使用与以前相同的最小 fx,因为我想要 delta在最后一次捕获之后)。
例子:
第一次: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 作为 min 传递,因为 CDC 由于那些捕获的实例中的值无效而引发错误。基本上,当我第二次以@from_lsn 查询 T2 时,我需要在查询 T1 时传入 14 和 12。
【问题讨论】:
标签: sql sql-server sql-server-2016 cdc change-data-capture