首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle DBCA 建庫報錯「無法分配端口」根因:/etc/hosts 缺失主機名映射

     編輯:Oracle 資料庫相關知識

全新安裝 Oracle 10.2.0.4 + Patch,運行 DBCA 創建數據庫時拋出:
嚴重: 無法在指定的范圍內為以下進程分配端口: JMS [5540-5559], RMI [5520-5539], Database Control [5500-5519], EM Agent [3938] | [1830-1849]
netstat -an 顯示無任何進程佔用上述端口段,防火牆關閉,SELinux 許可。網上多指向 emca 配置錯誤,實際卻是更底層的網絡解析問題。

一、排查還原現場

  1. 嘗試 emca -deconfig dbcontrol db -repos drop 清理 EM 配置,同樣報錯。
  2. lsnrctl status 顯示 HOST= 為空,監聽狀態異常,無法正常停止。
  3. 對比同規格正常節點的 $ORACLE_HOME/network/admin/listener.ora、tnsnames.ora、sqlnet.ora,均一致。
  4. 最終對比 /etc/hosts 發現差異:
    故障節點:127.0.0.1 localhost
    正常節點:127.0.0.1 localhost oracle-hostname

二、根因剖析

Oracle 安裝與 DBCA 過程中,多組件(監聽器、EM Agent、DB Console、JMS/RMI)需解析本機主機名獲取 IP 進行綁定。
/etc/hosts 缺失 127.0.0.1 <hostname> 導致:

  • gethostname() 返回主機名,但 gethostbyname() 解析失敗(無 DNS、無 hosts 映射)。
  • Java 組件(EM、JMS、RMI)啟動時綁定 0.0.0.0 或回環失敗,端口分配器判定「端口範圍不可用」。
  • 監聽器 HOST= 為空,無法正常服務。

三、修復與驗證

# 1. 修正 /etc/hosts
127.0.0.1   localhost localhost.localdomain oracle-hostname
::1         localhost localhost.localdomain oracle-hostname

# 2. 重新運行 DBCA(或静默模式)
dbca -silent -createDatabase \
  -templateName General_Purpose.dbc \
  -gdbname orcl -sid orcl \
  -sysPassword xxx -systemPassword xxx \
  -emConfiguration NONE \
  -datafileDestination /u01/oradata

DBCA 秒級通過,監聽器自動註冊正常,EM Agent 啟動無誤。

四、最佳實踐:預安裝檢查清單

  1. 主機名解析:ping $(hostname) 必須返回 127.0.0.1 或固定 IP。
  2. /etc/hosts 格式:IP 短主機名 FQDN,IPv4/IPv6 雙行。
  3. DNS 一致性:若用 DNS,確保正反向解析一致,nslookup IP 返回 FQDN。
  4. 防火牆/SELinux:預開放 1521、5500-5559、3938、1158 等端口。
  5. 內核參數:kernel.shmmax、kernel.sem、fs.file-max、net.core.somaxconn 達標。
  6. 用戶限制:/etc/security/limits.conf 設置 oracle soft/hard nofile 65536、nproc 16384、memlock。

「磨刀不誤砍柴工」,安裝前 10 分鐘核對網絡身份,可省下數小時的 EM/監聽器排障。將 /etc/hosts 納入自動化部署腳本(Ansible/Shell),從源頭杜絕此類低級錯誤。

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