Oracle 12c RAC Grid配置中OCR启动失败的根因是oifcfg子网与OS实际网卡CIDR不一致,导致CRS初始化中断;GNS VIP与SCAN VIP不可复用;节点未全在线时执行oifcfg会损坏OCR;HAIP冲突引发70秒后实例驱逐。

Oracle 12c RAC 配置 Grid 时外部 IP 冲突,不是“连不上数据库”,而是 CRS 根本起不来 —— crsctl check crs 直接报 CRS-4638: Oracle High Availability Services is online 但后续所有资源卡在 INTERMEDIATE 或 OFFLINE,ocrcheck 失败,olsnodes -s 显示节点状态为空或 Inactive。根本原因在于 OCR 和 GPNP profile 中记录的 public 网络信息与操作系统实际配置不一致,且冲突常发生在 VIP、SCAN VIP 或 GNS VIP 层面。
oifcfg setif 与网卡实际子网不匹配直接导致 CRS 启动失败
这是最常见、也最容易被忽略的硬性校验点。Grid 在启动 OCR 初始化阶段会比对 oifcfg getif 输出的子网地址(如 192.168.1.0)和 ip addr show eth0 中该网卡的真实 CIDR(如 192.168.1.30/24)。两者网络前缀必须完全一致,否则日志里立刻出现:
PROC-44: Error in network address and interface operations clsu_get_private_ip_addresses: no ip addresses found
这意味着 CRS 连私网地址都拿不到,OCR 初始化直接中断。
-
oifcfg setif -global eth0/192.168.1.0:public中的192.168.1.0是网络地址,不能写成主机地址(如192.168.1.30) - 执行前务必用
ip addr show eth0确认该网卡已配好 IP 且掩码正确(如/24),再算出对应网络地址 - 修改后必须运行
oifcfg getif对照验证,输出的子网字段必须和ip addr输出的 CIDR 网络段一字不差
GNS VIP 与 SCAN VIP 复用同一 IP 会导致 srvctl add scan 拒绝注册
很多管理员误以为 GNS 只是“辅助服务”,把 GNS VIP 和某个 SCAN VIP 设成同一个地址(比如都设为 192.168.56.100),结果 srvctl add scan 报错 PRCN-2061 或静默失败,nslookup scan-cluster 返回的 IP 中混入 GNS 自身监听地址,客户端连接被重定向到 GNS 监听器而非 SCAN 监听器,连接超时。
- GNS VIP 必须独立于所有 SCAN VIP、节点 VIP、public IP,且不能落在 DHCP 地址池范围内
- SCAN VIP 数量固定为 3 个(即使只有 2 个节点),由 GNS 动态分配;GNS VIP 则是 GNS 服务自身监听地址,二者逻辑层级不同,不可复用
- 验证方式:
nslookup scan-cluster.example.com查三次,应返回三个不同 IP;再逐个ping -c1,不响应的说明对应节点上 SCAN VIP 未激活,但 IP 已被 OCR 锁定
节点未全部在线时 oifcfg 命令会静默破坏 OCR 元数据
oifcfg 是集群级命令,依赖 CSSD 和 OCR 服务正常运行。只要有一个节点 CRS 没起来(比如卡在 ora.storage),在任一节点执行 oifcfg setif 都会返回 PRIF-26: Error in update the profiles in the cluster,此时 OCR 中的网络配置可能已被部分写入、部分回滚,造成元数据损坏。
- 检查真实状态用
olsnodes -s -n -i,输出中不能有Inactive或空行;任何异常节点都不能参与oifcfg操作 - 稳妥做法:先
crsctl stop cluster -all停掉全部节点,再逐台修改/etc/hosts、网卡配置、oifcfg,最后统一启集群 - 切勿在某节点 CRS 已挂的情况下强行运行
oifcfg—— 它不会报错,但会让 OCR 更混乱,恢复难度指数上升
HAIP 地址冲突不会立即报错,但 70 秒后 LMS hung 并触发实例驱逐
Oracle 11gR2+ 默认启用 HAIP(169.254.x.x),用于私网冗余。如果两节点 HAIP 分配到同一地址(如都拿到 169.254.12.3),LMS 进程会在 70 秒后报 LMS1 has not called a wait for 70 secs,紧接着触发实例驱逐,告警日志反复出现 ORA-29770、ORA-29743。
- 查 HAIP 分配:运行
oifcfg getif看是否含haip类型接口;或用ifconfig | grep 169.254 - HAIP 冲突不会立刻暴露,业务表现为“时快时慢”,容易误判为负载问题
- 修复需停集群,清空 HAIP 缓存(
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore不推荐),重启后由 GNS 重新分配
真正麻烦的从来不是改一个 IP,而是改完之后 OCR、GPNP、OS 网络栈、DNS 解析四者之间有没有达成严格一致。任何一个环节差一位子网掩码、多一个空格、少一条 /etc/hosts 条目,都会让 CRS 卡在初始化早期,且错误日志往往不直接指向根因。


















