天天看點

ora-16038:日志無法歸檔 ora-00312 ORA-19809: limit exceeded for recovery files ora-19804

ORA-03113:通信通道的檔案結尾 程序ID4781 

檢視alter.log 

發現提示聯機日志檔案有問題 

網上的方法看不是很懂,看到有很多錯誤 

ora-16038:日志無法歸檔 

ora-00312 

ORA-19809: limit exceeded for recovery files 

ora-19804:無法回收。。。磁盤空間 

原來Oracle11g在預設情況下,歸檔日志是儲存在閃存恢複區的,并且閃存恢複區的大小預設是2g,空間滿了之後就沒有辦法再歸檔了。

啟動資料庫到mount狀态,statup mount 更改recovery files空間大小,然後rman,删除過期的備份,指定備份政策,定期删除備份。

SQL> show parameter db_recovery_file_dest 

NAME                                TYPE        VALUE 

------------------------------------ ----------- ------------------------------ 

db_recovery_file_dest                string      d:\app\qiao\flash_recovery 

                                                  _area 

db_recovery_file_dest_size          big integer 2G 

解決辦法,有3種: 

1.加大閃存恢複區。 

ALTER SYSTEM SET db_recovery_file_dest_size=50g scope=both;

2.歸檔路徑設定到其它地方。 

alter system set log_archive_dest = 其他路徑

3.删除或轉移歸檔日志。 

打開RMAN 

rman target / 

RMAN>crosscheck archivelog all;  -- 運作這個指令可以把無效的expired的archivelog标出來。 

RMAN>delete expired archivelog all;  -- 直接全部删除過期的歸檔日志。 

RMAN>delete noprompt archivelog until time "sysdate -3";  --删除系統目前日期3天前的歸檔,不經過提示、直接删除。或(DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7')

指定retention的政策(RMAN 的備份保留政策),使得archivelog不至于這樣增加 

指令格式: 

configure retention policy clear ---------------備份保留政策使用預設值 

configure retention policy to none------------不采用任何備份保留政策 

configure retention policy to recover window of integer days------------基于時間的備份保留政策,保留幾天前的備份檔案 

configure retention policy to redundancy integer-------基于備援備份的備份保留政策,對備份檔案保留幾個備援備份 

REPORT OBSOLETE指令檢視目前處于廢棄狀态的備份檔案 

DELETE OBSOLET 指令可立刻删除備份保留政策 不需要的檔案(廢棄檔案)。

RMAN>configure retention policy to recovery window of 7 days;  保留七天内的所有備份。 

RMAN>configure retention policy to redundancy 3;                為每個資料檔案保留3個備援備份。 

SQL>alter system db_recovery_file_dest_size=4G scope=both;

當然我們可以寫一個簡單的shell腳本,對歸檔日志進行管理

#!/bin/bash 

#confirm oracle runing environment 

. /home/oracle/.bash_profile 

ps -ef |grep dbw0_$ORACLE_SID | grep -v grep >> /dev/null 

if [ $? -eq 0 ];then 

    rman target / log=/orabackup/delarch`date +%Y%m%d`.log  <<EOF 

    crosscheck archivelog all; 

    delete noprompt  expired archivelog all; 

    backup as compressed backupset archivelog all format '/orabackup/cron-archlog_%U_%d_%T_%s_%p' delete input; 

exit; 

EOF 

fi

本文轉自楊海龍的部落格部落格51CTO部落格,原文連結http://blog.51cto.com/7218743/1610391如需轉載請自行聯系原作者

IT達仁