1. 程式人生 > >Oracle歸檔日誌滿了怎麼辦

Oracle歸檔日誌滿了怎麼辦

歸檔滿了

如果伺服器進不去檢視pfile檔案,在pfile檔案裡面有歸檔除存放的路徑

*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'

如果伺服器本地可以進去,就可以檢視歸檔目錄

SQL> archive log list;
Database log mode        Archive Mode
Automatic archival        Enabled
Archive destination        USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     35
Next log sequence to archive   38
Current log sequence        38

SQL> show parameter DB_RECOVERY_FILE_DEST;


NAME      TYPE        VALUE
------------------------------------ --------------------------------- ------------------------------
db_recovery_file_dest      string        /u01/app/oracle/flash_recovery
       _area
db_recovery_file_dest_size      big integer        10G
SQL> 
SQL> alter system set db_recovery_file_dest='/u01/app/oracle/flash_recovery_area';

更改完之後所有的自動備份路徑全部都會儲存在此目錄。

在安裝資料庫時會詢問是啟動快速恢復區(/u01/app/oracle/flash_recovery_area;),如果不設定的話預設在(/u01/app/oracle/product/11.2.0/db_1/dbs/)下。所以需要進行DB_RECOVERY_FILE_DEST設定。

解決方法:

如果不自己設定歸檔目錄,一般和閃回區在一起,無法登入sqlplus可以先去閃回區看看,如果是在那裡,可以刪掉些很久以前的歸檔,然後就能暫時進入資料庫和rman了

然後可以在rman裡面刪除過期歸檔。

進入rman

crosscheck copy of archivelog all;

crosscheck archivelog all;

resync catalog;

delete force obsolete;

delete expired archivelog all;

通過crosscheck archivelog all;可以看到備份的歸檔

RMAN> crosscheck archivelog all;


using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=42 device type=DISK
validation succeeded for archived log
archived log file name=/u01/oracle/fast_recovery_area/ORADB/archivelog/2017_12_21/o1_mf_1_7_f3qkhw2r_.arc RECID=5 STAMP=963297151
validation succeeded for archived log
archived log file name=/u01/oracle/fast_recovery_area/ORADB/archivelog/2017_12_21/o1_mf_1_8_f3ql8mtr_.arc RECID=6 STAMP=963297940
validation succeeded for archived log
archived log file name=/u01/oracle/fast_recovery_area/ORADB/archivelog/2017_12_27/o1_mf_1_9_f46pr89q_.arc RECID=7 STAMP=963794061
validation succeeded for archived log
archived log file name=/u01/oracle/fast_recovery_area/ORADB/archivelog/2017_12_27/o1_mf_1_10_f47lh3qm_.arc RECID=8 STAMP=963822437
Crosschecked 4 objects

因為db_recovery_file_dest_size      big integer        10G     因為只有10G,就可以刪除過期的歸檔。

如果上面刪除歸檔無效的話,可以:

DELETE noprompt ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

這個命令是刪除七天以前的所有歸檔,然後就可以去歸檔目錄刪掉命令沒刪掉的7天前的所有歸檔了。

如果不想刪歸檔,歸檔在閃回區,閃回區本身所在磁碟空間還有多的話,可以修改閃回區大小(

查看回閃恢復區的大小和存放目標:>show parameter db_recovery_file_dest

修改回閃恢復區的大小>alter system set db_recovery_file_dest_size = 15G(可以根據實際情況調整大小)

也可以通過修改歸檔路徑  alter system set log_archive_dest_1='location=D:\arch';設定到一個空間比較大的地方

補充

SQL> archive log list

資料庫日誌模式             非存檔模式

自動存檔             禁用

存檔終點            USE_DB_RECOVERY_FILE_DEST

最早的聯機日誌序列     321

當前日誌序列           326。

上面的存檔終點USE_DB_RECOVERY_FILE_DEST預設就是閃回恢復區($ORACLE_BASE/flash_recovery_area),可以通過下面的SQL檢視閃回恢復區的資訊。

SQL> show parameter db_recover

NAME                        TYPE         VALUE

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

db_recovery_file_dest       string      D:\oracle\flash_recovery_area

db_recovery_file_dest_size  big integer   2G

通過上面的SQL結果可以看到,閃回恢復區為D:\oracle\flash_recovery_area,大小為2G,也可以通過查詢v$recovery_file_dest檢視檢視閃回恢復的限制資訊。

SQL> select name,SPACE_LIMIT,SPACE_USED from v$recovery_file_dest;

NAME                           SPACE_LIMIT SPACE_USED

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

D:\oracle\flash_recovery_area   2147483648   21225472

預設情況下,歸檔日誌會存放到閃回恢復區(D:\oracle\flash_recovery_area)內,如果閃回恢復區已經使用到2G,歸檔日誌就有可能無法繼續歸檔,資料庫夯住,通常的解決方法是增大閃回恢復區,可以用以下SQL實現。

SQL> alter system set db_recovery_file_dest_size=3G;

系統已更改。

即使用這種方法解決的當前燃眉之急,雖然閃回恢復區ORACLE會自動管理,如果閃回恢復區空間不足就會清理掉沒用的資料,但是如果備份策略不是很完善,資料庫非常繁忙的情況下,還有可能遇到這種情況,通常需要修改歸檔日誌的路徑,將歸檔日誌放到其他不受限制的路徑下來解決這個問題,可通過下面的SQL來修改歸檔日誌的存放路徑。

SQL> alter system set log_archive_dest_1='location=D:\arch';

系統已更改。