INS-30014和PRVF-0002错误主因是/etc/hosts未正确配置:须用真实网卡IP同时映射短名和完整名,禁用127.0.0.1;hostname -f结果必须与hosts中条目严格一致,且正向、反向解析需双向匹配。
ins-30014 和 prvf-0002 这两类错误,90% 以上都源于 /etc/hosts 文件里没写对——不是没写,是写得“看起来对、实际错”。
/etc/hosts 必须同时映射短名和完整名,且不能用 127.0.0.1
Oracle 19c 安装器会调用 hostname -f 获取完整主机名(比如 rac1.example.com),再拿这个字符串去查 /etc/hosts。它不接受 fallback 到 127.0.0.1 或 DNS。
127.0.0.1 rac1hostname 输出是 rac1,也会失败,因为 hostname -f 返回的是 rac1.example.com,而这一串在 hosts 里根本没出现127.0.0.1 rac1.example.com rac1192.168.10.10)192.168.10.10):192.168.10.10 rac1.example.com rac1
验证命令:
hostname → 应输出 rac1
hostname -f → 应输出 rac1.example.com
grep rac1 /etc/hosts → 应返回含 192.168.10.10 的那一行,且两个名字都在其中runcluvfy 报 PRVF-4657 或 PRVF-4664 的真实检查逻辑这不是 DNS 问题,而是本地闭环验证:Oracle 会用系统 API(getaddrinfo() 和 gethostbyaddr())做正向+反向解析,要求两者严格一致。
rac1.example.com 查 IP → 必须得到 192.168.10.10
192.168.10.10 查主机名 → 必须返回 rac1.example.com(不能是 rac1,也不能是其他别名)常见陷阱:
/etc/hosts 中该 IP 行后面多了一个空格或制表符,导致第二个字段被截断hostname -f 已更新,hosts 还是旧的hostname 是随机生成的(如 8a3f2b1e4c7d),但 /etc/hosts 没同步,也没挂载外部 hosts临时验证方法:
nslookup rac1.example.com → 看是否返回 192.168.10.10
nslookup 192.168.10.10 → 看是否返回 rac1.example.com(注意:这步依赖 DNS 的 PTR 记录;若不用 DNS,就靠 /etc/hosts 本身无法完成反向,所以必须确保 hosts 配置已覆盖全部需求)RAC 场景下,scan.example.com 不是可选项,它和节点主机名一样,受同一套解析校验约束,且额外要求:
getaddrinfo() 返回 ≥2 个 AF_INET 结构体)/etc/hosts 中不能写成单行多个 IP(如 192.168.10.10 192.168.10.11 192.168.10.12 scan.example.com),这是无效的192.168.10.10 scan.example.com192.168.10.11 scan.example.com192.168.10.12 scan.example.com
否则 srvctl start scan 会静默失败,或 srvctl status scan_listener 显示监听器只绑定了部分 VIP。
最常被忽略的一点:改完 /etc/hosts 后,hostname -f 的输出可能仍缓存旧值,尤其在 systemd 系统上。不要只信命令输出,要以 getaddrinfo("rac1.example.com", ...) 实际调用结果为准——这意味着你得重试安装或至少重启 systemd-hostnamed 服务,或者干脆 reboot。