Oracle RAC实例启动顺序不一致的本质是资源依赖未显式约束,CRS按依赖图调度但关键依赖(如ASM、磁盘组、私网配置)缺失或损坏,导致部分节点实例无法触发启动。

Oracle RAC实例启动顺序不一致,本质是资源依赖未显式约束
RAC 实例启动看似“随机”,其实不是 Oracle 故意打乱顺序,而是 CRS(Cluster Ready Services)按资源依赖图(dependency graph)调度 —— 但很多关键依赖没被正确声明或已被破坏。比如ora.orcl.db 依赖 ora.DATA.dg,而后者又依赖 ora.asm 和底层网络资源;一旦某节点的 ASM 没起来、或磁盘组挂载失败、或私网子网配置错位,CRS 就会跳过该节点的数据库启动,导致“顺序不一致”。
常见诱因包括:
-
crsctl stat res -t显示ora.DATA.dg在节点1 ONLINE,在节点2为 OFFLINE 或 INTERMEDIATE —— 这不是“启动慢”,而是挂载失败卡住 - 两节点
db_unique_name不一致:节点1用orcl,节点2仍残留旧名orcl_old,srvctl start instance -i orcl2 -n node2会静默失败 - OCR 中记录的实例启动策略被手动修改过(如误删了
START_DEPENDENCIES属性),导致 CRS 不再等待 ASM 就尝试拉起 DB
如何验证当前启动顺序是否真“不一致”
别只看srvctl status database -d orcl 的最终输出。它只告诉你“现在谁在跑”,不反映启动过程。
真正要看的是:
- 每节点的
$GRID_HOME/log/<hostname>/crsd/crsd.log,搜索STARTING和ora.orcl1.inst时间戳 —— 节点1和节点2的启动时间差若超过 30 秒,大概率存在阻塞 - 执行
crsctl stat res ora.orcl1.inst -p | grep START_DEPENDENCIES,确认它是否包含ora.DATA.dg;缺失就说明依赖链断裂 - 检查
v$asm_diskgroup在两节点是否都为 MOUNTED 状态 —— 若节点2显示 DISMOUNTED,ora.orcl2.inst根本不会被 CRS 触发
为什么改了 db_unique_name 后一个节点起不来
这不是“顺序问题”,是 OCR 元数据与实际参数错配。CRS 启动实例时,会读取 OCR 中注册的DB_UNIQUE_NAME 值,再去找对应 $ORACLE_HOME/dbs/init<sid>.ora 里的 db_unique_name 参数。两者不匹配,实例直接拒绝启动,日志里只写 ORA-01078: failure in processing system parameters,不报具体哪项不一致。
实操要点:
- 查 OCR 记录:
srvctl config database -d orcl输出里的Unique Name:字段 - 查实际参数:
sqlplus / as sysdba @?/rdbms/admin/show_param.sql db_unique_name(需先连上实例,若连不上就去 init 文件里 grep) - 统一方式:用
srvctl modify database -d orcl -u orcl更新 OCR,再确保所有节点的 pfile/spfile 中db_unique_name='orcl'且无空格、大小写混用
集群启动后实例仍不一致?重点查私网和 HAIP
即使 OCR、ASM、参数全对,私网不通也会导致实例“半启动”:一个节点能完成 LMS/LMD 初始化,另一个卡在Waiting for cluster to start,最终被驱逐。
必须验证:
-
oifcfg getif输出的私网子网(如ens35/10.10.11.0:cluster_interconnect)是否与ip addr show ens35的 CIDR(如10.10.11.61/24)完全一致 —— 注意是网络地址,不是主机地址 - 两节点是否分配到相同 HAIP:
ifconfig | grep 169.254,重复则 LMS hung,日志出现ORA-29770 -
olsnodes -s -n -i必须全部返回 ACTIVE,有 INACTIVE 行说明 CSSD 未同步,CRS 不敢启动跨节点资源
Dependency 'ora.DATA.dg' not satisfied for resource 'ora.orcl2.inst'。


















