1. 程式人生 > >ORA-19809: 超出了恢復文件數的限制故障處理實例

ORA-19809: 超出了恢復文件數的限制故障處理實例

error 模式 ext mounted erro lob right cover 數據

轉自原文 ORA-19809: 超出了恢復文件數的限制故障處理實例

SQL> startup
ORACLE instance started.

Total System Global Area 263049216 bytes
Fixed Size 2212448 bytes
Variable Size 234884512 bytes
Database Buffers 20971520 bytes
Redo Buffers 4980736 bytes
Database mounted.

ORA-03113: 通信通道的文件結尾
進程 ID: 5801
會話 ID: 1 序列號: 5

[oracle@web trace]$ tail -f alert_orcl.log
ORA-19809: 超出了恢復文件數的限制
ORA-19804: 無法回收 44062720 字節磁盤空間 (從 4070572032 限制中)
ARCH: Error 19809 Creating archive log file to ‘/opt/oracle/flash_recovery_area/ORCL/archivelog/2011_11_04/o1_mf_1_482_%u_.arc‘
Errors in file /opt/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_6141.trc:

ORA-16038: 日誌 2 sequence# 482 無法歸檔
ORA-19809: 超出了恢復文件數的限制
ORA-00312: 聯機日誌 2 線程 1: ‘/opt/oracle/oradata/orcl/redo02.log‘
USER (ospid: 6141): terminating the instance due to error 16038
Fri Nov 04 15:28:21 2011
Instance terminated by USER, pid = 6141
Fri Nov 04 15:30:35 2011

通過這裏的錯誤信息,可以看到是歸檔歸檔不了了,馬上查看歸檔的路徑
SQL> archive log list;

數據庫日誌模式 存檔模式
自動存檔 啟用
存檔終點 USE_DB_RECOVERY_FILE_DEST
最早的聯機日誌序列 23
下一個存檔日誌序列 25
當前日誌序列 25

用的是DB_RECOVERY_FILE_DEST的路徑了。估計又是以前遇到過的錯誤的。
Oracle官方的有關19809的信息
ORA-19809: limit exceeded for recovery files
Cause: The limit for recovery files specified by the DB_RECOVERY_FILE_DEST_SIZE was exceeded.
Action: The error is accompanied by 19804. See message 19804 for further details.

ORA-19804: cannot reclaim string bytes disk space from string limit
Cause: Oracle cannot reclaim disk space of specified bytes from the DB_RECOVERY_FILE_DEST_SIZE limit.
Action: There are five possible solutions:
1) Take frequent backup of recovery area using RMAN.
2) Consider changing RMAN retention policy.
3) Consider changing RMAN archivelog deletion policy.
4) Add disk space and increase DB_RECOVERY_FILE_DEST_SIZE.
5) Delete files from recovery area using RMAN.

基本上的原因是,db_recovery_file_desc有size限制,默認是2G,如果用戶沒有設置過的話,應該就是這裏的歸檔的文件超過了這個大小,而導致歸檔失敗了,

先查看一下情況吧

SQL> archive log list;

數據庫日誌模式 存檔模式

自動存檔 啟用

存檔終點 USE_DB_RECOVERY_FILE_DEST

最早的聯機日誌序列 23

下一個存檔日誌序列 25

當前日誌序列 25

SQL> select * from v$recovery_file_dest;

NAME
--------------------------------------------------------------------------------
SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
----------- ---------- ----------------- ---------------
/opt/oracle/flash_recovery_area
4070572032 4068022784 0 100

這裏已經把所有的db_recovery_file_dest的容量都占完了。

解決方法:刪除多余的歸檔文件。然後設置較大的db_recovery_file_dest_size。

刪除多余的歸檔文件

打開RMAN

rman target /

RMAN>crosscheck archivelog all; -- 運行這個命令可以把無效的expired的archivelog標出來。

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

RMAN>delete noprompt archivelog until time "sysdate -3"; -- 也可以直接用一個指定的日期來刪除。

重新打開數據庫:

SQL> alter database open;

Database altered.

action
指定retention的策略,使得archivelog不至於這樣增加

RMAN>configure retention policy to recovery window of 7 days;

RMAN>configure retention policy to redundancy 3;

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

把archivelog_dest指定到沒有限制的地方

SQL>alter system log_archive_dest=‘/home/oracle‘;


查看修改ORACLE10G歸檔日誌空間的限制

在ORACLE10G中,默認的歸檔路徑為$ORACLE_BASE/flash_recovery_area。對於這個路徑,ORACLE有一個限制,就是默認只能有2G的空間給歸檔日誌使用,可以使用下面兩個SQL語句去查看它的限制:
1. select * from v$recovery_file_dest;
2. show parameter db_recovery_file_dest(這個更友好直觀一些)
當歸檔日誌數量大於2G時,那麽就會由於沒有更多的空間去容納更多的歸檔日誌會報無法繼續歸檔的錯誤。
如:“RA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 10017792 bytes disk space from 2147483648 limit
ARC0: Error 19809 Creating archive log file to ‘/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2007_04_30/o1_mf_1_220_0_.arc‘ ”這時我們可以修改它的默認限制,比如說將它增加到5G或更多,也可以將歸檔路徑重新置到別的路徑,就不會有這個限制了。
更改限制語句如下:
alter system set db_recovery_file_dest_size=5368709102 (這裏為5G 5x1024x1024x1024=5G)
alter system set db_recovery_file_dest_size=10737418240

ORA-19809: 超出了恢復文件數的限制故障處理實例