用于查询表Fields
中最新跟踪更改的看似有效的代码
DECLARE @Begin_LSN BINARY(10), @End_LSN BINARY(10)
SET @Begin_LSN = sys.fn_cdc_get_min_lsn('Fields')
SET @End_LSN = sys.fn_cdc_get_max_lsn()
SELECT * FROM cdc.fn_cdc_get_all_changes_ordering_Fields (@Begin_LSN, @End_LSN, N'all')
GO
生成以下错误消息:
Msg 313, Level 16, State 3, Line 5
An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_all_changes_ ... .
但是,如果我检查实际值,它们似乎都是有效的(不是null),则查询
SELECT @Begin_LSN, @End_LSN, N'all';
返回
0x00000000000000000000 0x00002594000002130001 all
发布于 2013-04-30 20:02:10
这个错误消息有点误导性,基本上暗示了some parameters might be out of bound。该消息不是进一步定制的表函数的because of the limitation。
零值(0x00000000000000000000
)不是有效的值。如果找不到适当的capture实例名称,则sys.fn_cdc_get_min_lsn()
将返回此值。此名称可能与实际的表名不同。有关更多详细信息,请参阅此问题
有关更多详细信息,请参阅the following question。
发布于 2018-11-21 14:50:10
在我的例子中,这个错误是因为多次在表级启用/禁用CDC,并为同一个表创建了两个捕获实例。我通过在数据库级别禁用CDC并再次启用来修复这个问题,然后它就可以正常工作了。
发布于 2019-11-26 22:28:42
上面的答案是正确的,但我想我应该加上我的例子中的答案。我正在保存最后处理的LSN以备将来运行。但这是一个dev数据库,它是从prod恢复的。CDC脚本被重新应用,但我丢失了我的历史记录。我需要做的就是删除最后处理的LSN,这样它就可以返回到获取捕获实例的最小LSN,从而使我回到正确的轨道上来。不幸的是,这不是一个非常有用的错误消息。
https://stackoverflow.com/questions/16299422
复制相似问题