【问题标题】:Transactional Replication or Snapshot Replication For My Situation我的情况的事务复制或快照复制
【发布时间】:2019-08-06 08:46:15
【问题描述】:

我目前正在为一家公司做一个项目,该公司有 8 个分支机构,每个分支机构都有自己的服务器。他们要求我将数据库合并为一个以供总部使用。也许我很愚蠢,但我能想出的唯一方法是将每个数据库复制到总部。因此,总部将有每个分支机构的 8 个数据库。问题是他们希望数据更改是实时的,所以我认为快照不起作用。

所以我选择了交易,但在我的测试中,我尝试先删除总部数据库中的一些记录,然后从发布者/分支机构中删除相同的记录。 当它尝试复制数据库时出现此错误,

"应用复制的数据时,在订阅服务器上未找到该行 带有主键的表“[dbo].[repl_tbl]”的删除命令:[id] = 1(来源:MSSQLServer,错误号:20598)"

我发现的另一个问题是,如果我要使用主键“15”将新数据添加到我总部当前尚不存在的分支数据库中,然后我使用主键添加数据' 15' 到分支/发布者数据库,现在这会导致错误

“违反PRIMARY KEY约束'PK_repl_tbl'。无法插入 对象“dbo.repl_tbl”中的重复键。重复键值为 (13)。 (来源:MSSQLServer,错误号:2627)"

我预计总部的数据会根据分支机构发生变化。

非常感谢任何建议。提前致谢。

【问题讨论】:

  • 听起来你没有配置双向复制。在一种方式中,只能对正在发布的文章进行更改。当命令到达订阅者时,会进行检查以强制执行完整性,这就是您收到错误的原因。您必须煞费苦心地找到并解决问题,或者从新的发布快照重新开始。
  • 感谢您的评论。是的,我没有将其设置为双向。但是,我现在正在考虑使用合并事务,因为我刚刚收到一个新请求,有时总部需要更新需要传输回分支机构的数据。并且按照 andrews 的建议对 Always On 技术进行更多研究。

标签: sql sql-server transactions replication snapshot


【解决方案1】:

如果更改必须实时反映在每一方,并且要在发布者和订阅者处进行,那么您可能需要查看合并复制,而不是事务或快照:

https://docs.microsoft.com/en-us/sql/relational-databases/replication/merge/merge-replication?view=sql-server-2017

合并复制有点复杂,如果发生任何问题,您不能简单地在 Publisher 处重新初始化订阅,因为您将在订阅者处丢失非同步数据,就像在此 question 中描述的问题一样。但从你的描述来看,这可能是一种方法。

但是,合并、快照或事务复制主要处理单个已发布的表,然后是整个数据库。如果您需要在总部提供来自分支机构的完整数据库,那么您可能需要查看另一种称为Always On Availability Groups 的技术。使用 AG,您可以轻松地为总部提供远程 DB,但首先需要在分支机构和总部之间设置 Windows Failover Cluster。 AG 的限制之一是辅助副本数据库是只读的。只能在主副本上进行更改。

HTH

【讨论】:

  • 非常感谢先生。我会尝试更多地研究 Always On 技术。
  • @DaimYakub 你能解决你的问题吗?您选择了哪条路径:复制还是 AG?
  • @andews 抱歉回复晚了。有点,但我没有选择 AG,我使用的是事务复制。我工作的公司只使用不支持AG的sql server标准版。
  • @DaimYakub 我明白了。感谢您回复反馈并接受并投票!
  • 不客气,也非常感谢您的帮助。
猜你喜欢
  • 2014-05-20
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 2014-09-01
  • 2016-02-13
相关资源
最近更新 更多