SQL Server同步复制问题排查方法
1、应用复制的命令时在订阅服务器上找不到该行
解决方法:用系统存储过程sp_browsereplcmds(返回分发数据库中存储的可读版本复制命令的结果集,并将其用作诊断工具。 此存储过程在分发服务器上对分发数据库执行)
sp_browsereplcmds [ [ @xact_seqno_start = ] 'xact_seqno_start' ]
[ , [ @xact_seqno_end = ] 'xact_seqno_end' ]
[ , [ @originator_id = ] 'originator_id' ]
[ , [ @publisher_database_id = ] 'publisher_database_id' ]
[ , [ @article_id = ] 'article_id' ]
[ , [ @command_id= ] command_id ]
[ , [ @agent_id = ] agent_id ]
[ , [ @compatibility_level = ] compatibility_level ]
排查方法:在分发服务器—分发DB(distribution)
Use [distribution]
go
--查询1:通常事务序列号,查到command_id=1的执行语句
EXEC sp_browsereplcmds @xact_seqno_start='0x00044ED500008F3E00AB00000000',@xact_seqno_end='0x00044ED500008F3E00AB00000000' --查询2:查看同步对象表(在以上结果集中找到article_id/publication_id栏位值)
select *From MSarticles where article_id=344 --查询3:同步命令太多时,查看可指定@command_id[如图1](必须可传@publisher_database_id[查询2])
EXEC sp_browsereplcmds
@xact_seqno_start='0x00044ED500008F3E00AB00000000'
,@xact_seqno_end='0x00044ED500008F3E00AB00000000'
,@publisher_database_id=4
,@command_id=1 --
--第1个语句会出现以下两种情况(a/b)
--a、更新时找不到该行
{CALL [dbo].[sp_MSupd_dbo表名] (.....)}
--b、删除时找不到该行
{CALL [dbo].[sp_MSdel_dbo表名] (......}
了解同步存储过程:
订阅端同步接口格式如下:
--新增调用存储过程格式:((订阅客户端新增时同步存储不会抛出错误码)) create procedure [dbo].[sp_MSins_dboTableName]
@c1 tinyint,
@c2 nvarchar(50),
@c3 time,
@c4 time
as
begin
insert into [dbo].[TableName](
[ID],
[Name],
[StartTime],
[EndTime]
) values (
@c1,
@c2,
@c3,
@c4 )
end GO --更新调用存储过程格式:(订阅客户端修改数据时没有找到记录更新时;错误码:20598) create procedure [dbo].[sp_MSupd_dboTableName]
@c1 tinyint = NULL,
@c2 nvarchar(50) = NULL,
@c3 time = NULL,
@c4 time = NULL,
@pkc1 tinyint = NULL,
@bitmap binary(1)
as
begin
update [dbo].[TableName] set
[Name] = case substring(@bitmap,1,1) & 2 when 2 then @c2 else [Name] end,
[StartTime] = case substring(@bitmap,1,1) & 4 when 4 then @c3 else [StartTime] end,
[EndTime] = case substring(@bitmap,1,1) & 8 when 8 then @c4 else [EndTime] end
where [ID] = @pkc1
if @@rowcount = 0
if @@microsoftversion>0x07320000
exec sp_MSreplraiserror 20598
end GO --删除调用存储过程格式:(订阅客户端删除数据时没有找到记录更新时;错误码:20598)
create procedure [dbo].[sp_MSdel_dboTableName]
@pkc1 tinyint
as
begin
delete [dbo].[TableName]
where [ID] = @pkc1
if @@rowcount = 0
if @@microsoftversion>0x07320000
exec sp_MSreplraiserror 20598
end 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同步复制问题排查方法的更多相关文章
- SQL Server 事务复制分发到订阅同步慢
原文:SQL Server 事务复制分发到订阅同步慢 最近发现有一个发布经常出现问题,每几天就出错不同步,提示要求初始化.重新调整同步后,复制还是很慢!每天白天未分发的命令就达五六百万条!要解决慢的问 ...
- SQL Server 2012复制教程以及复制的几种模式
简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护 ...
- sql server 本地复制订阅 实现数据库服务器 读写分离(转载)
转载地址:http://www.cnblogs.com/echosong/p/3603270.html 再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下S ...
- sql server 本地复制订阅 实现数据库服务器 读写分离
再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 ...
- SQL Server 2008性能故障排查(三)——I/O
原文:SQL Server 2008性能故障排查(三)--I/O 接着上一章:CPU瓶颈 I/O瓶颈(I/O Bottlenecks): SQLServer的性能严重依赖I/O子系统.除非你的数据库完 ...
- SQL Server 2008性能故障排查(二)——CPU
原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好 ...
- SQL Server 2008性能故障排查(一)——概论
原文:SQL Server 2008性能故障排查(一)--概论 备注:本人花了大量下班时间翻译,绝无抄袭,允许转载,但请注明出处.由于篇幅长,无法一篇博文全部说完,同时也没那么快全部翻译完,所以按章节 ...
- SQL Server 2012 复制(发布订阅的研究)
原文:SQL Server 2012 复制(发布订阅的研究) 已实现发布订阅功能,可以实现局域网内双击备份. 一.注意事项: a) 使用[事务复制]功能 b) 必须是相同的SqlServer 帐号和密 ...
- SQL Server 事务复制爬坑记
SQL Server 复制功能折腾了好几天了,现特将其配置过程以及其间遇到的问题记录下来,以备日后查阅.同时,也让“同道”同学们少走不必要的弯路.如果有不对之处,欢迎大家指正,欢迎沟通交流. 一.复制 ...
随机推荐
- IOS开发UI基础UISlide属性
UISlide属性 • minimumValue : 当值可以改变时,滑块可以滑动到最小位置的值,默认为0.0_slider.minimumValue = 10.0; • maximum ...
- django book 阅读笔记
一,django是一个十分优秀的python web的框架,那框架的是什么? 假设我们不使用框架来进行编写,我们要用如下的代码进行web脚本: #!/usr/bin/env python import ...
- sprint3(第八天)
昨天忘了发博客,最近在整合前台和后台的内容,在sprint结束前应该能整合好,然后实现前后台的联系,实现点餐功能. 最近要准备大作业也要复习四六级考试,所以花在项目的时间比较少了,请老师谅解. 燃尽图
- .net中WebService的使用实例
一.创建一个Webwebservice 1.新建一个项目WebserverDemo 2.在项目处添加新建项,添加一个web服务 3.编辑TestServer.asmx文件 3.1 TestServer ...
- 【原创随笔】Sql2008 R2 做CQRS小结
1.做数据同步,订阅服务器只要把数据库建好就可以了,至于表和存储过程以及其它的都不管,订阅的时候会自动创建这些信息. 2.选择事务发布(如果同步表,表至少要带主键,不然不能选择) 3.在发布的时候,用 ...
- 重新想象 Windows 8.1 Store Apps (83) - 文件系统的新特性
[源码下载] 重新想象 Windows 8.1 Store Apps (83) - 文件系统的新特性 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之文件系统的新特 ...
- map与vector---Email Aliases
Description Polycarp has quite recently learned about email aliases. Of course, he used to suspect t ...
- Docker源码编译
官方建议docker源码编译在docker容器内进行,因为官方提供的容器内已经继承了编译需要的环境,如果非要自己搭建编译环境也不是不可以,就是稍微有些繁琐.以下以1.8.2版本为例. 1.pull d ...
- java jdk environment variables
1. create system variable 2. edit the system path note: ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 3. cre ...
- 【poj 3167】Cow Patterns(字符串--KMP匹配+数据结构--树状数组)
题意:给2个数字序列 a 和 b ,问按从小到达排序后,a中的哪些子串与b的名次匹配. a 的长度 N≤100,000,b的长度 M≤25,000,数字的大小 K≤25. 解法:[思考]1.X 暴力. ...