SQL Server 事务复制故障处理一例

转自http://andyryu.cnblogs.com/

1、事务复制正常工作,某日,忽然报错:

甚为惶恐,以为必须重做

2、访问高峰,无暇重做,抱侥幸心理,放狗。。。

3、死马当活马,试烹之:

A、在发布服务器上,执行

use [ distribution ]
sp_browsereplcmds ' 0x00093FFA00002A0E00E000000000 ', ' 0x00093FFA00002A0E00E000000000 '

得到出错的事务明细

{CALL [dbo].[sp_MSdel_dbot_test] (27,104285)}

猜了半天,认为这个事务的作用是删除dbo.t_test表中的某些数据,后面的数字不知道什么意思
B、跑到订阅服务器上,执行
use [test ]
exec sp_helptext [ sp_MSdel_dbot_test ]
探寻这个事务到底干了啥
create procedure [ dbo ]. [ sp_MSdel_dbot_test ] 
  @pkc1 int
  @pkc2 int 
as 
begin   
delete [ dbo ]. [ t_test ] 
where [ te_bakid ] = @pkc1 
  and [ te_recid ] = @pkc2 
if @@rowcount = 0 
    if @@microsoftversion > 0x07320000 
        exec sp_MSreplraiserror 20598 
end

3、小新的小狗——真像大白

原来那两个数字,就是主键(这张表是联合主键)

试想,发布者要求订阅者,和它一样,删除某张表,某主键的数据,但是订阅者本身没这条数据,没法删,于是罢工

万恶的微软报错信息及翻译,就不能说得明白点吗?

4、尝试野蛮操作,既然你没有,没法删,那就瞎编几条,反正是用来删除的

此处省略n行insert代码

5、发布者上,用复制查看器观察,终于跑起来了,乌龟开始追赶白兔,搞定收工

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值