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';
系統已更改。