5

我有一个希望支持 SQL Server 镜像的应用程序。但是,当前的体系结构使得多个 WCF 服务和 DB 连接将在单个 MSDTC 事务中登记,并且 Microsoft 声明使用镜像时不支持 MSDTC。

他们的解释并没有提供非常丰富的信息:

当您将数据库镜像与 MS DTC 事务一起使用时,可能会发生类似的情况。例如,新的主体服务器在故障转移后联系 MS DTC。但是,MS DTC 不知道新的主体服务器。因此,MS DTC 会停止任何处于“准备提交”阶段的事务,即使这些事务在其他数据库中被视为已提交。

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

4

1 回答 1

7

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

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

您在问“这与数据库服务器没有镜像并且只是在同一时间点死亡有什么不同?”。不同之处在于,如果发生这种情况,那么当数据库恢复,它将在同一台服务器上恢复,并且该服务器可以联系 DTC 并要求它回滚它注册的分布式事务。

于 2010-07-12T20:33:49.390 回答