Dot-Net

MSDTC 將事務推廣到分佈式的可靠測試?

  • April 14, 2010

如何可靠地檢查 MSDTC 是否已將事務提升為分佈式事務?

這是在 .net 中使用 TransactionScope 時。

目前,一位同事正在通過關閉他的機器上的協調器來測試這一點——如果拋出異常,這將作為嘗試促進事務的證據。這是一個有效的測試嗎?

我認為你的測試沒問題,儘管你應該確保你得到的是 DTC 異常而不是其他異常。

你可以做的其他一些事情:

  • 您還可以執行 SQL Profiler 並在事務跟踪 DTCTransaction 下執行。
  • 在程式碼方面,您可以處理DistributedTransactionStarted事件並在分佈式事務啟動時記錄一條消息。
  • System.Transactions.Transaction.Current. TransactionInformation.DistributedIdentifier或者您可以在事務結束之前添加日誌消息來記錄。如果值為 Guid.Empty {00000000-0000-0000-0000-000000000000} 那麼它不是分佈式事務,否則事務已被提升為分佈式事務。

您說您使用的是 SQL Server 2008。您使用的是哪個版本的 .NET?是3.5嗎?如果您使用的是SQL Server 2008 和 .NET 3.5,那麼您應該能夠在同一個事務中打開到同一個數據庫的多個連接(使用相同的連接字元串),而無需升級到分佈式事務。為此,您需要在打開第二個連接之前關閉第一個連接。

如果看起來所有條件都得到滿足並且交易仍在升級,我會:

  • 仔細檢查 SQL Server 兼容級別
  • 檢查連接字元串以查看池是否已禁用
  • 檢查是否在一個事務中沒有同時打開兩個連接
  • 查明是否所有事務都在被提升或僅在某些情況下

**更新:**分佈式事務協調器 (MSDTC) 和事務常見問題解答匯集了一個很好的 MSDTC 資源列表。

引用自:https://stackoverflow.com/questions/2456333