維護(hù)筆記:Oracle 啟動(dòng)失敗 ORA-03113 + ORA-19809 實(shí)戰(zhàn)排錯(cuò)全記錄
今天分享一次Oracle啟動(dòng)故障 ——Oracle 12c 數(shù)據(jù)庫(kù)啟動(dòng)失敗,報(bào) ORA-03113 和 ORA-19809 的處理實(shí)戰(zhàn)。
一、故障現(xiàn)象
在嘗試啟動(dòng) Oracle 數(shù)據(jù)庫(kù)時(shí),提示如下錯(cuò)誤:
同時(shí),后臺(tái)日志 alert_rac12c.log 顯示如下內(nèi)容:
tail -100 /data/u01/app/oracle/diag/rdbms/rac12c/rac12c/trace/alert_rac12c.log
二、問(wèn)題分析
錯(cuò)誤分析關(guān)鍵點(diǎn)如下:
- ORA-19815:FRA(Fast Recovery Area)已滿(mǎn);
- ORA-19809:無(wú)法創(chuàng)建新的歸檔日志;
- ORA-16038:當(dāng)前 redo log 無(wú)法歸檔;
- ORA-03113:客戶(hù)端與實(shí)例失聯(lián)(其實(shí)是 Oracle 主動(dòng)終止實(shí)例);
這是一種典型的因 FRA 空間不足導(dǎo)致 redo 無(wú)法歸檔,最終實(shí)例崩潰 的場(chǎng)景。
三、解決步驟
1. 清理日志
我們手動(dòng)刪除了一部分歸檔日志文件(這一步要謹(jǐn)慎,可以先備份):
rm -rf /data/u01/app/oracle/fast_recovery_area/rac12c/RAC12C/archivelog/*
但僅刪除物理文件還不夠,Oracle 控制文件中仍然記錄了這些日志。
2. 使用 RMAN 進(jìn)行同步
rman target /
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;
這一操作可以同步控制文件和實(shí)際文件狀態(tài),釋放空間并消除假歸檔記錄。但是執(zhí)行失敗。
第二步嘗試仍失敗。
重新執(zhí)行 startup 后仍然失敗,說(shuō)明當(dāng)前 redo 日志已經(jīng)“卡死”,無(wú)法被歸檔,也無(wú)法被覆蓋。
3. 強(qiáng)制切換至非歸檔模式救急
為了解除當(dāng)前 redo log 的歸檔限制,我們使用以下“強(qiáng)制解鎖”方案:
SQL> startup mount;
SQL> alter database noarchivelog;
SQL> alter database open;
這一步成功打開(kāi)數(shù)據(jù)庫(kù)。
隨后為了恢復(fù)正常備份策略,我們重新切回歸檔模式:
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
至此,問(wèn)題成功解決。
四、總結(jié)與建議
故障根因:
主要問(wèn)題是我們沒(méi)有給日志歸檔設(shè)置自動(dòng)回收,F(xiàn)RA 空間耗盡,導(dǎo)致 redo 無(wú)法歸檔,實(shí)例異常終止。
五、預(yù)防建議
項(xiàng)目 | 建議配置 |
FRA 空間 | 不小于數(shù)據(jù)庫(kù)大小的 2 倍 |
RMAN 策略 |
|
定期清理 | 使用 |