🔎【解決教學】PowerShell 無法連線 Oracle Port 1521?TCP connect failed 的原因與解法全解析

 

🧩 錯誤背景:PowerShell 測試 Oracle 1521 Port 連線失敗

在 PowerShell 輸入以下指令測試 Oracle 資料庫的 TCP 連線:

Test-NetConnection 220.133.47.3 -Port 1521

結果顯示:

TcpTestSucceeded : False

但:

PingSucceeded : True

也就是說,你可以 ping 到這台伺服器,但 TCP Port 1521 無法連上,導致連線 Oracle 資料庫失敗。



✅ 常見原因解析與解決對策

1️⃣ 資料庫伺服器防火牆阻擋了 TCP 1521

  • Oracle 使用的預設連接埠為 1521,若伺服器防火牆未開放此埠口,會導致無法從遠端連線。

✅ 解法:

請在 Oracle 伺服器上開放防火牆:

Windows 防火牆:

netsh advfirewall firewall add rule name="Oracle 1521" dir=in action=allow protocol=TCP localport=1521

Linux 防火牆 (iptables):

sudo iptables -A INPUT -p tcp --dport 1521 -j ACCEPT


2️⃣ Oracle Listener 未啟動或未監聽正確的 IP

Oracle 的 Listener 是用來接收連線的背景程式。若未啟動或綁定錯誤 IP,也會導致連線失敗。

✅ 解法:

登入 Oracle 主機後,執行:

lsnrctl status

確認輸出中有 1521LISTENING 狀態。

若沒啟動,使用:

lsnrctl start

並檢查 listener.ora 設定中 HOST 是否為:

  • 正確的對外 IP(如 220.133.47.3

  • 或使用 HOST = 0.0.0.0 允許所有 IP 連入



3️⃣ 網路路由或防火牆中間節點阻擋

有時候 ping 成功但 TCP port 被中間防火牆或防毒軟體封鎖。

✅ 解法:

  • 請向企業/學校網管確認是否有設備或政策阻擋了 port 1521。

  • 嘗試在 同一內網中的其他主機Test-NetConnection,確認是否與區網位置有關。



4️⃣ Oracle Server 綁定的 IP 不是對外 IP

有些 listener 設定為 localhost127.0.0.1,導致只能接受本機連線。

✅ 解法:

請修改 Oracle 的 listener.ora,將:

HOST = localhost

改為:

HOST = 220.133.47.3

HOST = 0.0.0.0

修改後請重新啟動 listener:

lsnrctl reload


5️⃣ 連線字串錯誤

如果你用 TNS 或連線字串方式連線 Oracle,也要確認字串設定是否正確。

✅ 範例:

sqlplus user/password@220.133.47.3:1521/orcl


🧪 延伸測試:從 Server 自己測試

請在 Oracle Server 主機上執行:

tnc 127.0.0.1 -Port 1521

若此測試也失敗,表示 Listener 本身沒啟動或沒監聽該 port。



📋 常用 Oracle Listener 排錯指令總整理

指令 用途
lsnrctl status 查看目前 listener 狀態
lsnrctl start 啟動 listener
lsnrctl stop 停止 listener
lsnrctl reload 重新載入設定
`netstat -an findstr 1521`


🧠 結語:Ping 成功 ≠ 連線成功,請確認 TCP Port 是否正常運作!

雖然你能夠 ping 到主機,代表 IP 是通的,但連不上 TCP 1521 通常是:

  • Listener 沒啟動

  • 防火牆沒開

  • 中間網路設備阻擋

你可以依照本文的步驟逐一排查,就能快速找出問題並解決。

留言

這個網誌中的熱門文章

🛠【ASP.NET Core + Oracle】解決 ORA-00904 "FALSE": 無效的 ID 錯誤與資料欄位動態插入顯示問題

🛠【實戰排除教學】從 VS Code 的 _logger 錯誤,到 PowerShell 找不到 npm/serve,再到 Oracle ORA-03135 連線中斷——一次搞懂!

🔎如何在 Oracle PL/SQL 儲存過程中為文字欄位加入換行符號(CHR(10))——以 Updlcmremark 為例