【发布时间】: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