维护笔记:Oracle 启动失败 ORA-03113 + ORA-19809 实战排错全记录
今天分享一次Oracle启动故障 ——Oracle 12c 数据库启动失败,报 ORA-03113 和 ORA-19809 的处理实战。
一、故障现象
在尝试启动 Oracle 数据库时,提示如下错误:
同时,后台日志 alert_rac12c.log 显示如下内容:
复制
tail -100 /data/u01/app/oracle/diag/rdbms/rac12c/rac12c/trace/alert_rac12c.log1.
二、问题分析
错误分析关键点如下:
ORA-19815:FRA(Fast Recovery Area)已满;ORA-19809:无法创建新的归档日志;ORA-16038:当前 redo log 无法归档;ORA-03113:客户端与实例失联(其实是 Oracle 主动终止实例);这是一种典型的因 FRA 空间不足导致 redo 无法归档,最终实例崩溃 的场景。
三、解决步骤
1. 清理日志我们手动删除了一部分归档日志文件(这一步要谨慎,可以先备份):
复制
rm -rf /data/u01/app/oracle/fast_recovery_area/rac12c/RAC12C/archivelog/*1.
但仅删除物理文件还不够,Oracle 控制文件中仍然记录了这些日志。
2. 使用 RMAN 进行同步复制
rman target /
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;1.2.3.4.
这一操作可以同步控制文件和实际文件状态,释放空间并消除假归档记录。但是执行失败。
第二步尝试仍失败。
重新执行 startup 后仍然失败,说明当前 redo 日志已经“卡死”,无法被归档,也无法被覆盖。
3. 强制切换至非归档模式救急为了解除当前 redo log 的归档限制,我们使用以下“强制解锁”方案:
复制
SQL> startup mount;
SQL> alter database noarchivelog;
SQL> alter database open;1.2.3.
这一步成功打开数据库。
随后为了恢复正常备份策略,我们重新切回归档模式:
复制
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;1.2.3.4.
至此,问题成功解决。
四、总结与建议
故障根因:
主要问题是我们没有给日志归档设置自动回收,FRA 空间耗尽,导致 redo 无法归档,实例异常终止。
五、预防建议
项目
建议配置
FRA 空间
不小于数据库大小的 2 倍
RMAN 策略
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
定期清理
使用 DELETE OBSOLETE
阅读剩余
THE END