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

Oracle 防火牆穿透配置全攻略:從隨機端口到共享 Socket 方案

     編輯:Oracle 資料庫基礎

核心問題:Windows 專用的「隨機端口」機制

Windows 版 Oracle(9i 及以下)採用獨特連接模式:

  1. Listener 監聽固定端口(預設 1521)
  2. Client 連接 Listener
  3. Listener 啟動 Server Process,**隨機選取一個未使用 TCP 端口**綁定
  4. Listener 將隨機端口回傳 Client
  5. Client 斷開 Listener,直連 Server Process 隨機端口

結果:Client 實際連接的端口不可預測,防火牆無法預先開放固定端口。

歷史背景

早期 Windows NT TCP/IP 協議棧有 Bug,直接使用共用端口會異常,Oracle 才設計此機制。NT 4.0 SP3 後已修復,但 Oracle 為相容性保留至 9i。10g+ 預設啟用端口複用(USE_SHARED_SOCKET=TRUE),Linux/Unix 平台從無此問題。

三種穿透防火牆方案

方案一:防火牆例外規則允許 oracle.exe(最簡單)

Windows 防火牆 → 允許應用程式 → 新增 $ORACLE_HOME/bin/oracle.exe。適用於不想修改註冊表的環境。

方案二:註冊表啟用共享 Socket + 僅開放 1521(推薦)

  1. 開啟註冊表編輯器,定位至:
    HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME\
  2. 新增字串值:
    名稱:USE_SHARED_SOCKET
    值:TRUE(大小寫敏感)
  3. 重啟 Oracle 服務或伺服器
  4. 防火牆僅開放 TCP 1521 即可

注意:需在 MTS(共享伺服器)模式下生效。專用伺服器模式下仍會分配固定隨機端口(遞增分配),需額外在 init.ora 設定 MTS_DISPATCHERS 才能真正單一端口。

方案三:10g/11g+ 直接受益於預設共享 Socket

10g 起 USE_SHARED_SOCKET 預設為 TRUE,Windows 防火牆僅開 1521 即可正常連接,無額外配置。

驗證方式

-- 客戶端測試
tnsping <服務名>
sqlplus user/pass@<服務名>

-- 伺服器端查看監聽狀態
lsnrctl status

若 tnsping 成功且 sqlplus 連線無誤,配置生效。

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