博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql server 复制之找不到该行的非暴力处理方法
阅读量:7117 次
发布时间:2019-06-28

本文共 885 字,大约阅读时间需要 2 分钟。

用过事务复制订阅的都有过这样的经历,订阅端总有些手欠的会不经意的改动一下下,

然后你的就会收到:

"应用复制的命令时在订阅服务器上找不到该行。 (源: MSSQLServer,错误号: 20598)"

这样的报错,最简单暴力的方法跳错,

在分发服务器上

exec sp_helpsubscriptionerrors ‘发布服务器别名’

, ‘发布数据库’
, ‘发布复制名’
, ‘订阅服务器别名’
, ‘订阅数据库’;

找到xact_seqno,比如=0x0000085200000113000C00000000

 

然后在订阅服务器的订阅数据库上执行下面sql:

exec sp_setsubscriptionxactseqno ‘发布服务器别名’
, ‘发布数据库’
, ‘发布复制名’
, 0x0000085200000113000C00000000

OK,错误就跳过去了,但是跳过的是一个MSrepl_transactions,如果这个transaction里更新了多个行,但是因为一行丢失,

导致其他行的更新都跳过了,这样会试订阅端的数据和主数据不一致(都让人修改了,还担心不一致?好吧,按理想状态来说),

所以可以采用更细的方法,来处理这个错误,修改订阅端丢失的数据。

如第一个找xact_seqno的SQL,拿到xact_seqno,command_id.

然后在分发上,sp_browsereplcmds @xact_seqno_start =0x0000085200000113000C00000000,@xact_seqno_end=0x0000085200000113000C00000000,@publisher_database_id=1 ,@command_id=4

找到 {CALL [sp_MSupd_dbotest] (,,'dd',4,0x04)}

然后在订阅服务器,补充主键=4的数据

然后复制就恢复了。

 

虽然比较麻烦,但相对缓和一些。

转载于:https://www.cnblogs.com/lweia/p/3727761.html

你可能感兴趣的文章
C# & OR &&
查看>>
NAT和桥接的区别
查看>>
查看进程
查看>>
织梦的autoindex和intemindex的区别
查看>>
标准W3C盒子模型和IE盒子模型CSS布局经典盒子模型
查看>>
开源USM-AlienVault OSSIM
查看>>
Linux系统单用户模式
查看>>
android 中MVC与MVP,MVVM模式使用介绍
查看>>
lol skl
查看>>
postgreSQL 9.1 的安装、基本配置、简单使用
查看>>
JavaScript日期时间对象的创建与使用(三)
查看>>
PHP编程效率的20个要点
查看>>
HTC A510C屏幕失灵补丁
查看>>
mysql主从数据不一致问题解决
查看>>
go 入门学习笔记之 条件判断 if switch (七)
查看>>
Linux下清空用户登录记录和命令历史的方法
查看>>
python 函数
查看>>
Visual Sudio 复制窗体文件
查看>>
实例变量并不安全(java)
查看>>
修改系统文件(cookie、桌面、我的文档)位置
查看>>