addnode.sh不支持真正在线加节点,执行时会中断SCAN VIP、GNS等服务,且必须满足GI_HOME预解压、网络双向解析、时间偏差≤1s、OCR磁盘组≥2GB、集群健康5项硬性条件。
addnode.sh 不支持真正意义上的“在线”添加节点——它要求集群运行中,但执行时会中断 SCAN VIP、GNS、ASM diskgroup 重发现等关键资源,且必须满足硬性前置条件。所谓“在线”,只是数据库实例没停,底层高可用服务实际会抖动。
执行 addnode.sh 前必须验证的 5 项硬性条件
漏掉任意一项,脚本会在中途失败,甚至导致 ocr 锁死或 crs 启动异常:
-
GI_HOME和ORACLE_HOME在新节点上必须已解压(但不能运行root.sh或配置),路径、用户 UID/GID、组(oinstall、asmadmin、asmdba)须与现有节点完全一致 - 所有节点(含新节点)的
/etc/hosts必须双向解析:public IP、VIP、SCAN IP、private IP 都要能ping -c 3 hostname和nslookup hostname通,且反向 PTR 记录必须匹配(Oracle 12c+ 默认校验) - 新节点时间必须与集群 NTP 源偏差 ≤1s;建议先跑
ntpdate -u ntp-server,再比对date输出 - OCR 和 Voting Disk 所在 ASM diskgroup 必须
MOUNTED且剩余空间 ≥2GB;用crsctl query css votedisk和ocrcheck确认 - 现有集群必须全部通过
crsctl check cluster -all,无CRS-4639或CRS-4000类错误
addnode.sh 最容易卡住的三个阶段及排查方式
不是脚本挂了,而是日志里藏着真实原因:
- 卡在
Copying files to remote nodes…:大概率是 SSH 免密未配全(比如只配了oracle用户,漏了grid用户),或新节点防火墙未放行 6200–6400 端口;手动验证命令:ssh -o ConnectTimeout=5 -o BatchMode=yes grid@newnode date - 卡在
Running root.sh on remote node…:常见于新节点缺libaio、sysstat,或内核参数(如kernel.sem)未生效;检查日志:/u01/app/11.2.0/grid/cfgtoollogs/addnode/addnode.log - 卡在
Updating OCR with node information…:OCR 正被其他进程锁定(比如另一个crsctl操作正在执行),或新节点grid用户对 OCR 设备权限不足;修复命令:chown grid:oinstall /dev/oracleasm/disks/*
加完节点后必须手动补的三件事
addnode.sh 成功返回 ≠ 节点真正可用,GI 层和 DB 层是分离的:
- 确认新节点上
crsctl check crs返回正常;若报CRS-4639,立刻查crsctl start crs -wait输出,重点看 OCR 设备是否Permission denied - 数据库实例不会自动注册;必须在已有节点用
oracle用户执行:srvctl add database -d db_name -o $ORACLE_HOME,再逐个srvctl add instance和srvctl start instance - 监听可能缺静态注册:若客户端连报
ORA-12514,检查新节点$ORACLE_HOME/network/admin/listener.ora是否包含SID_LIST静态条目,否则动态注册无法生效
/etc/hosts 里某一行多了一个空格、某个内核参数只在 sysctl.conf 里写了但没 sysctl -p、或者 OCR 磁盘组刚好剩 1.9GB —— 这些都会让 addnode.sh 在最后一步静默失败。


















