| 錯誤碼 | 含義 | 常見原因 |
|---|---|---|
| TNS-12541 | TNS:no listener | 監聽器未啟動、端口衝突、防火牆攔截 |
| TNS-12560 | TNS:protocol adapter error | 協議適配器錯誤,通常伴隨 12541 出現 |
| TNS-00511 | No listener | 監聽器進程不存在 |
| TNS-12542 | TNS:address already in use | 監聽端口被佔用(默認 1521) |
| TNS-00512 | Address already in use | 同上,底層系統錯誤碼 |
lsnrctl status # 若報 TNS-01101 "Could not find service name",檢查 listener.ora 配置
# Linux/Unix netstat -anp | grep 1521 lsof -i :1521 # Windows netstat -ano | findstr 1521 tasklist | findstr
若端口被其他進程佔用,kill 進程或修改 listener.ora 端口。
# 典型配置位置:$ORACLE_HOME/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
# 關鍵點:
# 1. HOST 建議 0.0.0.0 或具體 IP,避免 hostname 解析失敗
# 2. 多網卡環境必須綁定具體業務 IP
# 3. SID_LIST_LISTENER 區塊需正確註冊實例(動態註冊通常無需配置)
# Linux firewalld firewall-cmd --add-port=1521/tcp --permanent firewall-cmd --reload # iptables iptables -A INPUT -p tcp --dport 1521 -j ACCEPT # 雲廠商安全組:入站規則放行 1521
# 確保實例參數正確 ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' SCOPE=BOTH; ALTER SYSTEM REGISTER; -- 強制立即註冊 # 查看註冊狀態 lsnrctl services
tail -f $ORACLE_BASE/diag/tnslsnr//listener/alert/log.xml # 或傳統日志 tail -f $ORACLE_HOME/network/log/listener.log
listener.ora 強制指定 (PROTOCOL=TCP)(HOST=0.0.0.0) 禁用 IPv6。SID_DESC。tnsping 驗證。setenforce 0。#!/bin/bash lsnrctl stop sleep 2 # 清理殘留進程 pkill -f tnslsnr # 修正配置 sed -i 's/HOST = .*/HOST = 0.0.0.0/' $ORACLE_HOME/network/admin/listener.ora # 開放防火牆 firewall-cmd --add-port=1521/tcp --permanent && firewall-cmd --reload # 啟動 lsnrctl start lsnrctl status
系統化排查「進程→端口→配置→網絡→註冊→日志」六個維度,90% 以上 TNS 啟動錯誤可在 10 分鐘內定位解決。