【问题标题】:MS SQL Transactional Replication - Skipping Error while applying snapshot at the subscriberMS SQL 事务复制 - 在订阅者应用快照时跳过错误
【发布时间】:2016-11-19 11:41:50
【问题描述】:

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

我的问题:我有一个多发布者单订阅者设置。设置复制时,第一个 Publisher 的 Snapshot 已成功交付给订阅者。连续发布者的快照已成功生成,但在将其应用于订阅者时失败。失败是由于主键违规。有没有办法在订阅者应用快照时跳过错误?

环境:

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

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

由于复制是客户的要求,我对架构和其中的数据没有太多控制权。

【问题讨论】:

  • 如果您在应用快照时遇到 PK 错误,您不应该跳过它。您应该了解它为什么会发生并解决它。

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


【解决方案1】:

听起来您的设置中的某些内容不正确,这导致来自不同发布者的多个表试图将行插入同一个订阅者表中,因此出现重复的键记录。

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

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

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

我过去用来简化复制拓扑和管理的一个选项:

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

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

为了完整起见,我可能应该将您指向来自Skipping Errors in Transactional Replication 的在线图书条目。但需要明确的是,我认为这是一个错误,因为您最终会得到不正确的数据——这可能不是任何人想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-20
    • 2012-05-03
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多