ORA-00257歸檔日志寫滿的解決方法


背景:

在前一篇博客中我們提到了如何啟動或關閉oracle的歸檔(ARCHIVELOG)模式,在我成功設定數據庫為歸檔模式以后, 第二天再次嘗試連接數據庫,報錯:ORA-00257。在網上找到了一圈資料,有些是說歸檔日志寫滿,刪除歸檔日志。有些是說閃回日志寫滿,關閉閃回日志。主要參考文獻有以下:

 
刪除歸檔日志文件的方法:  http://www.blogjava.net/kuuyee/archive/2013/05/15/399287.html
惜分飛大大的博客: http://www.xifenfei.com/655.html

 

首先我認為是閃回日志寫滿,但是查了數據庫以后發現我並沒可有開啟閃回日志,那么就是歸檔日志文件寫滿的緣故了。使用以下幾個命令可以看出當前歸檔日志文件的使用情況:
select * from v$recovery_file_dest;
select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
select * from v$flash_recovery_area_usage;
select * from v$version;

歸檔日志文件目錄、最大值(已經設定為20G)、當前使用值

可以看到ARCHIVED LOG的使用率是3.84%,這是因為我已經刪除掉歸檔日志文件了。在沒有刪除歸檔日志之前是99.46這樣打的數字,表明我們的歸檔日志已經使用了大部分的空間。

所以進入rman程序刪除歸檔日志

rman target sys/pass@prjdb
crosscheck archivelog all;
delete archivelog until time 'sysdate'; --刪除所有日志
delete expired archivelog all;--刪除過期日志

深層分析

后來我想這樣手動刪除也不是個辦法總得讓系統自動刪除。后來就做了數據庫備份腳本。執行的備份策略如下:

  1. 每周執行增量0的備份,順便備份歸檔日志,並且刪除過期歸檔日志
  2. 每天執行增量1的備份,順被備份歸檔日志,並且刪除過期歸檔日志。

因為我沒有設定歸檔日志的有效期,所以一檔完成增量備份,那么之前的所有歸檔日志都會被刪除,相當於只保留一天的歸檔日志。在執行這個備份策略以后,發現還是會出現ORA-00257這樣的錯誤。這個時候已經不是簡單刪除歸檔日志的問題了,因為當前的歸檔日志目錄連一天的歸檔日志都發布下。所以考慮擴大歸檔日志目錄,參考:http://langzhiwang888.iteye.com/blog/1675033

SQL> alter system set db_recovery_file_dest_size=21474836480;---設置使用空間大小(20*1024*1024*1024),20GB
System altered
SQL> show parameter db_recovery_file_dest;---查看歸檔日志路徑限額

此時歸檔日志目錄最大值就變成了20G。按照這樣的設定再次重啟oralce。

實例

最近在進行歷史數據導入的工作。要往我的數據庫當中導入2G的歷史記錄,插入記錄有幾百萬條。此時數據庫處於歸檔模式,對於每一個插入操作都會記錄到歸檔日志當中去。在執行這個歷史導入操作后3個小時,歸檔日志就寫滿了。此時我的問題就來了,如果歸檔日志寫滿的,我們的歷史導入操作還能正常進行嗎?是否還能往數據庫當中insert數據。在跟公司DBA請教一番以后得到答復,如果處於歸檔模式,並且歸檔日志寫滿,那么我的歷史數據導入操作會block中,直到我清空歸檔日志以后導入工作才能再進行。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM