解决SQL Server复制数据冲突造成复制失败


SQL Server复制是我们常用的一个提高性能和可用性的功能,但这东东确实已存在很多不稳定因素,会造成复制功能的失效,今天就遇到了一个问题是由于SQL Server数据冲突造成的事务复制失败。解决这个问题可以重新初始化复制来保障两边的数据一致性。也可以选择跳过失败的事务,这样虽然可能会有部分数据不一致但如果能够确保这部分数据不是关键数据则可以使用这个方案。

跳过失败的事务需要用到两个SP,第一个是sp_helpsubscriptionerrors,用于查询具体是哪个事务造成了数据冲突,此存储过程在分发服务器的分发数据库中执行。

语法

sp_helpsubscriptionerrors [ @publisher = ] 'publisher' , [ @publisher_db = ] 'publisher_db' , [ @publication = ] 'publication' , [ @subscriber = ] 'subscriber' , [ @subscriber_db = ] 'subscriber_db'

在返回的表格中xact_seqno列就是我们要找的事务ID。

这时候就可以使用我们的第二个SP:sp_setsubscriptionxactseqno 

语法

sp_setsubscriptionxactseqno [ @publisher = ] 'publisher' , [ @publisher_db = ] 'publisher_db' , [ @publication = ] 'publication' , [ @xact_seqno = ] xact_seqno 

此存储过程在订阅服务器上对订阅数据库(业务数据库)执行。非 SQL Server 订阅服务器不支持该过程。

执行成功后,就可以跳过这个事务,复制就可以继续执行了。当然最好能够在复制修复后验证是否存在关键数据的缺失或不一致。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值