使用SQL Server镜像和自动故障转移时,为什么不支持MSDTC?

Bry*_*der 5 sql-server msdtc failover high-availability database-mirroring

我有一个应用程序,我想支持SQL Server镜像.但是,该体系结构目前是在单个MSDTC事务中登记多个WCF服务和数据库连接,Microsoft声明在使用镜像时不支持MSDTC.

他们的解释并不是非常有用的:

使用数据库镜像与MS DTC事务时,可能会出现类似的情况.例如,新的主体服务器在故障转移后联系MS DTC.但是,MS DTC不了解新的主体服务器.因此,即使事务被视为在其他数据库中提交,MS DTC也会停止处于"准备提交"阶段的任何事务.

我理解问题的是最后一句话.这与DB服务器没有镜像,并且在同一时间点死亡有什么不同?有人可以向我解释一下吗?我需要能够向组织中的其他人(以及客户)解释这一点,但我不明白为什么MSDTC可以在一种情况下正确回滚/补偿,但如果其中一个参与者是镜像SQL服务器则不能(完全安全模式).

Rem*_*anu 7

MSDTC并不知道镜像.因此,当它在分布式事务中注册资源管理器时,它将通过其名称知道RM,例如服务器A.发生故障转移后,日志将告诉新主体'去联系DTC并查看事务T的状态是什么".名为Server B的新主体进入DTC并说'我是服务器B,事务T的结果是什么?' DTC会告诉他'走开,我不认识你,你没有参加交易T'.这也是KB文章所描述的内容:

故障转移后,新的主体服务器无法连接到使用相同资源ID的先前主体服务器的MS DTC.因此,新的主体服务器无法获取事务状态

您问的是"这与DB服务器没有镜像有什么不同,只是在同一时间点死了?".不同的是,这是否会发生了,那么当数据库恢复将在恢复同一个服务器,且该服务器可以联系DTC,并要求它回滚分布式事务在其被录取.

  • 在两阶段提交中,存在DTC无法采取行动的状态:在通知某些可以提交的RM之后.在那一刻,DTC无法改变对交易结果的看法,这是故障转移发生的问题时刻.如果在此之前发生故障转移,那么很简单:只要让所有其他的RM回滚,没什么大不了的. (2认同)