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

Windows 防火牆下 Oracle 連線端口解決方案:Shared Socket 與 MTS 設定

     編輯:Oracle 資料庫基礎

問題根因

Client 連線 1521 → Listener → Spawn Server Process → 回傳隨機 Port給 Client → Client 直連隨機 Port。防火牆擋住隨機 Port,導致連線逾時(ORA-12535/ORA-12170)。

解決方案一:Shared Socket(Windows 專屬)

  1. 註冊表新增字串值:
路徑:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0
名稱:USE_SHARED_SOCKET
類型:REG_SZ
值:TRUE
(多 Oracle Home 需在各 HOMEx 皆設定)
  1. 重啟資料庫實例(僅重啟 Listener 無效)。

原理:Listener 與 Server Process 共用同一 Socket,Client 全程走 1521,無隨機 Port。

解決方案二:MTS/Shared Server(共用伺服器)

若方案一無效(舊版 Bug 需打 Patch 至 8.1.7.1.2+),改用 MTS 模式,Dispatcher 固定監聽 Port:

-- init.ora 末尾新增
mts_dispatchers="(address=(protocol=tcp)(host=myoradb)(port=1521))(dispatchers=1)"
-- 12c+ 參數名為 dispatchers
dispatchers="(protocol=tcp)(port=1521)"

重啟實例生效。Client 連線 1521 → Dispatcher → Shared Server,Port 固定。

驗證方式

-- 檢查 Dispatcher 監聽
SELECT name, network, status FROM v$dispatcher;

-- 確認連線模式
SELECT s.sid, s.username, d.name AS dispatcher
FROM v$session s LEFT JOIN v$dispatcher d ON s.paddr = d.paddr
WHERE s.username IS NOT NULL;

Linux/Unix 環境

Kernel 自動處理 Port 重用,無此問題。僅需開放 1521(或自訂 Listener Port)。

防火牆規則建議

  • 入站:TCP 1521(Listener)+ 可選固定 Dispatcher Port(MTS 模式)。
  • 出站:允許 Server Process 主動連線(如 DB Link、外部程序)。
  • 若使用 Shared Socket,僅需開放 1521 入站。

結語

Windows 防火牆下 Oracle 連線核心在於消除隨機 Port。優先嘗試 USE_SHARED_SOCKET=TRUE(簡單、無架構變更),失效則啟用 MTS/Dispatcher 固定 Port。生產環境建議測試驗證後納入部署標準化腳本。

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