維護筆記: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.log
二、問題分析
錯誤分析關鍵點如下:
- 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/*
但僅刪除物理文件還不夠,Oracle 控制文件中仍然記錄了這些日志。
2. 使用 RMAN 進行同步
rman target /
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;
這一操作可以同步控制文件和實際文件狀態,釋放空間并消除假歸檔記錄。但是執行失敗。
第二步嘗試仍失敗。
重新執行 startup 后仍然失敗,說明當前 redo 日志已經“卡死”,無法被歸檔,也無法被覆蓋。
3. 強制切換至非歸檔模式救急
為了解除當前 redo log 的歸檔限制,我們使用以下“強制解鎖”方案:
SQL> startup mount;
SQL> alter database noarchivelog;
SQL> alter database open;
這一步成功打開數據庫。
隨后為了恢復正常備份策略,我們重新切回歸檔模式:
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
至此,問題成功解決。
四、總結與建議
故障根因:
主要問題是我們沒有給日志歸檔設置自動回收,FRA 空間耗盡,導致 redo 無法歸檔,實例異常終止。
五、預防建議
項目 | 建議配置 |
FRA 空間 | 不小于數據庫大小的 2 倍 |
RMAN 策略 |
|
定期清理 | 使用 |