故障排查5 分钟阅读
Oracle 数据库启动失败排查指南 — ORA-01102/ORA-00600/ORA-03113 等常见报错
Oracle 数据库无法启动?本文覆盖 NOMOUNT/MOUNT/OPEN 三阶段的典型报错(ORA-01102、ORA-00600、ORA-03113、ORA-01157 等),提供系统化排查流程和恢复命令。
2026年4月26日阅读—点赞—收藏—
oracle启动失败startup故障排查alert log
在知识库中专注阅读,并随时返回相关工具与课程
Oracle 数据库无法启动?本文覆盖 NOMOUNT/MOUNT/OPEN 三阶段的典型报错(ORA-01102、ORA-00600、ORA-03113、ORA-01157 等),提供系统化排查流程和恢复命令。
Oracle 数据库启动分三个阶段:NOMOUNT → MOUNT → OPEN。不同阶段的启动失败,原因完全不同。本文按阶段梳理常见报错和解决方案。
不管什么报错,第一件事永远是查 Alert Log:
1# 11g23> **本章目标**:掌握本章核心知识点4> **前置要求**:完成前序章节学习5> **预计时长**:60 分钟67tail -200 $ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_<instance_name>.log89# 12c+10adrci11> show alert -tail 200Alert Log 会记录启动过程中每一步的详细信息和错误堆栈。
NOMOUNT 阶段做两件事:读参数文件、分配 SGA 内存。
原因:找不到 spfile 或 pfile。
1# 检查 spfile 是否存在2ls -la $ORACLE_HOME/dbs/spfile${ORACLE_SID}.ora3ls -la $ORACLE_HOME/dbs/init${ORACLE_SID}.ora45# 如果 spfile 损坏,从备份恢复6cp /backup/spfile${ORACLE_SID}.ora $ORACLE_HOME/dbs/78# 或者从 pfile 创建9CREATE SPFILE FROM PFILE='$ORACLE_HOME/dbs/initorcl.ora';原因:系统可用内存不足以分配 SGA。
1# 检查系统可用内存2free -g34# 检查共享内存配置5cat /proc/sys/kernel/shmmax6cat /proc/sys/kernel/shmall78# 临时调整(需要 root)9sysctl -w kernel.shmmax=85899345921011# 或者减小 SGA12# 用 pfile 启动,修改 SGA 参数13echo "sga_target=2G" > /tmp/initorcl.ora14echo "sga_max_size=2G" >> /tmp/initorcl.ora15sqlplus / as sysdba16STARTUP NOMOUNT PFILE='/tmp/initorcl.ora';MOUNT 阶段读取控制文件。
原因:控制文件丢失或路径错误。
1-- 检查参数中配置的控制文件路径2SHOW PARAMETER control_files;34-- 确认文件是否存在5-- !ls -la /u01/app/oracle/oradata/orcl/control01.ctl恢复方案:
1-- 方案一:从多路复用拷贝恢复2-- 如果有 3 个控制文件,坏了 1 个,拷贝好的覆盖即可3-- !cp control02.ctl control01.ctl45-- 方案二:从 RMAN 备份恢复6RMAN> STARTUP NOMOUNT;7RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;8RMAN> ALTER DATABASE MOUNT;原因:另一个实例已经 MOUNT 了这个数据库,或者之前的进程没有正常关闭。
1# 检查是否有残留进程2ps -ef | grep ora_ | grep ${ORACLE_SID}3ps -ef | grep smon45# 清理残留共享内存6ipcs -m | grep oracle7ipcrm -m <shmid>89# 清理锁文件10rm -f $ORACLE_HOME/dbs/lk${ORACLE_SID}OPEN 阶段验证所有数据文件和 redo log 文件。
原因:某个数据文件丢失或损坏。
1-- 查看哪个文件出问题2SELECT file#, name, status FROM v$datafile;34-- 如果是非关键表空间,可以先离线打开数据库5ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf' OFFLINE;6ALTER DATABASE OPEN;78-- 然后从 RMAN 恢复该文件9RMAN> RESTORE DATAFILE '/u01/oradata/orcl/users01.dbf';10RMAN> RECOVER DATAFILE '/u01/oradata/orcl/users01.dbf';11RMAN> ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf' ONLINE;原因:Online Redo Log 文件丢失或损坏。
1-- 查看 redo log 状态2SELECT group#, status, member FROM v$logfile;3SELECT group#, status, bytes/1024/1024 AS size_mb FROM v$log;恢复方案取决于 redo log 的状态:
1-- 如果是 INACTIVE 状态(已归档),可以清除重建2ALTER DATABASE CLEAR LOGFILE GROUP 3;34-- 如果是 CURRENT 状态(未归档),风险较高5-- 需要不完全恢复6ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;7ALTER DATABASE OPEN RESETLOGS;警告
警告:RESETLOGS 是最后手段,会导致之前的归档日志不可用。
这是 Oracle 内核级错误,排查思路:
ORA-00600: internal error code, arguments: [kclchkblk_3], [1], ...仅在紧急情况下使用,可能导致数据不一致:
1-- 如果 OPEN 报错,尝试 RESETLOGS2ALTER DATABASE OPEN RESETLOGS;34-- 如果仍然失败,最后手段5ALTER SYSTEM SET "_allow_resetlogs_corruption"=TRUE SCOPE=SPFILE;6STARTUP MOUNT;7ALTER DATABASE OPEN RESETLOGS;8-- 打开后立即做全库备份!
Oracle 数据库 STARTUP 启动失败排查流程
记住:Alert Log 是你的第一信息源,所有启动失败的排查都从这里开始。
Oracle 启动恢复是 DBA 的核心技能。DBA 学习之路的 RMAN 备份恢复模块(Day 11-20)系统讲解了各种灾难场景的恢复操作,包括控制文件丢失、redo log 损坏、数据文件缺失等。开始学习 →
本章介绍了以下核心内容: