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

解决方法:用系统存储过程sp_browsereplcmds(返回分发数据库中存储的可读版本复制命令的结果集,并将其用作诊断工具。 此存储过程在分发服务器上对分发数据库执行)

  1. sp_browsereplcmds [ [ @xact_seqno_start = ] 'xact_seqno_start' ]
  2. [ , [ @xact_seqno_end = ] 'xact_seqno_end' ]
  3. [ , [ @originator_id = ] 'originator_id' ]
  4. [ , [ @publisher_database_id = ] 'publisher_database_id' ]
  5. [ , [ @article_id = ] 'article_id' ]
  6. [ , [ @command_id= ] command_id ]
  7. [ , [ @agent_id = ] agent_id ]
  8. [ , [ @compatibility_level = ] compatibility_level ]

排查方法:在分发服务器—分发DB(distribution)

  1. Use [distribution]
  2. go
  3. --查询1:通常事务序列号,查到command_id=1的执行语句
  4. EXEC sp_browsereplcmds @xact_seqno_start='0x00044ED500008F3E00AB00000000',@xact_seqno_end='0x00044ED500008F3E00AB00000000'
  5.  
  6. --查询2:查看同步对象表(在以上结果集中找到article_id/publication_id栏位值)
  7. select *From MSarticles where article_id=344
  8.  
  9. --查询3:同步命令太多时,查看可指定@command_id[如图1](必须可传@publisher_database_id[查询2])
  10. EXEC sp_browsereplcmds
  11. @xact_seqno_start='0x00044ED500008F3E00AB00000000'
  12. ,@xact_seqno_end='0x00044ED500008F3E00AB00000000'
  13. ,@publisher_database_id=4
  14. ,@command_id=1 --

--第1个语句会出现以下两种情况(a/b)

--a、更新时找不到该行

{CALL [dbo].[sp_MSupd_dbo表名] (.....)}

--b、删除时找不到该行

{CALL [dbo].[sp_MSdel_dbo表名] (......}

了解同步存储过程:

订阅端同步接口格式如下:

  1. --新增调用存储过程格式:((订阅客户端新增时同步存储不会抛出错误码))
  2.  
  3. create procedure [dbo].[sp_MSins_dboTableName]
  4. @c1 tinyint,
  5. @c2 nvarchar(50),
  6. @c3 time,
  7. @c4 time
  8. as
  9. begin
  10. insert into [dbo].[TableName](
  11. [ID],
  12. [Name],
  13. [StartTime],
  14. [EndTime]
  15. ) values (
  16. @c1,
  17. @c2,
  18. @c3,
  19. @c4 )
  20. end
  21.  
  22. GO
  23.  
  24. --更新调用存储过程格式:(订阅客户端修改数据时没有找到记录更新时;错误码:20598)
  25.  
  26. create procedure [dbo].[sp_MSupd_dboTableName]
  27. @c1 tinyint = NULL,
  28. @c2 nvarchar(50) = NULL,
  29. @c3 time = NULL,
  30. @c4 time = NULL,
  31. @pkc1 tinyint = NULL,
  32. @bitmap binary(1)
  33. as
  34. begin
  35. update [dbo].[TableName] set
  36. [Name] = case substring(@bitmap,1,1) & 2 when 2 then @c2 else [Name] end,
  37. [StartTime] = case substring(@bitmap,1,1) & 4 when 4 then @c3 else [StartTime] end,
  38. [EndTime] = case substring(@bitmap,1,1) & 8 when 8 then @c4 else [EndTime] end
  39. where [ID] = @pkc1
  40. if @@rowcount = 0
  41. if @@microsoftversion>0x07320000
  42. exec sp_MSreplraiserror 20598
  43. end
  44.  
  45. GO
  46.  
  47. --删除调用存储过程格式:(订阅客户端删除数据时没有找到记录更新时;错误码:20598)
  48. create procedure [dbo].[sp_MSdel_dboTableName]
  49. @pkc1 tinyint
  50. as
  51. begin
  52. delete [dbo].[TableName]
  53. where [ID] = @pkc1
  54. if @@rowcount = 0
  55. if @@microsoftversion>0x07320000
  56. exec sp_MSreplraiserror 20598
  57. end
  58.  
  59. GO

解决方法1:(a、更新、b、删除):在订阅端把缺少的数据行新增(根据以上出错ID加一条记录)或用导入导出方法(SQL语句同步指定以上ID).(原因:订阅端缺少数据行造成删除或更新找不到数据行而出错),

不推荐以下方法(解决方法2、解决方法3)

解决方法2:改同步存储过程接口把抛出错码判断去掉,会造成数据不同步,如果取消最好只取消删除时调用的存储过程(如:sp_MSdel_dboTableName)

解决方法3:使用发布代理的SkipErrors参数来忽略跳过错误20598(会造成数据不同步,不能有效查找原因,需要对比环境数据(如表:记录数))如下图:

--c、新增时出错

{CALL [dbo].[sp_MSins_dbo表]

解决方法4:(c、新增时出错):新增时出错,解决方法根据提示可能是标识值或主健ID已在(删除订阅端该行数据)或表结构不值造成的

SQL Server同步复制问题排查方法的更多相关文章

  1. SQL Server 事务复制分发到订阅同步慢

    原文:SQL Server 事务复制分发到订阅同步慢 最近发现有一个发布经常出现问题,每几天就出错不同步,提示要求初始化.重新调整同步后,复制还是很慢!每天白天未分发的命令就达五六百万条!要解决慢的问 ...

  2. SQL Server 2012复制教程以及复制的几种模式

    简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护 ...

  3. sql server 本地复制订阅 实现数据库服务器 读写分离(转载)

    转载地址:http://www.cnblogs.com/echosong/p/3603270.html 再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下S ...

  4. sql server 本地复制订阅 实现数据库服务器 读写分离

    再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 ...

  5. SQL Server 2008性能故障排查(三)——I/O

    原文:SQL Server 2008性能故障排查(三)--I/O 接着上一章:CPU瓶颈 I/O瓶颈(I/O Bottlenecks): SQLServer的性能严重依赖I/O子系统.除非你的数据库完 ...

  6. SQL Server 2008性能故障排查(二)——CPU

    原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好 ...

  7. SQL Server 2008性能故障排查(一)——概论

    原文:SQL Server 2008性能故障排查(一)--概论 备注:本人花了大量下班时间翻译,绝无抄袭,允许转载,但请注明出处.由于篇幅长,无法一篇博文全部说完,同时也没那么快全部翻译完,所以按章节 ...

  8. SQL Server 2012 复制(发布订阅的研究)

    原文:SQL Server 2012 复制(发布订阅的研究) 已实现发布订阅功能,可以实现局域网内双击备份. 一.注意事项: a) 使用[事务复制]功能 b) 必须是相同的SqlServer 帐号和密 ...

  9. SQL Server 事务复制爬坑记

    SQL Server 复制功能折腾了好几天了,现特将其配置过程以及其间遇到的问题记录下来,以备日后查阅.同时,也让“同道”同学们少走不必要的弯路.如果有不对之处,欢迎大家指正,欢迎沟通交流. 一.复制 ...

