AlwaysOn 上的事务复制

res*_*had 2 replication sql-server availability-groups

在我们的 AlwayOn 环境中,我有两个 SQL 服务器 2014 Ent.edition(SERVER A 和 SERVER B)。我为 [database A ] 设置了一个事务复制,指向监听器,如果发生故障转移,它应该不会引起任何问题。经过测试,故障转移后工作正常,但是当我关闭 AOAG 中的一台服务器时,在测试环境中,复制停止工作。复制监视器上没有错误。出于测试目的,我在数据库中插入了几条记录,它在 AOAG 上运行良好,但在订阅服务器上,直到我启动另一台服务器时,才会复制数据修改。一旦服务器启动,复制就开始工作。我很确定,我可能会遗漏一些东西,这不可能是设计使然。

任何想法/建议?

这是我在 AOAG 上复制的内容。

  • 分发服务器 A(包含分发数据库)- SQLSERVER
    1. 这是在远程服务器上。
  • 两个订阅者 - Sv1 和 sv2 - SQLSERVER 2008R2 标准
  • Pbulishers(服务器 A 和 B - 来自 AOAG) - SQLSERVER 2014

AMt*_*two 6

日志读取器代理只会读取提交给所有其他可用性组副本的最后一个事务。这意味着如果一个 AG 副本离线,Replication 将停止读取事务,直到该 AG 副本重新联机。这样做是为了非常安全,并确保只复制完全提交的事务

在某些情况下,这对于您的设置来说可能过于保守。在这种情况下,您可以将Trace Flag 1448添加到启动参数中,这将禁用异步副本的此行为。如果同步副本离线,它仍然会阻止日志读取器代理读取未发送的事务以进行复制。

为什么 Microsoft 对同步副本施加此限制?如果 LSN 尚未在同步副本上强化,则事务未完全提交。复制在它认为对复制安全的完全提交的事务方面非常保守。例如,由于网络问题或其他一些问题(即,它在线,但主节点不知道),AG 不同步。如果您强制对 AG 进行故障转移,并允许数据丢失,那么您的复制辅助节点将具有在故障转移期间丢失的数据 - 可能会破坏复制。

此 TF 将影响当前托管主数据库副本的服务器,因此必须在可能托管 AG 主副本的每个服务器上设置。

来自微软关于 TF 1448 的文档:

即使异步辅助节点尚未确认收到更改,也使复制日志读取器能够向前移动。即使启用了此跟踪标志,日志读取器也会始终等待同步辅助节点。日志阅读器不会超出同步辅助节点的最小确认。此跟踪标志适用于 SQL Server 实例,而不仅仅是可用性组、可用性数据库或日志读取器实例。无需重启即可立即生效。可以提前或在异步辅助节点失败时激活此跟踪标志。