首页 > 代码库 > SQL Server同步复制问题排查方法

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
--a、通常事务序列号,查到command_id=1的执行语句
EXEC sp_browsereplcmds @xact_seqno_start=‘0x00044ED500008F3E00AB00000000‘,@xact_seqno_end=‘0x00044ED500008F3E00AB00000000‘
 
--查看同步对象表(在以上结果集中找到article_id栏位值)
select *From MSarticles where article_id=344 


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

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

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

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

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

了解同步存储过程:


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

--c、新增时出错

{CALL [dbo].[sp_MSins_dbo] 


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


SQL Server同步复制问题排查方法