分散式交易(DTC)問題排解

摘要:分散式交易(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