Error number: 20598 The row was not found at the Subscriber when applying the replicated command.

来源:互联网 发布:重庆邮电大学人工智能 编辑:程序博客网 时间:2024/06/11 06:30

今天测试Replication遇到下面的错误:

 

The row was not found at the Subscriber when applying the replicatedcommand.(Source: MSSQLServer, Error number: 20598)

if @@trancount > 0 rollback tran
(Transaction sequence number: 0x0000004100000162000400000000, Command ID: 1)

 

这个错误说明了当发布服务器上执行的语句在订阅服务器上执行时无法在订阅服务器找到对应的数据,所以出错。在默认情况下,发布代理遇到错误时就会停止,所以后影响后面的发布执行。

 

解决这个问题的根本原因首先要查出那些数据不同步,可以使用DATADIFF工具验证两边数据,然后同步数据(或者重新初始化)。

 

查询是哪个Article出了问题可以使用下面的语句:


USE [distribution]

 

select * from dbo . MSarticles

where article_idIN(SELECT Article_idfrom MSrepl_commands

where xact_seqno= 0x0000004100000162000400000000)

 

结果如下(这个例子test表数据有问题):

 

 

 

但是发现那些数据不同步可能会花比较长的时间,为了能够让发布尽快同步,我们可以跳过事务复制中的错误。对于事务复制,有两种方法可以跳过在分发过程中遇到的错误:

·        分发代理的-SkipErrors参数,可用来跳过某种类型的错误。有错误的事务将不提交,但后续的事务将提交。

·        sp_setsubscriptionxactseqno存储过程,可用来跳过一个或多个导致错误的事务。非SQL Server的订阅服务器没有此选项。

使用-SkipErrors参数,可以让代理将错误记录下来,而Agent继续运行。通常的做法是在DistributionAgent profile中使用“Continue On Data ConsistencyErrors”。如图:

 

 

注意:代理参数更改将在下次启动代理时生效。如果代理连续运行,您必须停止并重新启动代理。

 

更多详细信息参考:SkippingErrors in Transactional Replicationhttp://technet.microsoft.com/en-us/library/ms151331(v=sql.105).aspx

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 多乐士遮盖力差怎么办 苹果变成白苹果怎么办 亚马逊仓库满了怎么办 医保不给报销怎么办 海信电视特别卡怎么办 在花呗上被骗了怎么办 西洋杜鹃掉叶子怎么办 苹果iap支付失败怎么办 此项目无法退款怎么办 及贷逾期一天怎么办 快贷逾期一天怎么办 燃气灶开关松了怎么办 厨房插座挨灶台怎么办 天然气灶费电池怎么办 国美东西买贵啦怎么办 饥荒咕咕鸟死了怎么办 收到催天下信息怎么办 对门邻居有白事怎么办 顺丰理赔不合理怎么办 手机店抽奖被骗怎么办 手机店投票被骗怎么办 锤子手机进水了怎么办 锤子手机无法关机怎么办 坚果pro2卡顿怎么办 兴隆破产兴隆卡怎么办 电脑开机键失灵怎么办 网上买冰箱售后怎么办 物流公司损坏了怎么办 白色充电器线脏了怎么办 卷尺缩不回去怎么办 在昆山怎么办电瓶车牌 网购遇到质量问题怎么办 洗衣机外壳坏了怎么办 8元飞享套餐下线怎么办 改光纤后传真机怎么办 网上预约迟到了怎么办 国地税合并局长怎么办? 信用卡申请条件不足怎么办 深户落亲戚房产怎么办准迁证 从深圳迁出户口怎么办 快递未送达签收怎么办