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

解決 SQL Server 分散式交易錯誤:MSDTC 服務啟動與 Hosts 檔案設定

     編輯:關於SqlServer

錯誤訊息

該作業未能執行,因為 OLE DB 提供者 'SQLOLEDB' 無法啟動分散式交易。[OLE/DB provider returned message: 新交易無法登記於指定的交易處理器中。]

根本原因

分散式交易協調器 (MSDTC, Microsoft Distributed Transaction Coordinator) 服務未在**兩台參與機器**上啟動,或機器間無法透過 NetBIOS 名稱解析對方,導致交易管理器無法通訊。

解決步驟

1. 啟用 MSDTC 服務 (兩台機器皆需執行)

net start msdtc

或「服務」管理工具 → 找到 Distributed Transaction Coordinator → 啟動類型設為「自動」 → 啟動。

2. 設定 Hosts 檔案相互解析 (兩台機器皆需設定)

編輯 %windir%\system32\drivers\etc\hosts,新增對方 IP 與電腦名稱對應:


192.168.1.10  ServerA
192.168.1.20  ServerB

注意:若環境有 DNS 正常運作,可略過此步;工作群組 (非網域) 環境強烈建議設定。

3. (進階) MSDTC 安全性設定 (元件服務)

執行 dcomcnfg → 元件服務 → 電腦 → 我的電腦 → Distributed Transaction Coordinator → 本機 DTC → 右鍵屬性 → 「安全性」頁籤:

  • 勾選 網路 DTC 存取
  • 勾選 允許遠端用戶端
  • 勾選 允許輸入/輸出
  • 勾選 無需驗證 (僅受信任內網環境)
  • 確定 → 服務自動重啟。

驗證分散式交易


-- 測試連結伺服器分散式查詢
BEGIN DISTRIBUTED TRANSACTION;
INSERT INTO ServerB.DB.dbo.Table VALUES (1);
COMMIT TRANSACTION;

常見誤區

  • ❌ 僅在一台機器啟動 MSDTC → 雙向通訊失敗。
  • ❌ 僅開放防火牆 TCP 135 → MSDTC 需動態 RPC 連接埠範圍 (預設 1024-65535),建議指定連接埠範圍並開放。
  • ❌ 使用 IP 位址建立連結伺服器 → MSDTC 交易管理器通訊依賴 NetBIOS 名稱解析,需 Hosts 或 DNS。

結語

分散式交易失敗 90% 以上為 MSDTC 服務未啟或名稱解析失敗。依序啟用服務、設定 Hosts、調整 DTC 安全性,即可恢復正常。生產環境建議納入伺服器基準配置清單 (Baseline)。

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