9

如何可靠地检查MSDTC是否将事务提升为分布式事务?可靠的MSDTC促进交易分布式测试?

这是在.net中使用TransactionScope时。

目前,一名同事正在通过关闭其计算机上的协调员来测试此功能 - 如果发生异常,则会将此作为证明尝试推动交易发生。这是一个有效的测试?

+0

MSDTC是一个非常坚实的产品。你确定你需要测试吗? – Steven 2010-03-16 20:55:07

+1

@Steven - 我需要检查交易是否被提升。情况是,交易不应该被促进,但我的同事相信他们正在被提升。我们如何确定?我们如何检查交易是否被提升? – Oded 2010-03-16 22:36:00

+0

@Oded:如果事务不应该被提升,为什么你使用'TransactionScope'? – Steven 2010-03-17 07:46:09

回答

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的兼容水平
  • 检查连接字符串是否池被禁用
  • 检查,看是否所有的交易都被提升或仅在某些情况下这两个连接没有在一个事务中
  • 找出在同一时间打开

UPDATE:Distributed Transaction Coordinator(MSDTC) and Transaction FAQ将MSDTC资源汇总在一起。

+0

感谢您的详细解答 - 您从哪里获得这些知识?你能推荐MSTDC上的任何资源吗? – Oded 2010-03-20 17:34:02

+1

MSDTC在工作时很棒。当它不工作的时候,当你最了解它。 :)一般来说,MSDN具有最好的MSDTC资源。对于疑难解答,http://support.microsoft.com/kb/306843通常是goto文章,但是这是http://msdn.microsoft.com/en-us/library/aa561924%28BTS.10%29.aspx ,非常好。 – 2010-03-22 15:57:16

+0

+1的详细答案 – IgorK 2010-05-26 06:44:56