【发布时间】:2021-08-31 16:49:07
【问题描述】:
阅读 Microsoft Docs 这是相关的系统过程: sys.sp_cdc_cleanup_change_table
我试过这样使用它:
DECLARE @max_lsn binary(10);
SET @max_lsn = sys.fn_cdc_get_max_lsn();
Exec sys.sp_cdc_cleanup_change_table
@capture_instance = N'dbo_mytable',
@low_water_mark = @max_lsn;
查询已成功执行,但使用查询再次检查表:
DECLARE @from_lsn binary(10), @to_lsn binary(10);
SET @from_lsn = sys.fn_cdc_get_min_lsn('dbo_mytable');
SET @to_lsn = sys.fn_cdc_get_max_lsn();
SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_mytable
(@from_lsn, @to_lsn, N'all');
仍然返回一个非空表。我对SQL不太熟悉。我错过了什么?
【问题讨论】:
-
你确定
@capture_instance参数值正确吗?如果您传递一个不存在的捕获实例,该过程将完成而不会出错,但什么也不做。您可以通过select capture_instance from cdc.change_tables查看现有的捕获实例名称 -
@allmhuran:我很确定。正如您在我的第二个查询中看到的那样,捕获实例名称是相同的,并且它返回一个表。我像你说的那样使用了捕获实例名称。
-
Roger,只是想仔细检查一下您实际执行的操作在存储的 proc 调用中没有错字(即,我怀疑您的真实表名是
mytable,您已经明智地对其进行了编辑以发布到 SO)。碰巧我建立了一个小测试并看到了同样的事情......但只是有时,我知道为什么。接听来电
标签: sql-server change-data-capture