Microsoft Transaction Server (MTS) / COM+ 元件需與 Oracle 參與分散式交易 (XA),要求 Oracle 端建立特定 XA 視圖並授權,客戶端註冊表配置對應驅動程式庫。
@?/rdbms/admin/xaview.sql
-- 路徑範例: C:\Oracle\ora92\rdbms\admin\xaview.sql
-- 使用 SYS 權限在 SQL*Plus 執行
腳本建立兩個視圖:V$XATRANS$、V$PENDING_XATRANS$。
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; -- 視環境決定是否需要
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI]
"OracleXaLib"="oraclient9.dll"
"OracleSqlLib"="orasql9.dll"
"OracleOciLib"="oci.dll"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\XADLL]
"mtxoci.dll"="C:\\Windows\\SYSTEM32\\MTXOCI.DLL"
Network Service 帳號。Network Service 加入本機 Administrators 群組 (或授予足夠的「作為服務登入」、「調整程序記憶體配額」等特定權限)。V$PENDING_XATRANS$ 確認兩階段提交狀態。| 現象 | 可能原因 | 解決方向 |
|---|---|---|
| XA 交易準備階段失敗 | 視圖不存在或權限不足 | 重新執行 xaview.sql、檢查 GRANT |
| 找不到 oraclient9.dll | Oracle Client 未安裝或路徑不在 PATH | 安裝 Client、設定 PATH、註冊表值改為完整路徑 |
| MSDTC 夥伴關係失敗 | 防火牆阻擋 135/動態 RPC 埠 | 開啟防火牆規則、設定固定 RPC 埠範圍 |
| Oracle 版本 | XA 庫檔名 | SQL 庫檔名 | OCI 庫檔名 |
|---|---|---|---|
| 9i | oraclient9.dll | orasql9.dll | oci.dll |
| 10g | oraclient10.dll | orasql10.dll | oci.dll |
| 11g+ | oraclient11.dll / oraocci11.dll | orasql11.dll | oci.dll |