我们遇到了复制问题,其中在 3300 万行的表上进行了大型(750 万行)更新。复制将其转换为 750 万条单独的更新语句。当我的警报通知我我们的出版物低于我们的门槛时,我开始检查这个问题。
我发现更新已被执行,并且需要几天时间来仔细阅读这些更新语句。所以我决定看看我们是否可以跳过它试图处理的那些记录。使用系统表和存储过程,我能够确定执行更新的时间段。一旦找到最后一个xact_seqno,我就停止分发代理,并手动更新订阅者数据库。然后我执行sp_setsubscriptionxactseqno, 跳过所有这 750 万笔交易。当我启动分发代理时,它似乎工作正常并且能够处理剩余的事务。
为了更好地衡量,我使用 Redgate 的数据比较来查看数据是否混乱,但我丢失了大约 24 条记录(最初可能没有,因为我没有设置它)。
我的问题是这是修复它的正确方法吗?你怎么总是保证得到下一个Xact_seqno?您是按Xact_Seqnoentry_time 或 entry_time订购交易?
replication sql-server sql-server-2012 transactional-replication