sql server cdc漏扫数据

[复制链接]
发表于 2025-11-11 23:44:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
SQL Server的CDC指的是“变更数据捕获”(Change Data Capture)。这是SQL Server数据库提供的一项功能,可以或许跟踪并记录对数据库表中数据所做的更改。这些更改包罗插入、更新和删除操纵。CDC可以捕获这些变更的详细信息,并使这些信息可用于进一步的处置处罚,比方数据同步、数据堆栈的更新或其他业务需求。

做了一个底子服务,定时扫cdc表的数据然后再数据同步到es上。运行一段时间后,发现es上的数据总是丢失厘革。我想一个晚上,仍不知道自己错哪了。究竟是定时扫cdc的表拉取数据漏扫数据,还是数据处置处罚堕落呢,还是es同步数据堕落呢?无奈日志日志打印内容太少了,只能增长日志日志重新摆设生产观察了。

分析了一个晚上,终于找到缘故原由了。
定时扫cdc的sql是雷同如许
select * from table_CT with(nolock) where id>=@param order by id 
扫到数据,处置处罚完数据后把@param更换成前次扫的最大id,接着继续扫。
查询日志日志发现这条sql会漏扫数据。已知id是自增的,看着是没什么题目的。
with(nolock)是克制锁表,允许脏读(cdc表没有回滚的操纵),第一眼看上去没什么题目。最读提前读到未提交的id,也没什么题目。
再细想,有题目,涉及到cdc怎样捕获数据变更写入到变更表中。


把with(nolock)去掉,题目得到办理。
一看时间是破晓4点钟,赶紧打电话给同事告诉他们这个好消息。

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表