問題
MSDTC 不通,無法啟用 MSDTC,協力電腦異動管理員已經停用了對遠端/網路異動的支援,現在看見 MSDTC 真是頭大呀 ~~~
錯誤訊息如下,
System.InvalidOperationException: 當登記分置交易時發生錯誤。
at System.Data.SqlClient.SqlInternalConnection.EnlistNonNullDistributedTransaction
at System.Data.SqlClient.SqlInternalConnection.EnlistDistributedTransaction
at System.Data.SqlClient.Activate(Boolean isInTransaction)
at System.Data.SqlClient.SqlConnection.Open()
解決
昨天客戶的系統有一個請假功能忽然就無法沒有作用,但其他功能是好的。詢問客戶之前有做了些什麼嗎? 客戶說只有一台 switch 壞掉,換新的 siwtch 而已。當下真覺那會不會是網路動了什麼,所以一到客戶那就試看看到底是什麼問題。最後從 log 中發現「MSDTC」的問題。立馬試了 ap <-> db ,用 name 是否可以 ping 得到,結果是可以的。詢問客戶網管,ap <-> db 是否有什麼 rule 擋了那些 port 呢?
記得 MSDTC 需要 port 135, ping icmp, 如果有 firewall 的話,要設定某 Port Range 給它,例如 port 5001-6000(可以參考How to Configure MSDTC to Use a Specific Port in Windows Server 2012/2012R2 )。可是網管說沒有擋那些 Port 呀!!!
正當一籌莫展之時,客戶的 DBA 詢問說,那 ap 跟 db 本身的 firewall 有沒有開呀!?
疑 !!! 檢查了一下,真是有開呢? 先將它關閉試看看,MSDTC 果然就通了。真的非常感謝客戶 IT 的幫忙。
回到這問題,下次 MSDTC 問題呢? 還是要先從 ap,db 的環境來看 firewall,都沒問題後,再往外去查。附上我們公司整理 MSDTC 排除的相關文件,希望對大家在排除 MSDTC 上有所益助。