MS SQL事务复制 - 在订阅服务器上应用快照时跳过错误

时间:2016-11-19 11:41:50

标签: sql-server sql-server-2008 replication sql-server-2014 transactional-replication

我试过在互联网上找到这个,但找不到任何关于它的东西。有一些方法可以在分发代理中跳过错误,但在应用快照时跳过错误没有任何内容。

我的问题:我有一个Multi Publisher Single Subscriber设置。在设置复制时,第一个发布服务器的快照已成功传递给订户。已成功生成连续发布者的快照,但在将其应用于订阅者时失败。失败是由于主键违规造成的。有没有办法在订阅服务器上应用快照时跳过错误?

环境:

  • 发布者:Microsoft SQL Server 2008 R2(SP2) - (X64)
  • 分销商:Microsoft SQL Server 2014(SP2)(KB3171021) - (X64)
  • 订阅者:Microsoft SQL Server 2008 R2(SP3-OD)(KB3144114) - (X64)

我已经尝试识别导致此问题的表和记录,但是有超过100个这样的表,每个表都有数百条记录。

由于复制是客户端要求,因此我无法控制架构及其中的数据。

1 个答案:

答案 0 :(得分:1)

听起来您的设置中的内容不正确,这导致来自不同发布商的多个表尝试将行插入到同一订阅者表中,因此重复的密钥记录。

如果不同的发布者都拥有同一个表的相同副本,您只想从其中一个发布。

如果不同的发布者都拥有同一个表的个不同副本,那么您希望每个发布者都拥有自己的订阅者表。

否则,您最终会丢失订阅者中的大量行(因为不同的发布者对实际不同的行使用相同的密钥)或者遇到奇怪的复制错误。只是跳过错误会导致数据不正确 - 而且我也猜测这也是客户要求之一。

我过去使用过的一个选项来简化复制地形和管理:

  • 每个出版物一个订阅者数据库
  • 永远不授予用户对这些数据库的写访问权
  • 通过使用同义词或视图的其他数据库授予读取权限

这也可以使管理更简单。如果您需要重新初始化单个数据库,则可以选择从备份中恢复它,并且通常比订阅者共享同一数据库时更灵活。

为了完整起见,我应该向您指出Skipping Errors in Transactional Replication中的联机丛书条目。但要明确的是,我认为这是一个错误,因为你最终会得到不正确的数据 - 这可能不是任何人想要的。