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

Oracle 其實有兩個埠:Listener 1521 與隨機資料埠,防火牆穿透完整解決方案

     編輯:Oracle 資料庫基礎

誤區:以為只有 1521

許多 DBA 以為開放防火牆 1521 即可連線。實測:tnsping 通、但 Net Manager/應用連線失敗。根因:Oracle 連線分兩階段,涉及兩個埠。

連線建立雙埠機制

  1. Client → Listener (固定埠 1521):** 客戶端向 Listener 發起連線請求。
  2. Listener → Spawn Server Process:** Listener 依 listener.ora/tnsnames.ora 找到目標 Instance,啟動專用/共用伺服器進程。
  3. Listener → Return Random Port:** 新啟動的 Server Process 監聽一個**作業系統動態分配的隨機高埠** (如 34,567),Listener 將此埠號回傳給 Client。
  4. Client → Direct Connect Random Port:** Client 直接與該隨機埠建立資料傳輸通道,**後續完全繞過 Listener**,即使 Listener 停止,現有連線不受影響。

防火牆攔截了隨機埠,導致連線失敗。

驗證隨機埠

OS 層執行 netstat -ano 可見 Oracle 進程監聽大量非 1521 的 ESTABLISHED 連線。

徹底解決:Windows Shared Socket (共享套接字)

Windows Sockets 2 (Winsock2) 支援 Shared Socket:允許 Listener 與 Server Process 共用同一 Socket (埠 1521),消除隨機埠。

註冊表設定步驟

  1. 開啟 regedit,定位 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0 (單一 Home) 或 HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOMEx (多 Home,x 為編號)。
  2. 新建字串值 (REG_SZ):**名稱** USE_SHARED_SOCKET,**數值** TRUE。
  3. 必須重啟 Instance (資料庫服務)**,僅重啟 Listener 無效。

效果驗證

  • 設定後,netstat -ano 僅見 1521 埠建立所有連線。
  • 防火牆僅需開放 1521 單一埠,安全與維護雙贏。
  • 適用於 Windows 專用伺服器/共用伺服器架構。

補充說明

  • Linux/Unix 無 Shared Socket 機制,通常採用 Connection Manager (CMAN) 或固定 LOCAL_LISTENER + DISPATCHERS 參數指定埠範圍,再於防火牆開放該範圍。
  • 12c+ 多租戶 (CDB/PDB) 架構下,Listener 處理 Service Name 導向,共享 Socket 仍生效。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved