摘要:分散式交易(DTC)問題排解
原文轉自:http://blog.csdn.net/bill2006/article/details/2192495
摘要:在SQLSERVER2005中執行具有分布式事務的SQL語句的方法。
實驗環境::兩台分別了安裝Windows XP, Windows Xp Service Pack2 , SQLSERVER2005的電腦。
欲測試SQL語句:
BEGINDISTRIBUTED TRAN
insertinto dbo.Stocks
select'1', 1, 1
insertinto [192.168.168.2].TestDb.dbo.Person
select'1', 1, 1
COMMITTRAN
GO
第一次測試:,在未對兩台服務器做任何配置的情況下,直接在企業管理器中運行該條SQL批處理語句,結果失敗,錯誤信息如下:
訊息7391,層級16,狀態2,行4
無法執行作業,因為連結伺服器"192.168.168.252" 的OLE DB 提供者"SQLNCLI" 無法開始分散式交易
第二次測試,分別對兩台服務器做如下設置:
1. 檢查MSDTC是否開啟,如開啟,要確保其登入身份是網絡帳號(Net service).
2. 在開始—運行中輸入命令dcomcnfg,彈出Component Services,展開Component Services, 展開”電腦”,右擊”我的電腦”,選屬性菜單,彈出如下窗口:
點擊上圖中的<<安全性設定>>按鈕,彈出如下窗口,
根據上圖所示設置各項參數。
3 在開始—運行中輸入命令Firewall.cpl,彈出如下窗體
點擊上圖中的<<新增程序>>按鈕,加入MSDTC,點擊<<新增連接>>按鈕加入135端口和1433端口。
完成上述各項設置後,再次在SQLSERVER Mangement Studio 中運行該SQL批處理語句,執行失敗,顯示錯誤信息如下:
訊息7395,層級16,狀態2,行5
無法為連結伺服器"192.168.168.2" 的OLE DB 提供者"SQLNCLI" 啟動巢狀交易。因為XACT_ABORT 選項已設定為OFF,所以必須要有巢狀交易。
於是,在該批處理語句前加入一條語句SET XACT_ABORT_ON,完整的批處理語句如下:
SETXACT_ABORT ON
BEGINDISTRIBUTED TRAN
insertinto dbo.Stocks
select'1', 1, 1
insertinto [192.168.168.2].TestDb.dbo.Person
select'1', 1, 1
COMMITTRAN
--------------------------
MSDTC 問題疑難排解
http://msdn.microsoft.com/zh-tw/library/aa561924%28v=bts.10%29.aspx