SQL Server 分佈式數據庫的問題和解決方法

1、問題現象

假如分佈式事務的客戶端和服務器端(可能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安全性配置問題) ide

2、解決方法

遇到以上的問題或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,結果問題解決。

信息來源:互聯網上搜集和本人經驗的總結。

相關文章
相關標籤/搜索