Oracle

清理閃回恢復區歸檔日誌

  • September 28, 2019

我在 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 來備份和刪除它們。

如果您不需要這些文件的任何備份,只需刪除它們即可。

引用自:https://dba.stackexchange.com/questions/198883