具有可用性组的跨数据库事务

use*_*143 6 sql-server-2012 msdtc availability-groups

最近我们正在做一个 POC 来实现 Always on work 并且碰巧在 BOL 中看到了这篇文章

http://technet.microsoft.com/en-us/library/ms366279.aspx

这篇文章表明,我们在处理同步模式时也会存在逻辑上的不一致,但事实真的会如此吗?

例如,考虑事务正在运行的数据库 A 和 B,A 处于高安全模式并且 B 没有镜像。A 的日志必须转到镜像数据库,然后主数据库提交最终两阶段提交(B 上的事务)成功,但文章建议首先不会传输日志并导致 B 上的提交,这是矛盾的。请帮助我理解上述文章中建议的陈述是否属实。如果是的话怎么可能:)。

PS:如果我需要提供有关此的更多信息,请告诉我。

cfr*_*urg 2

这篇文章措辞不太好,但我认为这就是它的意思

开始场景 - DatabaseA 位于 AG 中,当前是 Server1 上的主数据库,并且可以在 Server2 上运行。DatabaseB只能在Server1上运行

T1 - 事务开始 T2 - 行插入到 DatabaseA(日志尚未发送到 Server2) T3 - 行插入到 DatabaseB T4 - 事务提交称为 T5 - DatabaseB 提交事务(因为两个数据库单独提交) T6 - DatabaseA 在日志之前进行故障转移已发送

由于日志从未发送过,DatabaseA 不会有该行,但 DatabaseB 会有。如果使用同步模式,则不会发生这种情况,因为在发送该行的日志之前无法调用提交。但是,数据库 B 上的提交可能会发生,而数据库 A 可能会在提交发生之前进行故障转移。这可能会导致 DatabaseA 中回滚而不是提交。我不能肯定地说您可以使用同步模式进入相同的情况,但如果可以的话,那么它很可能会发生。