addnode.sh不是远程一键加节点工具,必须满足5项硬性准备:gi_home/oracle_home已解压但未root.sh、/etc/hosts双向解析、ntp偏差≤1s、ocr磁盘组mounted且≥2gb、集群健康检查全通过,缺一即静默失败。

Oracle RAC 19c 节点扩容不是“加台机器跑个脚本就完事”,漏掉任意一项硬性准备,addnode.sh 会在不同阶段静默失败或中途退出——它不报错,只卡住、回退、或让新节点 CRS 启不来。
执行 addnode.sh 前必须手动完成的 5 项硬性准备
这些不是“建议”,是 Oracle 官方文档明确要求的准入条件。任一不满足,脚本不会明确提示,但后续必然失败:
-
GI_HOME和ORACLE_HOME必须已在新节点上解压(如/u01/app/19.0.0/grid),但绝对不能运行过root.sh,也不能启动任何 CRS 进程 - 所有节点(含新节点)的
/etc/hosts必须双向解析:在每个现有节点上执行ping -c 3 rac3和nslookup rac3都得通;反向 PTR 记录也需匹配主机名(12c+ 默认校验) - 新节点时间必须与集群 NTP 源偏差 ≤1s:执行
ntpdate -u <ntp-server></ntp-server>后用date对比确认,chrony或ntpd都要同步且稳定 - OCR 和 Voting Disk 所在 ASM diskgroup(如
+OCR)必须MOUNTED且剩余空间 ≥2GB;可用crsctl query css votedisk和ocrcheck验证 - 现有集群必须健康:
crsctl check cluster -all全部通过,无CRS-4639或CRS-4000类错误
卡在 Copying files to remote nodes… 怎么查
这不是网络慢,而是 SSH 免密或端口不通。别猜,直接验证:
- 在已有节点上运行:
ssh -o ConnectTimeout=5 -o BatchMode=yes rac3 date—— 必须返回时间且无密码提示、无连接超时 - 确认新节点防火墙放行 6200–6400 端口(
firewall-cmd --list-ports或iptables -L -n) - 检查新节点
/etc/hosts是否包含所有节点的 public、private、vip、scan 解析,顺序和大小写必须与原节点一致
RAC 中添加 DB 实例必须用 dbca -addInstance,不能靠复制
数据库软件加节点后,实例不会自动注册。跳过这步,新节点上 srvctl status instance 会显示不存在,SQL*Plus 连接会报 ORA-12514:
- 命令示例:
dbca -ignorePreReqs -ignorePrereqFailure -silent -addInstance -nodeName rac3 -gdbName orcl -instanceName orcl3 -sysDBAUserName sys -sysDBAPassword oracle - 必须确保
-nodeName与olsnodes输出完全一致(区分大小写) - 执行前确认新节点上
$ORACLE_HOME下的network/admin/tnsnames.ora已包含 SCAN 和所有节点 VIP 别名
addnode.sh 成功后必须手动补的三件事
脚本返回 0 ≠ 新节点真正可用。以下步骤跳过,会导致 CRS 起不来、ASM 挂不上、实例连不上:
- 切到
root用户,在新节点上手动执行/u01/app/19.0.0/grid/root.sh(路径以你的GI_HOME为准)—— 它配置内核参数、启动 OHASD、挂载 OCR 磁盘组 - 在新节点上以
grid用户执行:crsctl check crs和asmcmd lsdg,确认所有磁盘组状态为MOUNTED,且Usable_file_mb > 0 - 在新节点上以
oracle用户执行:srvctl start instance -d orcl -i orcl3,再验证gv$database中inst_id是否出现新值
最常被忽略的是 root.sh 的执行时机和权限上下文——它必须在新节点本地、由 root 执行,且不能在 addnode.sh 过程中后台运行;另外,crsctl delete node 后若未更新 GI inventory,新加节点可能因清单冲突无法完成注册。











