問題描述:有一個資料庫起不來了,根據層層排查,是因為歸檔設定在了閃回區,檔案的大小已經超出了閃回區限制。最後直接給資料庫拖掛
環境:windows server2012 , oracle 19c,單機
1.sqlplus 連線到空閒例項,發現資料庫已經掛掉,直接startup 資料,只能到mount狀態
2.hang住一會開始報錯
ORA-16038: log 2 sequence# 1325 cannot be archived ORA-19809: limit exceeded for recovery files ORA-00312: online log 2 thread 1: 'O:\ORACLE_DATA\SYNVNACDB\REDOo2.LOG' ORA-00312: online log 2 thread 1: 'F:\FAST_RECOVERY_AREA\SYNVNACDB\REDOo2.LOG'
3. 日誌組log 2 ,序列號為sequence #1325 號日誌不能被歸檔,後面是有查到原因是因為歸檔在閃回區,這裡無法被歸檔,前期我們還沒有查到是這個原因,只能清理日誌組,來處理當前不能被歸檔的日誌
這個時候資料庫是可以啟動到mount狀態的,在mount狀態下操作
SQL> startup mount;
檢視v$log日誌檢視
SQL> select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 1327 YES INACTIVE
2 1325 NO CURRENT
3 1326 YES INACTIVE
可以知道,該組1是非當前狀態,而且已經歸檔。
3、先清理沒有被歸檔的日誌,這裡清理了有問題的log2,所幸清理完資料庫可以open了
SQL>alter database clear unarchived logfile group 2;
如果不成功過,用CLEAR命令重建該日誌檔案
SQL>alter database clear logfile group 3;
4、開啟資料庫,重新備份資料庫
SQL>alter database open;
5、重啟資料庫來驗證是否存在問題
SQL>shutdown immediate
SQL>startup
4.重啟完資料庫可以正常起來了,但是在切換歸檔的時候又出現了報錯,切換歸檔時一直卡著,到後臺看alert日誌發現瞭如下報錯
ORA-19815: WARNING: db_recovery_file_dest_size of 73014444032 bytes is 100.00% used
發現其最終原因還是歸檔設定在了閃回區內,閃回區目前大小為70G,調整方法為可以在閃回區內刪除一下舊的歸檔,或者線上擴大一下閃回區的大小,我們碟符的空間充足,兩種方式同步進行
解決方式:
alter system set db_recovery_file_dest_size=100G scope=both;
手動刪除了一些歸檔檔案,去切換歸檔還是沒有成功,應該是資料庫記憶體還是認為空間不夠。線上擴充閃回,擴充完成,歸檔就立馬切換成功
5.全部做完一定要做一次資料庫的全備,如果歸檔設定在閃回區內,一定要加強對閃回區的空間監控。
檢視閃回區的使用情況
select file_type, percent_space_used as used,percent_space_reclaimable as reclaimable, number_of_files as "number" from v$flash_recovery_area_usage;