首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

CentOS 7 重啟後 Oracle 11g 監聽啟動失敗:TNS-12545 原因與解決

     編輯:程式設計疑難解答

在 CentOS 7 上配置好 Oracle 11g 並測試通過後,重啟服務器導致監聽無法啟動,報錯 TNS-12545: Connect failed because target host or object does not exist、Linux Error: 99: Cannot assign requested address。本文分析原因並給出解決方案。

錯誤現象

Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.110)(PORT=1521)))
TNS-12545: Connect failed because target host or object does not exist
TNS-12560: TNS:protocol adapter error
TNS-00515: Connect failed because target host or object does not exist
Linux Error: 99: Cannot assign requested address

根本原因

監聽器配置 listener.ora 中 HOST=192.168.0.110 使用了具體 IP 地址。重啟後,網絡服務啟動順序可能導致該 IP 尚未綁定到網卡,或主機名解析異常,監聽器綁定失敗。

解決方案:使用主機名代替 IP

  1. 確認主機名:執行 hostname 獲取,假設為 chkj。
  2. 修改 /etc/hosts 確保主機名解析到正確 IP:
127.0.0.1   localhost localhost.localdomain
192.168.0.110   chkj
  1. 修改 listener.ora,將 HOST 改為主機名:
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = chkj)(PORT = 1521))
    )
  )
  1. 同步修改 tnsnames.ora 中的 HOST 為主機名。
  2. 重啟監聽器:lsnrctl stop → lsnrctl start。

驗證

lsnrctl status
# 應顯示 Listening on: ... (HOST=chkj) ... 且無錯誤

補充建議

  • 設置監聽器開機自啟:systemctl enable oracle-listener(需編寫 systemd 服務腳本)。
  • 確保防火牆開放 1521 端口:firewall-cmd --permanent --add-port=1521/tcp。
  • 若使用動態 IP,考慮配置 DHCP 保留或固定 IP。

總結

監聽器綁定地址建議使用主機名而非硬編碼 IP,避免網絡服務啟動順序導致的綁定失敗。配合 /etc/hosts 正確解析,可穩定解決重啟後監聽無效問題。

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