Oracle 19c RAC加节点必须先在新节点静默安装Grid Infrastructure(执行gridSetup.sh -silent -executeConfigTools),再运行addnode.sh;跳过GI安装直接执行addnode.sh必然失败,常见报错包括CRS-4000、ORA-15032或“Cannot communicate with CRS daemon”。

直接说结论:Oracle 19c RAC 加节点不是“远程一键添加”,而是必须先在新节点完成 Grid Infrastructure 的最小化静默安装(至少到 gridSetup.sh -executeConfigTools 阶段),再从原节点运行 addnode.sh。跳过 GI 安装直接跑 addnode.sh 必然失败,报错如 CRS-4000、ORA-15032 或 “Cannot communicate with CRS daemon”。
新节点必须先静默安装 GI,不能只拷软件
很多人误以为把原节点的 $ORACLE_HOME 目录 tar 后 scp 到新节点就完事了——这会导致 addnode.sh 找不到本地 CRS 进程、OCR 路径不可读、ohasd 未注册。正确做法是:
- 在新节点上用
gridSetup.sh -silent -executeConfigTools -responseFile完成 GI 静默配置(不执行root.sh) - 确保
/etc/oracle/ocr.loc存在且指向 ASM diskgroup(如ocrconfig_loc=+OCR)或 NFS 路径 - 检查
crsctl check crs在新节点能返回 “CRS-4638: Oracle High Availability Services is online”,说明 ohasd 已启动 - 确认
olsnodes -n在原节点能看到新节点名和 IP 映射;若无,说明 GNS/DNS 未同步,addnode.sh会卡在发现阶段
cluvfy stage -pre nodeadd 比 addnode.sh 自带检查更关键
这个预检命令能提前暴露 addnode.sh 不会报但实际致命的问题:
-
udev规则缺失导致 ASM 磁盘不可见(尤其 RHEL8+ 默认禁用 udev) - ASM Filter Driver(AFD)未启用:
asmfilterdriver status应为 “running”,否则asmcmd lsdg报ORA-15000 - 内核参数(如
semmsl、shmall)或limits.conf中nproc/nofile不达标 - 时间不同步(
ntpq -p输出偏移 > 1s)、SELinux 未关闭、防火墙未放行 12380/12390 等 CRS 端口
加完节点后 ASM 实例默认不启动,需手动干预
即使 addnode.sh 成功,新节点上的 ASM 实例大概率是 OFFLINE 状态,表现为:
-
crsctl stat res -t | grep asm显示OFFLINE -
asmcmd lsdg报ORA-15000,或srvctl config asm -n <new_node>无输出 - OCR/Voting Disk 在 ASM 上时,diskgroup 根本挂载不上
解决方法分场景:
- 非 Flex ASM:直接
srvctl start asm -n <new_node_name>;若失败,查$ORACLE_HOME/log/<node>/agent/crsd/orarootagent_root/orarootagent_root.log,常见原因是磁盘设备权限不对或 AFD 未加载 - Flex ASM:新节点默认不托管 ASM 实例,需先
srvctl add asm -n <new_node_name>,再srvctl start asm -n <new_node_name> - 检查
/dev/asm*设备是否可见;RHEL8+ 必须systemctl enable --now oracleafd并确认lsmod | grep afd有输出
SCAN VIP 和实例注册容易被忽略
节点加入后,客户端仍连不上新实例,往往不是数据库没起来,而是服务没注册进 SCAN:
-
srvctl status service -d <db_name>看服务是否在新节点上运行;若没跑,用srvctl start service手动启 -
lsnrctl services <scan_listener_name>查看 SCAN listener 是否已感知新节点的 instance;若无,检查local_listener参数是否指向新节点的 VIP(而非 localhost) - 新节点的
tnsnames.ora中SCAN条目必须和原集群一致,且 DNS/hosts 中cluster-scan解析必须覆盖所有 SCAN IP - 别忘了验证
SQL> select inst_id, instance_name, status from gv$instance;—— 新实例状态应为OPEN,且inst_id唯一
最常被跳过的一步是:加完节点后没检查 OCR 冗余和 voting disk 状态。用 crsctl query css votedisk 和 ocrcheck -local 确认新节点能读写 OCR,否则后续打补丁或升级可能失败。


















