首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

配置支援 MTS 分散式交易的 Oracle:XA 視圖、權限與註冊表設定

     編輯:Oracle 資料庫相關知識

背景:Microsoft Transaction Server (MTS) / COM+ 與 Oracle XA 整合

需在 Oracle 建立 XA 視圖並授權,客戶端註冊表設定正確 DLL 路徑,才能支援分散式交易 (XA/兩階段提交)。

Oracle 端:建立 XA 視圖並授予 PUBLIC

  1. 以 SYS 執行官方腳本:
    @$ORACLE_HOME/rdbms/admin/xaview.sql
    產生兩個視圖:V$XATRANS$、V$PENDING_XATRANS$
  2. 手動授予 PUBLIC 權限 (腳本未自動處理):
    GRANT SELECT ON V$XATRANS$ TO PUBLIC WITH GRANT OPTION;
    GRANT SELECT ON V$PENDING_XATRANS$ TO PUBLIC WITH GRANT OPTION;
    GRANT SELECT ANY TABLE TO PUBLIC;  -- 建議改為精確授權

客戶端 (COM+ 部署機) 註冊表設定

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI]
"OracleXaLib"="oraclient9.dll"
"OracleSqlLib"="orasql9.dll"
"OracleOciLib"="oci.dll"

Windows 2003 / XP SP2+ 額外需求

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\XADLL]
"mtxoci.dll"="C:\WINDOWS\SYSTEM32\MTXOCI.DLL"

Windows 2003 / XP 權限設定

  • MSDTC 執行於 Network Service 帳號
  • 將 Network Service 加入本機 Administrators 群組 (或授予足夠 Oracle Client 存取權限)

驗證檢查清單

[ ] Oracle xaview.sql 執行成功,視圖存在
[ ] PUBLIC SELECT 權限已授予
[ ] 客戶端 MTxOCI 註冊表鍵值正確指向 Oracle 9i Client DLL
[ ] Windows 2003/XP2+ XADLL 鍵值存在
[ ] Network Service 有權存取 Oracle Client 目錄與 DLL
[ ] 使用 DTC 測試工具 (dtctester.exe) 或 COM+ 應用驗證分散式交易 Commit/Rollback

常見失敗模式

現象可能原因排查方向
XA_OPEN 失敗DLL 版本不符/路徑錯誤檢查註冊表指向的 DLL 是否為正確 Oracle Home 版本
XA_START 失敗權限不足/視圖缺失確認 V$XATRANS$ 存在且 PUBLIC 可 SELECT
兩階段提交掛起網路/防火牆/監聽器檢查 1521/動態埠連通、MTS/COM+ 服務狀態
In-doubt 交易殘留協調者失敗DBA 手工 HEURISTIC COMMIT/ROLLBACK,查詢 V$PENDING_XATRANS$

版本對應關係

Oracle 版本XA LibSQL LibOCI Lib
9ioraclient9.dllorasql9.dlloci.dll
10goraclient10.dllorasql10.dlloci.dll
11g+oraociei11.dll (Instant Client)同上oci.dll

MTS/COM+ 與 Oracle XA 整合屬於經典企業級整合場景。核心在於:**Oracle 端視圖就緒 + 客戶端 DLL 註冊表精準指向 + 服務帳號權限到位** 三者缺一不可。現代 .NET 應用建議改用 System.Transactions + OracleManagedDataAccess 簡化部署。

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