INTERMEDIATE状态是CRS明确无法完成状态转换的失败信号,非假象;主因是IPC残留(shm/sem/msg)或OCR/Voting Disk写入被阻塞(如磁盘满、权限异常、网络中断),应先查日志、清理IPC、执行crsctl check resource -unsupported唤醒,而非盲目重启或删除资源。
crsctl stat res -t 显示资源为 INTERMEDIATE 是什么信号
这不是“暂时没刷出来”的假象,而是 crs 明确无法完成状态转换的失败标记。常见于 ora.asm、ora.<db>.db</db>、ora.<dg>.dg</dg> 或 ora.<vip>.vip</vip> 这类资源。背后几乎总是 ipc 资源残留(shm/sem/msg)或 ocr/voting disk 写入被阻塞 —— 比如磁盘满、权限异常、网络中断导致节点失联后未彻底清理。
先别 kill -9,查日志和 IPC 残留才是关键动作
看到 INTERMEDIATE 状态,第一反应不是重启或删资源,而是确认真实卡点:
- 运行
crsctl stat res -w "STATE = INTERMEDIATE"锁定具体资源名 - 查对应资源日志:
$GRID_HOME/log/<hostname>/crsd/crsd.log</hostname>搜索ORA-29702或failed to update resource state - 查 ASM 或 DB 实例关联的 alert 日志,看是否有
disk full、cannot write to OCR类报错 - 别只看
ps -ef | grep pmon—— 即使没进程,也要执行:ipcs -m | grep $ORACLE_SID、ipcs -s | grep $ORACLE_SID、ipcs -q | grep $ORACLE_SID
有输出就用ipcrm -m <shmid></shmid>、ipcrm -s <semid></semid>、ipcrm -Q <msgid></msgid>清理,清完再跑一次ipcs -a确认为空
crsctl check resource -unsupported 是最安全的“唤醒”手段
对 diskgroup(如 ora.DATA.dg)、ASM(ora.asm)或 VIP(ora.db1.vip)这类资源,直接 crsctl stop res 常失败并报 “resource is in INTERMEDIATE state, cannot stop”。这时最稳妥的做法是:
- 执行
crsctl check resource ora.DATA.dg -unsupported—— 注意必须加-unsupported,否则报CRS-4995 - 该命令不修改状态,但会触发 CRS 重新探测底层组件(ASM 实例、磁盘组健康度、VIP 绑定状态),多数情况下几秒内就能把
INTERMEDIATE推回ONLINE或暴露真实错误 - 不要对数据库资源(
ora.mydb.db)用这个命令;应改用srvctl stop database -d mydb -o abort强制终止实例,再等 CRS 自动重试
OCR 不可写时,清理空间比重启更有效
很多 INTERMEDIATE 状态源于文件系统爆满(比如 /u01/app/grid/cv/ 下 audit 日志撑爆,或 +OCR 磁盘组满)。此时即使进程和 IPC 都干净,OCR 写入失败也会让状态卡死:
- 检查
df -h和asmcmd lsdg,重点看OCR、MGMT、DATA磁盘组的USABLE_FILE_MB - 清空归档路径或 audit 目录后,立刻执行
crsctl check resource ora.OCR.dg -unsupported,而不是等 CRS 自动恢复 - 切忌在 OCR 不可写时执行
crsctl delete res—— 删除注册项不解决底层写入问题,重建资源时照样失败
真正卡住的从来不是状态本身,而是 IPC 残留、OCR 写入失败、或磁盘空间耗尽这三类底层问题。每一步操作前,先确认它在解决哪一类,比盲目执行命令重要得多。











