【问题标题】:SQL Server 2012: synchronize two servers with writes to bothSQL Server 2012:同步两台服务器并同时写入
【发布时间】:2013-11-12 15:52:15
【问题描述】:

我遇到了 SQL Server 2012 Enterprise 设置问题,目前无法找到针对我的特定用例的解决方案:

我有两台 SQL 服务器,一台在美国,一台在德国。两者都用于读取和写入,任务是使它们同步。好消息是,虽然阅读经常发生,但每分钟左右只写一次(但是对于不同的表)。基本上我正在寻找一种复制设置,其中两台服务器都是主服务器,并且可以将更改发送到另一台..

这可能吗?

谢谢,克里斯托夫

【问题讨论】:

  • 合并复制和事务复制都支持更新订阅者——但可能会有一些有趣的权衡。两台服务器之间的写入是平衡的还是处理例如90% 的写入?
  • 我会说写入是平衡的。一个处理 60%,另一个处理大约 40%。请问这有什么改变吗?

标签: sql sql-server-2012 replication mirroring


【解决方案1】:

Merge Replication、Bidirectional Transactional Replication 或 Peer-to-Peer Replication 最适合这里。

由于两台服务器都可能发生写入,因此您需要考虑在发生冲突时该怎么做。当同步之间在 2 个不同的服务器上更改相同的行/列时,将发生冲突。如果可能,最好通过对写操作进行分区来完全避免冲突。实现此目的的一种方法是向可写表中添加特定于位置的标识符列,并确保仅在一个位置执行特定行的写操作。

合并复制提供双向同步以及定义静态和参数化行过滤器的能力,以提供要发布给订阅者的数据子集。 Merge Replication 还提供内置的冲突解决程序以及实现自定义冲突解决程序的能力。

双向事务复制提供双向同步,但不提供任何类型的冲突检测或解决。

Peer-to-Peer Replication 提供双向同步,但是它要求所有节点都是企业版,并且不支持行或列过滤。对等复制具有内置的冲突检测,但不提供自动冲突解决。

我建议在您的测试环境中设置每一个,看看哪种复制类型最适合您的需求。

【讨论】:

    【解决方案2】:

    是的,为此您可以使用MergeReplication 或Transactional Replication

    它们都在以下页面上进行了详细描述: http://technet.microsoft.com/en-us/library/ms152531.aspx

    每个表必须有一个设置为 rowguid 的字段。 对此的要求是它是唯一标识符类型。 您应该注意默认值“newid”带来的碎片问题。相反,您应该确保使用默认值“newsequentialid”。

    在 SQL Server Management Studio 的帮助下设置此类复制时,它应该自动执行此操作。 在下面的帖子中,提到了 newsequentialid 和 newid 的一些细节: http://www.mssqltips.com/sqlservertip/1600/auto-generated-sql-server-keys-with-the-uniqueidentifier-or-identity/

    【讨论】:

      【解决方案3】:

      您想使用双向进程。哟可以在两台服务器上使用与分发器的合并复制。您可以通过对等事务复制来达到您的目标,它也可能导致冲突,因此请使用具有冲突解决方案的合并复制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-07
        • 1970-01-01
        • 2011-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多