SQL Server同步复制问题排查方法
来源:互联网 发布:怎样用手机注册淘宝店 编辑:程序博客网 时间:2024/05/22 15:22
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 timeasbegin 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)asbegin 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] endwhere [ID] = @pkc1if @@rowcount = 0 if @@microsoftversion>0x07320000 exec sp_MSreplraiserror 20598end GO--删除调用存储过程格式:(订阅客户端删除数据时没有找到记录更新时;错误码:20598)create procedure [dbo].[sp_MSdel_dboTableName]@pkc1 tinyintasbegin delete [dbo].[TableName]where [ID] = @pkc1if @@rowcount = 0 if @@microsoftversion>0x07320000 exec sp_MSreplraiserror 20598end 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已在(删除订阅端该行数据)或表结构不值造成的
3 0
- SQL Server同步复制问题排查方法
- SQL SERVER 2005 同步复制
- SQL Server 2005 同步复制
- SQL SERVER同步复制技术
- SQL Server 数据库 同步 复制
- SQL Server 复制问题
- sql server数据库卡问题排查
- 关于sql server性能问题排查
- 事务复制问题排查
- 事务复制问题排查
- 配置SQL Server 2000复制和同步
- 配置SQL Server 2000复制和同步
- SQL SERVER 2005 同步复制技术
- SQL SERVER 2005 同步复制技术
- SQL SERVER 2005 同步复制技术
- SQL SERVER 2005 同步复制技术
- SQL SERVER 2005 同步复制技术
- SQL SERVER 2005 同步复制技术
- java让edittext输入小数和数字
- 几道位操作的题目思路与实现
- “双十一”后的邮件营销深度思考
- ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)
- iPhone像素点和常用控件尺寸
- SQL Server同步复制问题排查方法
- 示例:使用EmguCV视频截图
- MKMapView的使用
- IOS命令打包 xcrun xcodebuild
- 二分查找算法
- 深入理解 select驱动
- Java解压缩-Rar文件
- C# - readonly
- Android 系统稳定性 - ANR(二)