全新安裝 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 配置錯誤,實際卻是更底層的網絡解析問題。
emca -deconfig dbcontrol db -repos drop 清理 EM 配置,同樣報錯。lsnrctl status 顯示 HOST= 為空,監聽狀態異常,無法正常停止。$ORACLE_HOME/network/admin/listener.ora、tnsnames.ora、sqlnet.ora,均一致。/etc/hosts 發現差異:127.0.0.1 localhost127.0.0.1 localhost oracle-hostnameOracle 安裝與 DBCA 過程中,多組件(監聽器、EM Agent、DB Console、JMS/RMI)需解析本機主機名獲取 IP 進行綁定。
/etc/hosts 缺失 127.0.0.1 <hostname> 導致:
gethostname() 返回主機名,但 gethostbyname() 解析失敗(無 DNS、無 hosts 映射)。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 啟動無誤。
ping $(hostname) 必須返回 127.0.0.1 或固定 IP。IP 短主機名 FQDN,IPv4/IPv6 雙行。nslookup IP 返回 FQDN。kernel.shmmax、kernel.sem、fs.file-max、net.core.somaxconn 達標。/etc/security/limits.conf 設置 oracle soft/hard nofile 65536、nproc 16384、memlock。「磨刀不誤砍柴工」,安裝前 10 分鐘核對網絡身份,可省下數小時的 EM/監聽器排障。將 /etc/hosts 納入自動化部署腳本(Ansible/Shell),從源頭杜絕此類低級錯誤。