oifcfg setif 修改网卡绑定报 ORA-15018 的根本原因是集群运行时禁止直接修改网络绑定,必须先停 CRS、校验网卡名与子网掩码一致性、同步 OCR 与本地配置文件,否则导致 OCR 启动失败或 CTSS 卡住。
oifcfg setif 修改网卡绑定时为什么总是报错 ORA-15018
根本原因是 oifcfg setif 不允许在集群已启动、asm 或数据库实例正在运行时直接修改公网/私网接口绑定。oracle 会校验当前网络配置是否被 asm 或 crs 正在使用,一旦检测到活跃依赖,就拒绝变更并抛出 ora-15018: cannot create diskgroup 这类看似无关实则源于底层网络不一致的错误。
- 必须先停掉整个集群:用
crsctl stop crs(所有节点依次执行),不能只停crsd或ohasd - 确认无残留进程:
ps -ef | grep -i "crs\|asm",尤其注意oracle用户下的ocssd.bin和ohasd.bin - 修改前用
oifcfg getif备份当前输出,例如:oifcfg getif > /tmp/oifcfg_bak_$(date +%F)
公网与私网网卡名写错会导致 OCR 启动失败
Oracle RAC 对网卡命名极其敏感——oifcfg setif 中的接口名必须和系统实际识别的名称完全一致(区分大小写、不含别名或虚拟设备后缀),否则 OCR 启动时读取网络配置失败,表现为 CRS-4639: Could not contact Oracle High Availability Services 或 CRS-2101: The OLR was not found。
- 查真实网卡名用
ip link show up | awk '/^[0-9]+:/ {print $2}' | cut -d':' -f1,不是ifconfig里看到的 alias 名 - 私网必须用无外网路由的物理口(如
enp0s8),不能是 docker0、virbr0、bond0(除非 bond 确实只跑心跳) - 公网接口若用了 teaming/bonding,需确保 bonding mode 为
balance-rr或active-backup,802.3ad在某些版本会触发ORA-15032
setif 命令中 subnet 参数必须和 ifconfig 输出的 netmask 完全匹配
oifcfg setif 第三个参数是子网地址+掩码(如 192.168.10.0/24),它不是 CIDR 表示法的“建议值”,而是 Oracle 校验 ARP 和心跳包转发的硬约束。填错会导致节点间无法发现彼此,现象是 cluvfy comp nodecon 报 PRVF-7532 : Core file is generated on the node。
- 用
ip -o -f inet addr show | awk '{print $2,$4}'获取每个接口的真实addr/mask - 不要手算:比如 ifconfig 显示
Mask:255.255.255.0,就填192.168.10.0/24,别写成192.168.10.0/255.255.255.0(非法)或192.168.10.0/25(掩码不匹配) - 私网 subnet 必须全局唯一且不与任何公网段重叠,哪怕只是测试环境,Oracle 也会在后台做路由冲突检查
修改后 crsctl start crs 启动卡在 “Waiting for CTSS”
这是最隐蔽的问题:oifcfg setif 只改了 OCR 里的记录,但没同步更新 /etc/oracle/olr.loc 和 $GRID_HOME/crs/install/s_crsconfig_<hostname>.env</hostname> 里的网络相关变量。CTSS(Cluster Time Synchronization Service)启动时依赖这些文件中的接口信息来绑定端口,找不到对应设备就无限等待。
- 启动前手动检查:
grep -i "private|public" $GRID_HOME/crs/install/s_crsconfig_$(hostname -s).env,确认CRS_DAEMON_NETWORK_INTERFACE指向的是你刚 setif 的那个网卡名 - 如果不对,直接编辑该文件,改完保存;切勿用
oifcfg以外的方式改 OCR,否则 OCR 和本地配置不一致 - 首次启动失败后,别急着重启:先
crsctl delete resource ora.ctssd -f再crsctl start resource ora.ctssd,避免日志被冲掉

