随机推荐

  1. 一起Polyfill系列:让Date识别ISO 8601日期时间格式

    一.什么是ISO 8601日期时间格式 ISO 8601是国际标准化组织制定的日期时间表示规范,全称是<数据存储和交换形式·信息交换·日期和时间的表示方法>. 示例: 1. 2014-12 ...

  2. 前端js的书写规范和高效维护的方案_自我总结使用的方案

    作为程序员,人生最值得幸福的事有几件: 解决困扰了很长时间的问题 升职加薪 找个漂亮又靠谱的对象 深得领导的喜欢 带领团队冲锋陷阵 ... 哈哈,这些都是梦想,暂时想想就好了.这肯定和我说的东西不符合 ...

  3. [Solution] Microsoft Windows 服务(3) 使用Quartz.net定时任务

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,Quartz.net 就是Quartz的移植版本.Quartz可以用来创建简单或为运行十个,百个,甚至是 ...

  4. asp.net Get和Post传参和接收参数

    asp.netGet和Post传参和接收参数 Get请求: 对于传参:test.aspx?name=%e5%bc%a0%e4%b8%89 接收参数的方法: Request.QueryString[&q ...

  5. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

  6. VS "15" 预览 5 中 VB 15 新增的功能

    VS "15" 预览 5 给 VB 带来了更新.这次的更新内容有3个: * 值元组 ValueTuple这个功能能把一组计算结果成组返回.为了使用这个功能,我们要安装 System ...

  7. vs2012中编译时出现程序集所使用的版本高于所引用的版本

    我在运行别人的项目时出现版本不兼容的问题:

  8. 与众不同 windows phone (34) - 8.0 新的控件: LongListSelector

    [源码下载] 与众不同 windows phone (34) - 8.0 新的控件: LongListSelector 作者:webabcd 介绍与众不同 windows phone 8.0 之 新的 ...

  9. C# 修改电脑DNS和IP方法

    /// <summary> /// 将IP,DNS设置为自动获取 /// </summary> private void setDHCP() { string _doscmd ...

  10. hadoop pipes wordcount compile

    http://devel.cs.stolaf.edu/projects/bw/wiki.real/index.php/Hadoop_Reference,_January_2011 http://guo ...