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

Oracle 監聽啟動報錯 TNS-12541/12560/00511 完整排查指南

     編輯:DB2 教學

Oracle 監聽啟動報錯 TNS-12541/12560/00511 完整排查指南

錯誤代碼含義

錯誤碼含義常見原因
TNS-12541TNS:no listener監聽器未啟動、端口衝突、防火牆攔截
TNS-12560TNS:protocol adapter error協議適配器錯誤,通常伴隨 12541 出現
TNS-00511No listener監聽器進程不存在
TNS-12542TNS:address already in use監聽端口被佔用(默認 1521)
TNS-00512Address already in use同上,底層系統錯誤碼

標準排查流程

1. 確認監聽器狀態

lsnrctl status
# 若報 TNS-01101 "Could not find service name",檢查 listener.ora 配置

2. 檢查端口佔用

# Linux/Unix
netstat -anp | grep 1521
lsof -i :1521

# Windows
netstat -ano | findstr 1521
tasklist | findstr 
若端口被其他進程佔用,kill 進程或修改 listener.ora 端口。

3. 驗證 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 區塊需正確註冊實例(動態註冊通常無需配置)

4. 檢查防火牆/安全組

# Linux firewalld
firewall-cmd --add-port=1521/tcp --permanent
firewall-cmd --reload

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

# 雲廠商安全組:入站規則放行 1521

5. 驗證數據庫實例註冊

# 確保實例參數正確
ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' SCOPE=BOTH;
ALTER SYSTEM REGISTER;  -- 強制立即註冊

# 查看註冊狀態
lsnrctl services

6. 查看監聽器日志

tail -f $ORACLE_BASE/diag/tnslsnr//listener/alert/log.xml
# 或傳統日志
tail -f $ORACLE_HOME/network/log/listener.log

常見陷阱與解決

  • IPv6 干擾:listener.ora 強制指定 (PROTOCOL=TCP)(HOST=0.0.0.0) 禁用 IPv6。
  • 多實例端口衝突:每個實例獨立監聽器端口,或共用監聽器配置多 SID_DESC。
  • ORACLE_HOME/TNS_ADMIN 環境變量錯誤:導致讀取錯誤配置文件,用 tnsping 驗證。
  • SELinux/AppArmor:臨時設為 Permissive 模式驗證 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 分鐘內定位解決。

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