维护笔记: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