首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

解決 Windows Server 2003 + SQL Server 2000 中 OLEDB 分散式交易無法啟動的完整方案

     編輯:關於SqlServer

問題背景

在開發分散式資料庫應用時,常遇到以下錯誤訊息:

伺服器: 訊息 7391,層級 16,狀態 1,行 6
該作業無法執行,因為 OLE DB 提供者 'SQLOLEDB' 無法啟動分散式交易。
[OLE/DB 提供者傳回訊息: 無法在指定的交易處理器中取得新交易。]

伺服器: 訊息 8520,層級 20,狀態 1,行 8
內部 MSDTC 交易的認可失敗: Result Code = 0x8004d019。
連線中斷

常見但效果有限的方案(方法一)

網路上流傳的標準解決步驟如下:

  1. 執行 regedt32,瀏覽至 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC,新增 DWORD 值 TurnOffRpcSecurity,值設為 1。
  2. 重新啟動 MS DTC 服務。
  3. 開啟「管理工具」→「元件服務」,展開「我的電腦」→ 右鍵「內容」→ MSDTC 索引標籤,勾選:
    • 網路 DTC 存取
    • 網路管理
    • 網路交易
    • XA 交易
  4. 將「DTC 登入帳戶」設為 NT Authority\NetworkService。
  5. 再次重啟 MS DTC 服務。
  6. 刪除先前新增的 TurnOffRpcSecurity 登錄值。

實測發現,此方法在大多數環境下無法徹底解決問題。

經實測有效的完整方案(方法二)

  1. 先完成上述方法一的所有步驟。
  2. 安裝 Windows Server 2003 SP1。安裝完成後,元件服務的 MSDTC 設定介面會有變化,請在「交易管理通訊」區域選擇「不要求驗證」。
  3. 建議同步安裝 MDAC 2.8 或更新版本。
  4. 修改雙方伺服器的 hosts 檔案(路徑通常為 C:\Windows\system32\drivers\etc\hosts),將對方 IP 與電腦名稱對應。範例:
    # Copyright (c) 1993-1999 Microsoft Corp.
    127.0.0.1 localhost
    192.168.1.2 中心伺服器
    192.168.1.3 西站伺服器
    192.168.106.35 資訊中心2
    
    注意:雙方伺服器都必須完成此設定。

總結

核心關鍵在於:安裝 SP1 後啟用「不要求驗證」,並確保雙方主機名稱解析正確。套用此方案後,分散式交易即可正常運作,效能表現優異。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved