INTERMEDIATE状态是CRS明确卡在状态转换中间,非临时异常,主因是IPC残留、OCR不可写或资源注册失败;须先查crsd.log和alert日志,再清理shm/sem/msg,最后验证OCR可写性。

INTERMEDIATE 状态不是“临时异常”,而是 CRS 明确卡在状态转换中间——资源注册、IPC 清理或 OCR 写入任一环节失败,它就停在这儿不动。不能等它自愈,也不能直接删资源。
crsctl stat res 显示 INTERMEDIATE 的真实含义
这不是“正在启动中”,而是 CRS 尝试将资源从 OFFLINE 或 UNKNOWN 切换到 ONLINE 时中途失败,且无法回滚或重试。常见触发点有三个:ora.asm 进程已启但挂不了磁盘组、ora.cssd 启动后拿不到 voting disk、或数据库实例进程退出后 shm/sem 残留导致 CRS 认为“实例没真正死”。日志里一定有 ORA-29702、failed to update resource state 或 IPC send timeout。
先查日志,别急着 kill 进程
执行 crsctl stat res -w "STATE = INTERMEDIATE" 确认具体资源名,然后立刻查两处日志:
-
$GRID_HOME/log/`hostname`/crsd/crsd.log:搜ORA-29702和对应资源名,看是哪步 fail -
$ORACLE_HOME/rdbms/log/alert_<inst>.log</inst>(若涉及 DB):搜Starting ORACLE instance后是否卡在ASM或mounting
不要看到 ps -ef | grep pmon 没输出就认为实例干净——ipcs -a | grep $ORACLE_SID 才是真相。残留的 shm 或 sem 会让 CRS 拒绝重启资源,哪怕你手动 srvctl start 也会秒退回 INTERMEDIATE。
清理 IPC 残留必须一步到位
确认资源卡住后,按顺序清理 IPC 资源,每清一项都用 ipcs -a 验证是否真没了:
- 查共享内存:
ipcs -m | grep $ORACLE_SID→ 对应ipcrm -m <shmid> - 查信号量:
ipcs -s | grep $ORACLE_SID→ 对应ipcrm -s <semid> - 查消息队列:
ipcs -q | grep $ORACLE_SID→ 对应ipcrm -Q <msgid>
清理完必须再跑一次 ipcs -a,确保无任何输出。漏掉一个 sem,crsctl start res 就会静默失败并维持 INTERMEDIATE。
OCR 不可写是 INTERMEDIATE 持续超 5 分钟的主因
如果清理 IPC 后仍卡住,立刻验证 OCR 可写性:
- 用
asmcmd lsdg看 OCR 所在磁盘组(如OCRVOTE)是否MOUNTED;若DISMOUNTED,用sqlplus / as sysasm执行ALTER DISKGROUP OCRVOTE MOUNT - 运行
crsctl query css votedisk,检查输出路径(如+OCRVOTE)在所有节点上能否被grid用户读取,ls -l确认属主是grid:oinstall、权限是660(裸设备)或644(NFS) - 执行
ocrcheck -config,确认配置路径有效且非只读
OCR 写入失败时,crsctl stop res 和 crsctl start res 都会失效——因为 CRS 根本没法更新资源状态记录。这时候强行删资源(crsctl delete res)等于绕过集群一致性校验,生产环境禁用。


















