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 ]
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
@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、发布者上,用复制查看器观察,终于跑起来了,乌龟开始追赶白兔,搞定收工