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

SQL Server 2000 分散式交易錯誤 8501 解決方案:MSDTC 帳戶配置指南

     編輯:關於SqlServer

錯誤現象

Server: Msg 8501, Level 16, State 3, Line 3
MSDTC on server 'servername' is unavailable.

錯誤日誌顯示:ResourceManagerCreationFailed: ResultCode=0x8004d01c

根本原因

Windows .NET Server (Windows Server 2003 前身) 上,MSDTC (分散式交易協調器) 預設以 Local System 帳戶執行,但 RPC 安全性增強要求 MSDTC 必須以 NT AUTHORITY\NetworkService 執行。

解決步驟

方法一:登錄修改 + 服務重啟(快速修復)

  1. 執行 regedt32,瀏覽至 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC
  2. 新增 DWORD 值:TurnOffRpcSecurity = 1
  3. 命令提示字元執行:
    net stop msdtc
    net start msdtc

方法二:元件服務完整配置(標準做法)

  1. 開啟「元件服務」→ 「我的電腦」右鍵 → 「屬性」 → 「MSDTC」分頁
  2. 勾選:
    • 網路 DTC 存取
    • 網路管理
    • 網路交易
    • XA 交易
  3. 關鍵:DTC 登入帳戶設為 NT AUTHORITY\NetworkService
  4. 確定 → 系統提示重啟 MSDTC,選「是」

方法三:清理臨時登錄值

  1. 再次開啟 regedt32
  2. 刪除 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC\TurnOffRpcSecurity
  3. MSDTC 現以 NetworkService 執行,錯誤解決

相關錯誤 7391 同源解決

Server: Msg 7391, Level 16, State 1, Line 2
The operation could not be performed because the OLE DB provider 'SQLOLEDB'
was unable to begin a distributed transaction.
[OLE/DB provider returned message: New transaction cannot enlist in the specified transaction coordinator.]

同樣由「網路 DTC 存取」未啟用或帳戶錯誤導致,套用上述修復即可解決。

重現驗證腳本

-- 故意設為 Local System 觸發錯誤
-- 服務 → 分散式交易協調器 → 登入 → 本地系統 → 重啟服務

-- 執行連結伺服器分散式交易測試
EXEC sp_addlinkedserver 'remote1';
EXEC sp_setnetname 'remote1', '';
GO

EXEC remote1.pubs.dbo.sp_executesql N'CREATE TABLE t (c1 INT)';
GO

SET XACT_ABORT ON;
GO

BEGIN TRAN;
INSERT INTO remote1.pubs.dbo.t VALUES (1);
COMMIT TRAN;
GO

最佳實踐建議

  • 所有叢集節點、連結伺服器節點統一設為 NetworkService
  • 防火牆開放 TCP 135 (RPC) + 動態連接埠範圍
  • 定期檢查 DTC 测试工具 (dtctester.exe) 驗證雙向通訊
  • Windows Server 2008+ 內建 DTC 管理 UI,配置更直觀
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved