MSDTC促进交易分发的可靠测试?

时间:2010-03-16 16:49:04

标签: .net sql-server-2008 transactions msdtc distributed-transactions

如何可靠地检查MSDTC是否已将事务提升为分布式事务?

这是在.net。

中使用TransactionScope时

目前,同事正在通过关闭其计算机上的协调器来测试此问题 - 如果抛出异常,则将其视为尝试促进事务的证据。这是一个有效的测试吗?

1 个答案:

答案 0 :(得分:12)

我认为您的测试没问题,但您应该确保获得DTC例外,而不是其他例外。

你可以做的其他事情:

  • 您还可以运行SQL事件探查器,并在事务跟踪DTCTransaction下。

  • 就代码而言,您可以处理DistributedTransactionStarted事件并在启动分布式事务时记录消息。

  • 或者您可以在事务结束前添加日志消息以记录System.Transactions.Transaction.Current. TransactionInformation.DistributedIdentifier。如果值为Guid.Empty {00000000-0000-0000-0000-000000000000},那么它不是分布式事务,否则事务已被提升为分布式事务。

您说您使用的是SQL Server 2008.您使用的是什么版本的.NET?是3.5吗?如果您使用SQL Server 2008 and .NET 3.5,那么您应该能够在同一事务中打开多个连接(使用相同的连接字符串)到同一个数据库,而不会升级到分布式事务。为此,您需要在打开第二个连接之前关闭第一个连接。

如果看来满足所有条件并且交易仍在升级,我会:

  • 仔细检查SQL Server兼容级别
  • 检查连接字符串以查看池是否已禁用
  • 检查在一次交易中是否未同时打开两个连接
  • 查明所有交易是否正在推广或仅在某些情况下

更新 Distributed Transaction Coordinator(MSDTC) and Transaction FAQ汇集了很多MSDTC资源。