节点隔离后ohasd启动失败,需强制清理CRS状态、删除socket文件、检查olr.loc路径、执行roothas.pl -deconfig -force;OS升级后需验证ASMFD服务、OCR路径、CSS超时参数、DNS解析及hosts配置。
节点隔离后无法启动 ohasd,怎么办?
rac 节点被隔离后,手动重启时常见 ohasd 启动失败,报错类似 crs-4640: oracle high availability services is already active 或直接卡在 starting oracle cssd。这不是服务真在运行,而是 ocr/voting disk 状态残留或本地 gpnp profile 未同步导致的假死。
- 先确认真实状态:
ps -ef | grep ohasd,若无进程却报“already active”,说明 CRS 栈认为自己该 running,但实际没起来 - 强制清理本地 CRS 状态:
crsctl stop crs -f(必须加-f),再删掉/var/tmp/.oracle/下的 socket 文件(尤其是NP开头的) - 检查
/etc/oracle/olr.loc是否指向有效路径;若升级 OS 后该文件被覆盖或权限变更,ohasd会静默失败 - 不要跳过
roothas.pl -deconfig -force就重装——它只清本地 HAS,不影响集群其他节点
打 OS 补丁时 root.sh 报 ORA-15032 和 ORA-15260
这是典型 OCR 磁盘组访问失败,不是数据库层面问题,而是 GI 安装后首次运行 root.sh 试图初始化 OCR 时,找不到 Voting Disk 或 ASM 实例未就绪。
- 确保升级前所有节点已停库停 GI:
crsctl stop crs,且ps -ef | grep asm无残留进程 - 若用 ASMFD 管理磁盘,检查
asmfd服务是否已启用:systemctl status oracleasmfd;OS 升级后该服务常被 disable -
root.sh执行中若卡在 “Creating OCR keys for user ‘grid’…”,立刻查/u01/app/grid/crsdata/<node>/crsconfig_params中CRS_OCR_LOCATIONS是否仍指向旧路径(比如 /dev/mapper/vg_ocr-lv_ocr 被重命名) - 别在单节点跑完
root.sh就急着启集群——它默认不注册 Voting Disk 到其他节点,需后续手工crsctl replace votedisk
节点重加入集群时 crsctl check cluster 显示 CRS-4537: Cluster Ready Services is online 但 crsctl stat res -t 全是 OFFLINE
这说明 OHAS 层起来了,但 CSSD、CRSD 这些核心资源没拉起,本质是节点未能成功 join clusterware 的内部通信环(misscount、disk timeout 或网络心跳不通)。
- 先看
crsctl get css misscount和crsctl get css disktimeout,OS 升级后若内核参数(如net.core.somaxconn)被重置,可能触发误判隔离 - 检查
/etc/hosts:所有 RAC 节点名(public、private、vip、scan)必须解析到正确 IP,且不能有 IPv6 地址混入(尤其 Ubuntu 升级后localhost可能映射到::1) - 若用多网卡绑定(bonding),确认
ifconfig输出中 private 网络接口的 MTU 与其他节点一致;MTU 不匹配会导致 CSSD 心跳包被丢弃,现象就是 “online” 但资源不启动 -
crsctl add node后别直接crsctl start crs——先crsctl start resource ora.cssd -init,等 CSSD ready 再起 CRSD
升级后 SCAN VIP 解析异常或连接超时
SCAN 是 DNS 层概念,OS 升级本身不改 SCAN,但常因 /etc/resolv.conf 被重写、DNS 缓存未清、或 NetworkManager 服务接管了网络配置,导致客户端连 SCAN 名称时解析慢或失败。
- 查
nslookup <scan-name>和dig <scan-name>输出是否返回全部 3 个 IP;若只返回 1 个,说明 DNS 负载均衡没生效或缓存污染 - 检查
systemctl status systemd-resolved:某些新版 OS(如 RHEL 8.6+)默认启用它,但 GI 19c 与之存在 socket 冲突,需systemctl disable systemd-resolved并还原为传统resolv.conf - 客户端 TNS 配置里别硬编码 SCAN IP——必须用 SCAN 名称;若测试时用
sqlplus user@<scan-name>:1521/<service>失败,先tnsping <scan-name>看是否解析成功,再看lsof -i :1521确认 scan listener 真在监听
OCR 路径、ASMFD 状态、CSSD 心跳参数、DNS 解析链——这四点任何一处在 OS 升级中被静默改动,都会让节点看似“重加入了”,实则游离在集群逻辑之外。动手前备份 /etc/oracle、/etc/hosts、/etc/resolv.conf,比事后 debug 快十倍。










