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 这些错误码
配置好后,查看服务器发布是否恢复正常
已经恢复正常了。
这种跳过错误的操作随不可取,但确实好用,另外,我们可以通过定时将主库还原到从库的方式来减少主从数据差异
参考:
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'
并将分发服务器订阅过期时间设置为长期时间