我是否应该依赖 seqval 对从 SQL Server 中的更改表捕获的更改数据进行排序,文档在两个地方提供了矛盾的语句。如果没有的话还有什么办法吗?
如果我们检查 cdc.fn_cdc_get_all_changes_
用于对事务中的行更改进行排序的序列值。
在 cdc.
事务日志中所示的操作顺序。不应该用于订购。相反,请使用 __$command_id 列。
我相信这两个 __$seqval 与从
fn_cdc_get_all_changes
表读取的 cdc.<capture_instance>_CT
函数相同。如果它是从 __$command_id
函数返回的,我会使用 fn_cdc_get_all_changes
,因为直接从系统表读取是不建议。
我和你有同样的要求。
这是我的发现:
cdc.fn_cdc_get_all_changes_
__$start_lsn
和__$seqval
。在这种情况下,不可能根据此函数返回的数据重建交易的确切顺序(不幸的是,此函数未返回__$command_id
)。
直接使用系统表cdc.
__$seqval
和__$command_id
进行排序来获得正确的交易顺序。但是,根据 Microsoft 文档,不建议使用这些表。
我的解决方案是使用 cdc.fn_cdc_get_net_changes_