Dot-Net
MSDTC 將事務推廣到分佈式的可靠測試?
如何可靠地檢查 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 資源列表。