SQL Server 分散式資料庫的問題和解決方案2
一、問題現象
假如分散式交易的用戶端和伺服器端(可能N個)不在同一台伺服器上,如分別為應用程式伺服器 和 資料庫伺服器,經常會出現一下錯誤:
① 在建立與伺服器的串連時出錯。在串連到 SQL Server 2005 時,在預設的設定下 SQL Server 不允許進行遠端連線可能會導致此失敗。 (provider: 具名管道提供者, error: 40 - 無法開啟到 SQL Server 的串連)。
② 事務已被隱式或顯式提交,或已終止。
③ 該夥伴交易管理員已經禁止了它對遠程/網路事務的支援。 (異常來自 HRESULT:0x8004D025)。(TransactionScope異常)
④ [COMException (0x8004d00e):此事務已明地或暗地被確認或終止 (異常來自 HRESULT:0x8004D00E)]。(MSDTC 分散式交易錯誤)
⑤ Import of MSDTC transaction failed: Result Code = 0x8004d023. (MSDTC安全性配置問題)
二、解決方案
遇到以上的問題或SQL Server分布式的問題,請按照以下步驟設定,問題應該可以得到解決。可能有些步驟對您來說是多餘的,但求全不求漏。
1. 啟動MSDTC服務。
MSDTC簡介:MSDTC是Microsoft Distributed Transaction Coordinator的簡稱,即微軟分散式交易協調器,描述:協調跨多個資料庫、訊息佇列、檔案系統等資源管理員的事務。如果停止次服務,則不會發生這些事務。如果禁用此服務,顯式依賴此服務的其他服務將無法啟動。
MSDTC啟動方法:
①“開始”|“運行”,輸入“services.msc”,或者“控制台”|“管理工具”|“服務”,開啟“服務”視窗,在名稱中找到“Distributed Transaction Coordinator”,將其啟動。
②“開始”|“所有程式”|“Microsoft SQL Server”|“服務管理員”,開啟“SQL Server 服務管理器”視窗,選中“Distributed Transaction Coordinator”服務,將其啟動。
2. 設定MSDTC組件。
① 檢查作業系統是否安裝DTC組件。XP預設安裝,Win2003預設不安裝。安裝步驟如下:
a. “開始”|“控制台”|“添加/刪除程式”|“添加/刪除Windows組件”,選擇“應用程式伺服器”,單擊“詳細資料”,選擇“啟用網路DTC訪問”,單擊“確定”|“下一步”|“完成”。
b. 停止並重啟MSDTC服務(命令:net stop msdtc和net start msdtc)。
c. 停止參與分散式交易的任何資源管理員服務(如 Microsoft SQL Server 或 Microsoft Message Queue Server),然後重新予以啟動。
② “開始”|“運行”,輸入“dcomcnfg”,或者“控制台”|“管理工具”|“元件服務”,開啟“元件服務”視窗,“元件服務”|“電腦”|“我的電腦”,右鍵“屬性”|“MSDTC”,勾選“使用本地協調器”,單擊“安全性配置”,彈出“安全配置”視窗,勾選“網路DTC訪問”、“允許遠程用戶端”、“允許遠端管理”、“允許入站”、“允許出站”、“不要求進行驗證”、“啟用事務Inernet協議(TIP)事務”和“啟用XA事務”(“允許入站”和“允許出站”據具體情況設定,用戶端機器必須“允許出站”,伺服器端機器必須“允許入站”),DTC登陸帳號必須是“NT AUTHORITY/NetworkService”。Vista系統只需勾選“使用本地協調器”即可。
③ 配置防火牆以允許與 Msdtc.exe服務的網路通訊。【測試時可以退掉所有的防火牆和殺毒軟體】
3. 檢查兩台機器能夠相互ping通Hostname。
注意是機器名,而不是IP。若不可以,進行如下設定:
① 在目錄“%windir%/system32/drivers/etc”下的hosts檔案,寫上IP和HostName的對應資訊,如 “10.25.11.185 GSMAJK”。另外,你也可以使用DTCping工具來測試是否可以在兩台機器之間使用MSDTC,並幫你分析原因,可以到微軟的網站。
4. 啟動SQL Server 的分布式遠端連線。
(1) SQL Server 2000:
① “開始”|“所有程式”|“Microsoft SQL Server”|“企業管理器”,滑鼠選中SQL Server 執行個體,如:GSMAJK(Windows NT),右鍵“屬性”,彈出“SQL Server 屬性(配置)”視窗, “串連”|“遠程伺服器串連”,選中“允許其他SQL Server 使用RPC遠端連線到本SQL Server”和“強制分散式交易處理(MTS)”,SQL Server 2000預設情況下是選中的。
② 配置防火牆以允許與 SQL Server 服務相關的網路通訊。【測試時可以退掉所有的防火牆和殺毒軟體】
(2) SQL Server 2005:參見如何配置SQL Server 2005 以允許遠程連串連
① 在您要從遠端電腦串連到的SQL Server 執行個體上啟用遠端連線。
“開始”|“所有程式”|“Microsoft SQL Server 2005”|“組態工具”|“SQL Server介面區配置器”,單擊“服務和串連的介面區配置器”|“資料庫引擎”,單擊“遠端連線”,選中“本地串連和遠端連線”和“同事使用TCP/IP和named pipes”,然後單擊“應用”。在接收到訊息“直到重新啟動資料庫引擎服務後,對串連設定所做的更改才會生效”後,單擊“確定”。單擊“服務”,檢查“MSSQLSERVER服務”是否啟動。
② 開啟 SQL Server Browser 服務。
“開始”|“所有程式”|“Microsoft SQL Server 2005”|“組態工具”|“SQL Server介面區配置器”,單擊“服務和串連的介面區配置器”|“SQL Server Browser”,在“啟動類型”中單擊“自動”選項,然後單擊“應用”。 單擊“啟動”,然後單擊“確定”。
③ 配置防火牆以允許與 SQL Server 和 SQL Server Browser 服務相關的網路通訊。【測試時可以退掉所有的防火牆和殺毒軟體】
5. SQL Server是否安裝必須的補丁。
如SQL Server 2000的SP4。
在一次.NET開發中,問題現象中①②③條全遇到了,弄了好幾天都沒有解決,後來,查看資料庫版本,一個是SQL Server 2000 SP3,一個是SQL Server 2000 RTM,我就在後者的基礎上安裝了SQL Server 2000 SP4,結果問題解決。
資訊來源:互連網上搜集和本人經驗的總結。