Windows 版 Oracle(9i 及以下)採用獨特連接模式:
結果:Client 實際連接的端口不可預測,防火牆無法預先開放固定端口。
早期 Windows NT TCP/IP 協議棧有 Bug,直接使用共用端口會異常,Oracle 才設計此機制。NT 4.0 SP3 後已修復,但 Oracle 為相容性保留至 9i。10g+ 預設啟用端口複用(USE_SHARED_SOCKET=TRUE),Linux/Unix 平台從無此問題。
Windows 防火牆 → 允許應用程式 → 新增 $ORACLE_HOME/bin/oracle.exe。適用於不想修改註冊表的環境。
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME\ USE_SHARED_SOCKETTRUE(大小寫敏感)注意:需在 MTS(共享伺服器)模式下生效。專用伺服器模式下仍會分配固定隨機端口(遞增分配),需額外在 init.ora 設定 MTS_DISPATCHERS 才能真正單一端口。
10g 起 USE_SHARED_SOCKET 預設為 TRUE,Windows 防火牆僅開 1521 即可正常連接,無額外配置。
-- 客戶端測試
tnsping <服務名>
sqlplus user/pass@<服務名>
-- 伺服器端查看監聽狀態
lsnrctl status
若 tnsping 成功且 sqlplus 連線無誤,配置生效。