在我们的 AlwayOn 环境中,我有两个 SQL 服务器 2014 Ent.edition(服务器 A 和服务器 B)。我为 [database A] 设置了一个事务复制,指向侦听器,如果发生故障转移,它不会导致任何问题。经过测试,故障转移后工作正常,但是当我在测试环境中关闭 AOAG 中的一台服务器时,复制停止工作。复制监视器上没有错误。出于测试目的,我在数据库中插入了几条记录,它在 AOAG 上运行良好,但在订阅服务器上,数据修改不会复制,直到我启动另一台服务器。服务器启动后,复制开始工作。我很确定,我可能会遗漏一些东西,这不可能是设计的。
有什么想法/建议吗?
这是我在 AOAG 上复制的内容。
- 分发服务器 A(包含分发数据库)- SQLSERVER
- 这在远程服务器上。
- 两个订阅者 - Sv1 和 sv2 - SQLSERVER 2008R2 STANDARD
- 发布者(服务器 A 和 B - 来自 AOAG)- SQLSERVER 2014
日志读取器代理将仅读取提交给所有其他可用性组副本的最后一个事务。这意味着如果一个 AG 副本脱机,复制将停止读取事务,直到该 AG 副本重新联机。这样做是为了非常安全,并确保只复制完全提交的事务。
在某些情况下,这对于您的设置可能过于保守。在这种情况下,您可以将跟踪标志 1448添加到启动参数中,这将禁用异步副本的此行为。如果同步副本离线,它仍然会阻止日志读取器代理读取未发送的复制事务。
为什么 Microsoft 对同步副本施加此限制?如果 LSN 尚未在同步副本上强化,则事务未完全提交。复制非常保守,因为它认为完全提交的事务对于复制是安全的。例如,由于网络问题或其他问题(即它在线,但主节点不知道),AG 不同步。如果您强制对 AG 进行故障转移,并允许数据丢失,那么您的复制辅助服务器将具有在故障转移期间丢失的数据 - 可能会中断复制。
此 TF 将影响当前托管主数据库副本的服务器,因此必须在每个可能托管 AG 主副本的服务器上设置。
来自 TF 1448 的 Microsoft 文档: