SQL Server的CDC指的是“变更数据捕获”(Change Data Capture)。这是SQL Server数据库提供的一项功能,可以或许跟踪并记录对数据库表中数据所做的更改。这些更改包罗插入、更新和删除操纵。CDC可以捕获这些变更的详细信息,并使这些信息可用于进一步的处置处罚,比方数据同步、数据堆栈的更新或其他业务需求。
分析了一个晚上,终于找到缘故原由了。
定时扫cdc的sql是雷同如许
select * from table_CT with(nolock) where id>=@param order by id
扫到数据,处置处罚完数据后把@param更换成前次扫的最大id,接着继续扫。
查询日志发现这条sql会漏扫数据。已知id是自增的,看着是没什么题目的。
with(nolock)是克制锁表,允许脏读(cdc表没有回滚的操纵),第一眼看上去没什么题目。最读提前读到未提交的id,也没什么题目。
再细想,有题目,涉及到cdc怎样捕获数据变更写入到变更表中。