关闭

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

662人阅读 评论(0) 收藏 举报
分类:


同步错误


. 错误:应用复制的命令时在订阅服务器上找不到该行
   a. 可以采用“主键冲突”错误的处理方式,跳过错误,然后再用tablediff比较两个表的数据差;
   b. 在订阅端补充缺失的数据
复制代码
--使用如下语句找出错误号
select top 100 e.xact_seqno ,e.command_id,e.* 
from dbo.MSdistribution_history h
join dbo.MSrepl_errors e on h.error_id=e.id
where comments not like '%transaction%' --失败的代理
order by id desc


--用上面查到的具体事务序列号,查看复制组件执行的具体命令
--在分发数据库上执行:sp_browsereplcmds,注意必须限定开始和结束xact_seqno
sp_browsereplcmds '0x0000003B00000020000500000000','0x0000003B00000020000500000000'
--结果如下
article_id command
1 {CALL [dbo].[sp_MSdel_dboUPCCodeTransaction] ('000000002 ')}


--找到对应的对象
select publisher_db,article From dbo.MSarticles where article_id=1 and publication_id=(
select publication_id from MSpublications with(nolock) where publication='Rp_xxx')


--由sp_MSdel 可以知道,这条命令是一个删除语句,因为发布端的数据已经不存在,所以只能跳过;


--如果是修改,需要验证上述数据在故障订阅服务器上是否存在,如果不存在,则补上。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3314次
    • 积分:196
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:0篇
    • 译文:1篇
    • 评论:0条