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