我的情况的事务复制或快照复制

Transactional Replication or Snapshot Replication For My Situation

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

所以我选择了交易,但从我的测试来看,我尝试先删除 HQ 数据库中的一些记录,然后我从 publisher/branches 中删除相同的记录。 当它尝试复制数据库时出现此错误,

"The row was not found at the Subscriber when applying the replicated DELETE command for Table '[dbo].[repl_tbl]' with Primary Key(s): [id] = 1 (Source: MSSQLServer, Error number: 20598)"

我发现的另一个问题是,如果我要将主键为“15”的新数据添加到我总部的分支数据库(目前尚不存在),然后我添加主键为“15”的数据branch/publisher 数据库的键 '15',现在这会导致

错误

"Violation of PRIMARY KEY constraint 'PK_repl_tbl'. Cannot insert duplicate key in object 'dbo.repl_tbl'. The duplicate key value is (13). (Source: MSSQLServer, Error number: 2627)"

我希望总部的数据会根据分支机构进行更改。

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

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

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

合并复制有点复杂,如果发生任何问题,您不能简单地在发布服务器上重新初始化订阅,因为您将丢失订阅服务器上的非同步数据,就像本 中描述的问题一样。但是根据您的描述,这可能是一条路要走。

但是,合并、快照或事务复制主要处理单个已发布的表,然后处理整个数据库。如果您需要在总部提供来自分支机构的完整数据库,那么您可能需要先查看另一种称为 Always On Availability Groups. With AGs you can easily make remote DBs available for HQ but it requires Windows Failover Cluster 在分支机构和总部之间设置的技术。 AG 的局限性之一是辅助副本数据库是只读的。只能在主副本上进行更改。

HTH