清理閃回恢復區歸檔日誌
我在 RHEL 伺服器上有一個 Oracle 11g。我的 /oradata 卷達到 95% 的磁碟使用率:
[ora11g@bocc7-1-qrec-01 ~]$ df -h /dev/sdb1 689G 571G 84G 95% /oradata
閃回恢復區 (FRA) 是較大的文件夾:
[ora11g@bocc7-1-qrec-01 ~]$ du -skh /oradata/* | sort -h 50G /oradata/qtest 175G /oradata/qrec 346G /oradata/flash_recovery_area
在 FRA 內部,我可以看到歸檔日誌佔用大約 230Gb:
[ora11g@bocc7-1-qrec-01 ~]$ du -skh /oradata/flash_recovery_area/qrec/* 232G /oradata/flash_recovery_area/qrec/archivelog 7.9G /oradata/flash_recovery_area/qrec/onlinelog
我檢查了
v$recovery_file_dest
表格,我SPACE_LIMIT
的是 20Gb 而我SPACE_USED
的只有 10Mb!Connected to: Oracle Database 11g Release 11.2.0.3.0 - 64bit Production qrec> SELECT * FROM V$RECOVERY_FILE_DEST; NAME -------------------------------------------------------------------------------- SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES ----------- ---------- ----------------- --------------- /oradata/flash_recovery_area 2.1475E+10 10984448 0 1
所以,我推斷它與這張表無關。
現在我正在檢查 RMAN :
RMAN> crosscheck archivelog all; using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=259 device type=DISK validation succeeded for archived log archived log file name=/oradata/flash_recovery_area/qrec/archivelog/log_1_1056_965658004.arc RECID=1057 STAMP=969146207 validation succeeded for archived log archived log file name=/oradata/flash_recovery_area/qrec/archivelog/log_1_1057_965658004.arc RECID=1058 STAMP=969149808 validation succeeded for archived log archived log file name=/oradata/flash_recovery_area/qrec/archivelog/log_1_1058_965658004.arc RECID=1059 STAMP=969153409 validation succeeded for archived log archived log file name=/oradata/flash_recovery_area/qrec/archivelog/log_1_1059_965658004.arc RECID=1060 STAMP=969157010 validation succeeded for archived log archived log file name=/oradata/flash_recovery_area/qrec/archivelog/log_1_1060_965658004.arc RECID=1061 STAMP=969160610 validation succeeded for archived log archived log file name=/oradata/flash_recovery_area/qrec/archivelog/log_1_1061_965658004.arc RECID=1062 STAMP=969164210 validation succeeded for archived log archived log file name=/oradata/flash_recovery_area/qrec/archivelog/log_1_1062_965658004.arc RECID=1063 STAMP=969167813 validation succeeded for archived log archived log file name=/oradata/flash_recovery_area/qrec/archivelog/log_1_1063_965658004.arc RECID=1064 STAMP=969171413 validation succeeded for archived log archived log file name=/oradata/flash_recovery_area/qrec/archivelog/log_1_1064_965658004.arc RECID=1065 STAMP=969175014 validation succeeded for archived log archived log file name=/oradata/flash_recovery_area/qrec/archivelog/log_1_1065_965658004.arc RECID=1066 STAMP=969178614 validation succeeded for archived log archived log file name=/oradata/flash_recovery_area/qrec/archivelog/log_1_1066_965658004.arc RECID=1067 STAMP=969182214 validation succeeded for archived log archived log file name=/oradata/flash_recovery_area/qrec/archivelog/log_1_1067_965658004.arc RECID=1068 STAMP=969185814 Crosschecked 12 objects RMAN> delete noprompt expired archivelog all; released channel: ORA_DISK_1 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=259 device type=DISK specification does not match any archived log in the repository
所以第一個問題是:為什麼 RMAN 在這裡看不到我的2752 ARC 文件:
[ora11g@bocc7-1-qrec-01 ~]$ ls -1 /oradata/flash_recovery_area/qrec/archivelog | wc -l 2752
第二個問題是:我應該怎麼做才能通過刪除舊的歸檔日誌文件來釋放一些磁碟空間?(大的都1歲多了!!):
[ora11g@bocc7-1-qrec-01 archivelog]$ find -type f -printf '%T+ %p\n' | sort | head -n 1 2017-02-22+16:54:41.0000000000 ./log_2_1_936636608.arc
**0)**您已配置 FRA,但它不是您的歸檔日誌目標。
設置
log_archive_dest_N
到 FRA 目錄與實際將 FRA 設置為歸檔日誌目標不同。您最有可能擁有的配置:
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string /oradata/flash_recovery_area db_recovery_file_dest_size big integer 20G log_archive_dest_1 string location=/oradata/flash_recovery_area/qrec/archivelog
正確的配置是:
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string /oradata/flash_recovery_area db_recovery_file_dest_size big integer 20G log_archive_dest_1 string location=use_db_recovery_file_dest
歸檔日誌文件的命名也證實了這一點,因為 FRA 中的歸檔日誌使用 OMF 格式,並且它們實際上每天都放置在單獨的目錄中(根據日期命名)。
所以代替這個:
/oradata/flash_recovery_area/qrec/archivelog/log_1_1056_965658004.arc
您的歸檔日誌文件的名稱將是:
/oradata/flash_recovery_area/qrec/archivelog/2018_02_22/o1_mf_....arc
**1)**這通常是由於
control_file_record_keep_time
參數配置不當以及缺少備份方法造成的。預設值 7 表示(歸檔日誌或備份的)記錄保留 7 天,之後可以重複使用。如果您 7 天不備份/刪除歸檔日誌,數據庫可能會重用指向它們的控製文件記錄,基本上數據庫會“忘記”這些條目並將它們留在文件系統中。您應該定期備份和刪除您的歸檔日誌,並
control_file_record_keep_time
根據您的備份策略進行適當的設置。如果您使用使用者管理的備份而不是 RMAN,則需要手動刪除這些日誌。RMAN 可以在單個命令中備份和刪除這些文件。
**2)**取決於您的備份要求。
如果您使用使用者管理的備份,請確保您有這些文件的備份,然後刪除它們。
如果你使用 RMAN,你可以使用
catalog start with '/oradata/flash_recovery_area/qrec/archivelog/';
, 然後使用 RMAN 來備份和刪除它們。如果您不需要這些文件的任何備份,只需刪除它們即可。