必须先修改dns中scan名称的a记录为新ip及子网,再执行srvctl stop scan与start scan刷新ocr;仅改/etc/hosts或srvctl modify scan无效,dns未更新会导致scan资源卡在intermediate或failed状态。

修改 SCAN IP 子网掩码必须先改 DNS,再刷新 OCR
Oracle 11g RAC 的 SCAN VIP 子网掩码不是直接可配的参数,它由 DNS 解析结果和 OCR 中记录的网络定义共同决定。你不能只改 /etc/hosts 或只调用 srvctl modify scan 就生效——后者只改 SCAN 名称,不改 IP 或掩码。
真实操作路径是:先让 DNS 返回新子网下的 SCAN IP(比如从 192.168.56.90 换成 192.168.60.90/24),再用 srvctl stop scan + srvctl start scan 触发集群重新读取 DNS 并更新 OCR 中的子网信息。
- DNS 必须提前配置好新 SCAN IP 的 A 记录,且 TTL 要足够低(建议 ≤ 300),否则节点可能缓存旧地址
- 执行前确认
nslookup <scan_name></scan_name>已返回新 IP 和正确网段 -
srvctl config scan显示的子网掩码不会立刻更新,要等crsctl stat res -t | grep scan中资源 ONLINE 后才同步到 OCR - 如果 DNS 未改或解析失败,
srvctl start scan会卡在 INTERMEDIATE 状态,crsctl stat res -t显示FAILED或OFFLINE
修改 VIP 子网掩码本质是重配 nodeapps 网络接口
VIP 的子网掩码绑定在 nodeapps 网络定义里,对应 OCR 中的 public 接口配置。改掩码 ≠ 改单个 VIP 地址,而是要通过 srvctl modify nodeapps 重设整个节点的公网网段定义。
例如原 VIP 是 192.168.56.35/24,要改成 192.168.60.35/24,命令是:
[root@zrac1 ~]# srvctl modify nodeapps -n zrac1 -A 192.168.60.35/255.255.255.0/bond0 [root@zrac2 ~]# srvctl modify nodeapps -n zrac2 -A 192.168.60.45/255.255.255.0/bond0
- 必须用
root执行,且两个节点要分别运行(不能用通配) -
-A参数格式严格:<vip_ip>/<netmask>/<ifname></ifname></netmask></vip_ip>,顺序错或斜杠漏掉都会报PRKO-2002 - 执行后 VIP 不会自动漂移或重启,需手动
srvctl stop vip -n zrac1 && srvctl start vip -n zrac1才生效 - 如果网卡名(如
bond0)在oifcfg getif中显示为public类型,但实际物理接口已变更,得先用oifcfg setif同步,否则 VIP 启动失败
子网掩码不一致会导致 VIP 漂移失败或客户端连接超时
当 VIP 的子网掩码与操作系统网卡配置(/etc/sysconfig/network-scripts/ifcfg-bond0)或 OCR 中记录的 public 网络不一致时,最常见现象是:
- VIP 资源状态卡在
INTERMEDIATE,crsctl stat res -t显示FAILED OVER或反复重启 - 客户端用 VIP 连接时,TNS-12545 或 TNS-12170,
tnsping通但sqlplus连不上 - 日志中出现
CRS-2674: Start of 'ora.zrac1.vip' on 'zrac2' failed,根本原因是底层 ARP 响应异常 - 即使所有配置看似正确,也建议用
arping -I bond0 192.168.60.35在本地验证 VIP 是否能被同网段设备正常响应
别忽略 oifcfg 和 /etc/hosts 的联动校验
oifcfg getif 输出的 public 网段必须和 /etc/hosts 中 VIP 行的 IP 属于同一子网,否则 CRS 启动时会拒绝加载 nodeapps 资源。
例如 /etc/hosts 写了 192.168.60.35 zrac1-vip,但 oifcfg getif 显示:
bond0 192.168.56.0 global public
这就矛盾了——OCR 认为 bond0 是 56.0 网段,但 VIP 却配在 60.0,必然失败。
- 先用
oifcfg delif -global bond0/192.168.56.0清旧记录 - 再用
oifcfg setif -global bond0/192.168.60.0:public补新定义 - 该操作必须在所有节点 CRS RUNNING 状态下执行,否则报
PRIF-32或CRS-02306 - 改完立即
oifcfg getif确认输出已更新,再继续改 VIP
关键点在于:子网掩码不是孤立参数,它横跨 DNS、OCR、OS 配置三层。任何一层脱节,VIP 或 SCAN 就无法稳定上线。尤其注意 oifcfg 和 /etc/hosts 的网段一致性,这是最容易被跳过却导致后续全盘失败的环节。











