我最近刚刚为我的订阅者数据库设置了自定义复制,如此处的另一篇文章所述。基本上,当发布者向订阅者推送新记录时,存储过程也会将复制时间插入到表中的额外列中,并将新记录插入到日志表中。
尝试将日志表复制回主发布数据库时出现我的问题。这就是我所做的:
- 在日志表所在的数据库中,我设置了一个新的事务复制,并将其设置为创建快照。
- 创建发布后,我会创建一个新的推送订阅,并将其设置为立即初始化。
- 创建订阅后,我检查了同步状态并确认已成功应用快照。
现在这是奇怪的部分:如果我使用 SQL Server Management Studio 手动将记录添加到日志表中,该记录将被很好地复制。如果记录是由自定义复制存储过程添加的,则不会。状态将始终显示“没有可用的复制事务”。
我不知道出版物为什么会这样:我真的不明白它如何以不同的方式处理自定义复制存储过程插入的数据。
有人可以解释我做错了什么吗?
更新:几个月前我终于有了这个问题的答案,只是我从来没有时间更新这个问题。我们必须向 Microsoft 记录支持电话,但我们得到了一个可行的解决方案。
解答:要解决此问题,添加订阅时,您需要运行如下脚本:
sp_addsubscription @publication = 'TEST', ..., @loopback_detection = 'false'
解决方案的关键是上面显示的最后一个参数。默认情况下,生成的订阅脚本不会有这个参数。