最近使用oracle時突然發現如下錯誤
ORA-16038: 日誌 2 序列號 67 無法歸檔
ORA-19809: 超出了恢復文件數的限制
ORA-00312: 聯機日誌 2 線程 1:
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'
導致oracle無法啓動,上網查了下原因,發現
select r.SPACE_USED/r.SPACE_LIMIT from v$recovery_file_dest r;
恢復文件空間不夠了,網上提供的解決方法:
1.將歸檔設置到其他目錄,修改alter System set log_archive_dest;
2.轉移或者刪除閃回恢復區裏的歸檔日誌;
3.增大閃回恢復區,alter System set db_recovery_file_dest_size=5G;
4.手動將未歸檔的Redo日誌進行歸檔。執行以下命令手動將未歸檔的Redo日誌進行歸檔
alter system archive log all to '/archive1'
to參數指定的位置可以是之前的歸檔位置,也可以是其他位置,oracle操作系統用戶在這個位置有讀寫的權限。執行完這個命令之後所有未歸檔的日誌都被歸檔,之後很順利就執行了alter database open命令打開了數據庫。
我選擇使用第二方法來解決我的oracle問題。
首先使用刪除閃回恢復區裏的歸檔日誌,以便讓oracle儘快正常工作,
SQL> startup force
ORACLE 例程已經啓動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 117443460 bytes
Database Buffers 486539264 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
ORA-16038: 日誌 3 序列號 1807 無法歸檔
ORA-19809: 超出了恢復文件數的限制
ORA-00312: 聯機日誌 3 線程 1: 'E:\ORADATA\MDC\REDO03.LOG'
查看v$log
SQL> select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARCHIV STATUS
---------- ---------- ------ --------------------------------
1 1808 NO INACTIVE
2 1807 NO INACTIVE
3 1809 NO CURRENT
看到組2是非當前狀態,並且沒有歸檔,使用參考文章中的處理非歸檔文件的方法.
SQL> alter database clear unarchived logfile group 2;
數據庫已更改。
啓動數據庫,這個啓動成功.
SQL> alter database open;
數據庫已更改。
爲了防止歸檔日誌再次佔滿空間,需要定期清理歸檔日誌。
在rman下執行crosscheck archivelog all;檢查所有的歸檔日誌
delete noprompt archivelog all backed up 1 times to device type disk;將已經備份過一次的歸檔日誌全部清除。
可以在備份腳本的最後加上這幾行代碼,對歸檔日誌進行清理,以徹底解決這個問題。