2/12/2008

在Windows 2003上設定MSDTC


MSDTC on Windows 2003 SP1的注意事項


Windows 2003在安全上的管控較Windows 2000嚴格,因此,如果Web或SQL被安裝在Windows 2003時,要注意預設的安裝選項並不支援跨機器的分散式交易,記得要去手調一下:

而Windows 2003 SP1就更機車了,在MSDTC上會多了幾個選項,當然預設又是最嚴的選項—Mutual Authentication Required,它是個未來才會生效的選項,現在的效果等同於Incoming Caller Authentication Required,而且只有在兩台DTC都是Windows XP SP2或Windows 2003才適用。如果Web或SQL其中一台的OS是Windows 2000時,No Authentication Required是唯一的選擇。

最後,還有一點要記得,在XP SP2/Windows 2003 SP1,如果你有啟用LAN網卡上的防火牆,記得要將MSDTC加入例外清單,用UI設或用以指令都可以:
netsh firewall set allowedprogram %windir%\system32\msdtc.exe MSDTC enable
如何排除MSDTC的網路問題(主要使用DTCPing,另外,也有提到用Ghost或VM Disk Image複製多台Server時的CID重覆問題)
http://support.microsoft.com/default.aspx?scid=kb;zh-tw;306843
Windows 2003 SP1上的MSDTC新選項說明
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cossdk/html/2627a956-



當Client與SQL Server分處於不同AD Domain時,可能導致分散式交易失敗。現象是Connection.Open()傳回錯誤訊息: New transaction cannot enlist in the specified transaction coordinator.

問題肇因於MSDTC靠雙向的RPC管道溝通,因此SQL Server所在的主機也要有能力連回Client端,跨Domain的遇到的狀況多半是因DNS不同台導致機器名稱無法解析,因此請確定SQL Server與Client”彼此相識”! 最簡單的測試方法是開個DOS視窗,用ping serverMachineName, ping clientMachineName確認雙方可以用機器名稱解析到對方,當然用DTCPing測試也行,還可以一併測試Firewall等Issue。

如 果發現某一方無法解析機器名稱時,最簡單的方法是在windows/system32/drivers/etc/lmhosts(這個檔案預設是不存在 的,但可以將lmhosts.sam更名為lmhosts,直接拿來用)裡加上一列如192.168.1.1 myClient的宣告,再下個nbtstat –R,之後ping測試如果OK,問題應該就可解決囉!

No comments yet