转 应用复制的命令时在订阅服务器上找不到该行。

查看复制监视器/dbo.MSrepl_errors

遇到如下错误:

尝试的命令:

if @@trancount > 0 rollback tran (事务序列号: 0x0000003A000001DB006800000000,命令 ID: 3)

错误消息:

· 应用复制的命令时在订阅服务器上找不到该行。 (源: MSSQLServer,错误号: 20598) 获取帮助: http://help/20598

· 应用复制的命令时在订阅服务器上找不到该行。 (源: MSSQLServer,错误号: 20598) 获取帮助: http://help/20598

出现这种错误的原始可能是:订阅服务器中的一个数据行A被(误)删除了,而发布服务器要修改/删除A这条记录,顺利删除后要将结果更新到订阅,此时订阅服务器中A已经不存在了…

可以在distributor上执行如下语句,获得具体错误信息

sp_browsereplcmds ' 0x0000003A000001DB006800000000 ' , ' 0x0000003A000001DB006800000000 '

从上面的语句执行结果可以看出,一个删除100行数据的语句在发布库执行,  将相应的信息传递到分发后,分发库调用100次sp_MSdel_dbotx来完成数据的同步. 从之前的错误信息进一步看到,其中的第三条语句执行时到了问题:

分发代理在执行sp_MSdel_dbotx这条语句后出现了上述的错误。Sp_Msdel_dbotx这个存储过程的定义是在将对象添加到发布是定义的。默认的命名规则是sp_MS+operation+schemaName+tableName

可以通过下面这个查询定位到具体表

Use [ distribution ]
select * From MSarticles where article_id = @article_id

 

具体的定义可以在subscriber的订阅库中查看

 

use [ subDBName ] exec sp_helptext [ sp_MSdel_dbota ]

 

解决方式是将删除的行在订阅中重新插入,主键就是sp_MSdel_dbota里的参数。

 

转载于:https://www.cnblogs.com/suther/archive/2012/09/20/2694836.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值