Mike Zalansky Asked: 2016-09-02 13:07:03 +0800 CST2016-09-02 13:07:03 +0800 CST 2016-09-02 13:07:03 +0800 CST 2 个相同的服务器/SQL 服务器处理带有合并复制的事务 772 为了清楚起见,编辑了整个问题。 场景:在不同的服务器上有 2 个相同的 SQL Server,同时处理来自不同应用程序的事务,同时完全同步(例如移动应用程序服务器 1 和 Web 应用程序服务器 2)。 我们将使用 Always On 将一台服务器故障转移到另一台服务器进行维护,反之亦然,但是当维护完成后,两台服务器将再次在线处理来自我们各种应用程序的事务并同步。 试图解决来自客户端的在线请求,即使在维护期间,使用 2 个同步服务器,每个服务器处理来自不同应用程序的事务。 使它们保持同步的最佳方法是什么?倾向于合并复制。 当前版本。SQL Server 2012 SP3-CU4 谢谢 sql-server-2012 merge-replication 2 个回答 Voted Danilo Braga 2016-09-02T13:39:36+08:002016-09-02T13:39:36+08:00 您是否考虑过对等事务复制?您可以在此处 找到更多比较。 对等事务复制:使用时... 复制用于提高可伸缩性和可用性。 需要最小的延迟。 数据未在订阅者之间进行分区。 通常不会发生冲突,但如果发生冲突则必须检测到。 合并复制:使用时... 有大量订阅者。 数据被复制到移动用户。 复制的数据经常在订阅服务器上更新。 需要数据过滤,以便订阅者接收不同的数据分区。 Best Answer Rajesh Ranjan 2016-09-03T07:56:27+08:002016-09-03T07:56:27+08:00 根据给定的场景,如果两个应用程序使用同一组数据(数据库),AlwaysOn 是最佳解决方案。 它可以在镜像节点上为您提供快速且几乎实时的同步,并在发生任何错误时立即进行故障转移。 要与数据库建立连接,您有通用的 IP 地址/侦听器名称,因此您无需更改 IP 地址以防发生故障转移。 由于它允许使用镜像数据库执行读取操作,您可以通过将读取 (SELECT) 请求重定向到它来将其用于报告,并获取镜像数据库的完整和差异,从而减少主节点的读取开销。 无论您的应用程序是 OLAP 还是 OLTP,都不要担心,与复制始终开启不同,它不会记录文章事务并在合作伙伴数据库上执行。而是将完整的事务从主体数据库的缓冲区同步到镜像数据库。 对于定期维护,这是最好的解决方案。在镜像节点执行服务器维护活动,完成后加入集群时,镜像数据库将与主体同步。 当两个不同的应用程序操作不同服务器上不同数据库中可用的几个公共表时,合并复制很有用。例如,在一个组织中,HR 和 Account 两个部门都需要 Employee 表来处理,但都不想彼此共享他们的记录。所以如果有两个数据库 HR_DB 和 Account_DB,我们可以在两个数据库之间为 Employee 表设置合并复制。 复制记录对您包含在其中的每篇文章执行的 DML 操作。它就像一个用于更新、插入和删除的对象上的触发器,创建该对象是为了记录每个 DML 请求,因此如果您的应用程序是写入密集型的,您可能会面临性能和事务冲突问题。 如果所有应用程序都使用同一组数据(数据库),那么您走在正确的道路上,在这种情况下倾向于合并复制不是一个好主意。 谢谢
您是否考虑过对等事务复制?您可以在此处
找到更多比较。
根据给定的场景,如果两个应用程序使用同一组数据(数据库),AlwaysOn 是最佳解决方案。
它可以在镜像节点上为您提供快速且几乎实时的同步,并在发生任何错误时立即进行故障转移。
要与数据库建立连接,您有通用的 IP 地址/侦听器名称,因此您无需更改 IP 地址以防发生故障转移。
由于它允许使用镜像数据库执行读取操作,您可以通过将读取 (SELECT) 请求重定向到它来将其用于报告,并获取镜像数据库的完整和差异,从而减少主节点的读取开销。
无论您的应用程序是 OLAP 还是 OLTP,都不要担心,与复制始终开启不同,它不会记录文章事务并在合作伙伴数据库上执行。而是将完整的事务从主体数据库的缓冲区同步到镜像数据库。
对于定期维护,这是最好的解决方案。在镜像节点执行服务器维护活动,完成后加入集群时,镜像数据库将与主体同步。
当两个不同的应用程序操作不同服务器上不同数据库中可用的几个公共表时,合并复制很有用。例如,在一个组织中,HR 和 Account 两个部门都需要 Employee 表来处理,但都不想彼此共享他们的记录。所以如果有两个数据库 HR_DB 和 Account_DB,我们可以在两个数据库之间为 Employee 表设置合并复制。
复制记录对您包含在其中的每篇文章执行的 DML 操作。它就像一个用于更新、插入和删除的对象上的触发器,创建该对象是为了记录每个 DML 请求,因此如果您的应用程序是写入密集型的,您可能会面临性能和事务冲突问题。
如果所有应用程序都使用同一组数据(数据库),那么您走在正确的道路上,在这种情况下倾向于合并复制不是一个好主意。
谢谢