SqlServer 主从复制错误分析--20598

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

1、在分发服务器执行如下脚本

select * from MSsubscriber_info

select * from MSpublications

 2、选择分发数据库-distribution,执行如下脚本

 

sp_helpsubscriptionerrors 'IZQY9C2TQSKGS9ZTEST'
,'DBTEST' 
, 'DbPiblish' 
,'iZzvz98dbvrvv4ZTS' 
,'DBTEST'

执行完毕后,发现各种错误

 其中最多的是 20598 ,然后

查看导致错误的操作及表

--
EXEC sp_browsereplcmds @xact_seqno_start='0x000000B400015592000A00000000',@xact_seqno_end='0x000000B400015592000A00000000'

 

 

 通过箭头所指的字段,继续查看详细错误类别--此时可以看到具体的数据表名

分发订阅时,一旦发生此类错误,分发订阅就会停止,严重影响了数据同步及正常业务保障

 如果解决这些问题?

 

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

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

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

解决方法1太过复杂,且大数据情况下,错误很多时,没法操作。

那么,我们就剩下最后一个方法了,将错误码忽略

如何操作?

 右键 本地发布,找到分发服务器属性,点击分发服务器属性

 选择 skip 这些错误码

 

 

 配置好后,查看服务器发布是否恢复正常

 已经恢复正常了。

这种跳过错误的操作随不可取,但确实好用,另外,我们可以通过定时将主库还原到从库的方式来减少主从数据差异

参考:

事务复制中订阅节点非活动( inactive)错误

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

sqlserver复制报”应用复制的命令时在订阅服务器上找不到该行“解决方法 

 

SQLSERVER  常见错误

找不到存储过程 'sp_MSupd_dboEvl_PoliceCenter'。 (源: MSSQLServer,错误号: 2812)

参考:

https://blog.csdn.net/xiaoye1202/article/details/82884459

 

错误2:

已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除 NoSync 订阅,然后重新创建它们。

执行如下脚本:

use distribution  
go
select status,*from dbo.MSsubscriptions where status =0

update sub set status = 2
from distribution.dbo.MSsubscriptions sub 
where status<>2 and publication_id='查询到的publication_id'

并将分发服务器订阅过期时间设置为长期时间

 

posted @ 2024-08-07 18:17  天才卧龙  阅读(35)  评论(0编辑  收藏  举报