优先查CRS资源状态和ASM磁盘组挂载情况,90%的“无法open”是底层资源未就绪;crsctl stat res -t若显示ora..db为OFFLINE或INTERMEDIATE,说明资源依赖中断,需先确认OHAS、ASM及OCR/voting磁盘组状态是否正常。

Oracle RAC 实例无法打开,优先查 CRS 资源状态和 ASM 磁盘组挂载情况,而不是直接进 SQL*Plus 手动 startup —— 90% 的“无法 open”本质是底层资源未就绪,不是数据库参数或控制文件问题。
crsctl stat res -t 显示 ora..db 为 OFFLINE 或 INTERMEDIATE
这表示 CRS 根本没尝试启动数据库实例,或启动中途失败卡住。不是数据库内部错误,而是资源依赖断了。
- 先运行
crsctl check crs:若报CRS-4537,说明 OHAS 没起来,得先crsctl start ohasd并确认/etc/oracle/olr.loc路径有效 - 若
ora.asm状态是ONLINE INTERMEDIATE,说明 ASM 实例起来了但没挂上 OCR/voting disk 所在磁盘组 —— 运行asmcmd lsdg看对应磁盘组(如OCRVOTE)是否为MOUNTED;若为DISMOUNTED,需sqlplus / as sysasm手动ALTER DISKGROUP OCRVOTE MOUNT - 检查 OCR/voting disk 权限:所有节点上
ls -l输出必须一致,裸设备应为grid:oinstall、660;多路径设备要确认 WWID 相同且映射名一致(比如都叫/dev/mapper/mpathb)
srvctl start database -d 报 ORA-01078 和 CRS-2674
错误里藏的真正线索是 ORA-01078: failure in processing system parameters,它往往指向 SPFILE 不可用或 ASM 磁盘组不可读,不是参数写错了。
- 确认 SPFILE 路径:用
sqlplus / as sysdba -c "show parameter spfile",输出路径必须能被所有节点访问(例如在 ASM 中为+DATA/racdb/spfileracdb.ora),且该磁盘组已MOUNTED - 验证 ASM 可读性:在任意节点执行
sqlplus / as sysasm -c "select name,state from v$asm_diskgroup;",确保包含 SPFILE 和控制文件的磁盘组状态是MOUNTED - 别跳过
srvctl status asm -n <node>:如果 ASM 在某节点没起来,srvctl start database会在该节点静默失败,日志里只显示CRS-2674
实例进程存在但状态始终是 NOT OPEN
ps 看到 ora_pmon_<sid>,但 srvctl status instance 显示 Instance not running,或 sqlplus / as sysdba 连上后 select status from v$instance; 返回 MOUNTED 而非 OPEN —— 这是典型的“卡在 open 阶段”,常见于归档或 FRA 问题。
- 查告警日志:
tail -50 $ORACLE_BASE/diag/rdbms/<db_name>/<inst_name>/trace/alert_<inst_name>.log,重点搜ORA-19809、ORA-19815(FRA 满)、ORA-16038(归档失败)、ORA-03113(open 过程中断) - 如果是 FRA 满导致:先
rman target /进去执行CROSSCHECK ARCHIVELOG ALL; DELETE EXPIRED ARCHIVELOG ALL;;若仍卡住,临时切NOARCHIVELOG救急:startup mount; alter database noarchivelog; alter database open; - 检查控制文件路径:
show parameter control_files,路径必须真实存在、Oracle 用户有读写权,且所有节点路径一致(RAC 下不能用本地文件系统路径)
local_listener 配置错误导致实例看似启动成功但无法注册
PMON 进程存在、实例状态是 OPEN,但远程连接报 ORA-12514: TNS:listener does not currently know of service requested —— 实例根本没向监听器注册,客户端连不上。
- 每个节点单独配:
ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=node1-vip)(PORT=1521))' SCOPE=BOTH SID='rac1';,HOST必须是本节点 VIP,不能是localhost或 SCAN - 强制触发注册:
ALTER SYSTEM REGISTER;,然后立刻在对应节点跑lsnrctl services,看输出里是否有你的service_name和instance_name,且状态为READY - 检查 PMON 日志:
$ORACLE_BASE/diag/rdbms/<db_name>/<inst_name>/trace/alert_<inst_name>.log,搜failed to register local_listener或TNS-12541
最易被忽略的是:RAC 实例“启动完成”的标志不是 PMON 进程存在,也不是 v$instance.status = OPEN,而是 crsctl stat res -t 中该实例资源状态为 ONLINE,且 lsnrctl services 能看到其服务条目。任何一环断开,对外就是“无法打开”。


















