如何配置 RMAN 以自動刪除 crontrol 文件?
我在 ODA(Oracle 數據庫機,執行 linux)上使用 Oracle 版本 12.2.0.1.0 標準版。我的實例“xyz”正在歸檔日誌模式下執行。RMAN 執行備份,不必要的數據文件會自動從備份集中刪除。
[oracle@oda ~]$ rman TARGET / Recovery Manager: Release 12.2.0.1.0 - Production on Fr Aug 31 16:50:05 2018 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. Mit Zieldatenbank verbunden: XYZ (DBID=4079461799) RMAN> show all; Kontrolldatei der Zieldatenbank wird anstelle des Recovery-Katalogs verwendet RMAN-Konfigurationsparameter für Datenbank mit db_unique_name XYZ sind: CONFIGURE RETENTION POLICY TO REDUNDANCY 3; CONFIGURE BACKUP OPTIMIZATION OFF; # default CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE CONTROLFILE AUTOBACKUP ON; # default CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/mnt/backup/rman/xyz/%F'; CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/mnt/backup/rman/xyz/%U'; CONFIGURE MAXSETSIZE TO UNLIMITED; # default CONFIGURE ENCRYPTION FOR DATABASE OFF; # default CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u03/app/oracle/fast_recovery_area/XYZ/controlfile/snapcf_xyz.f';
當我檢查目錄時,一切看起來都很好——除了不斷堆積的控製文件
[oracle@oda1 xyz]$ pwd /mnt/backup/rman/xyz [oracle@oda1 xyz]$ l total 4144832 drwxr-xr-x 2 oracle oinstall 4096 Aug 31 11:00 . drwxr-xr-x 7 oracle oinstall 4096 Jul 4 14:38 .. -rw-r----- 1 oracle asmadmin 1072447488 Aug 29 01:02 6ntbnscr_1_1 -rw-r----- 1 oracle asmadmin 943104 Aug 29 01:02 6otbnshm_1_1 -rw-r----- 1 oracle asmadmin 18115072 Aug 29 11:00 6qtbovhi_1_1 -rw-r----- 1 oracle asmadmin 62260224 Aug 30 01:00 6stbqgoj_1_1 -rw-r----- 1 oracle asmadmin 1072734208 Aug 30 01:05 6ttbqgq1_1_1 -rw-r----- 1 oracle asmadmin 1159680 Aug 30 01:05 6utbqh2k_1_1 -rw-r----- 1 oracle asmadmin 10599424 Aug 30 11:00 70tbrjtj_1_1 -rw-r----- 1 oracle asmadmin 42828288 Aug 31 01:00 72tbt54i_1_1 -rw-r----- 1 oracle asmadmin 1073242112 Aug 31 01:02 73tbt54q_1_1 -rw-r----- 1 oracle asmadmin 2316288 Aug 31 01:02 74tbt59l_1_1 -rw-r----- 1 oracle asmadmin 17406976 Aug 31 11:00 76tbu89j_1_1 -rw-r----- 1 oracle asmadmin 10698752 Jun 20 11:11 c-4079461799-20180620-00 -rw-r----- 1 oracle asmadmin 10698752 Jun 20 11:25 c-4079461799-20180620-01 -rw-r----- 1 oracle asmadmin 10698752 Jun 20 13:03 c-4079461799-20180620-02 -rw-r----- 1 oracle asmadmin 10698752 Jun 20 13:48 c-4079461799-20180620-03 -rw-r----- 1 oracle asmadmin 10698752 Jun 20 14:03 c-4079461799-20180620-04 -rw-r----- 1 oracle asmadmin 10698752 Jul 16 10:22 c-4079461799-20180716-00 -rw-r----- 1 oracle asmadmin 10698752 Jul 26 17:32 c-4079461799-20180726-00 -rw-r----- 1 oracle asmadmin 10698752 Jul 27 01:02 c-4079461799-20180727-00 -rw-r----- 1 oracle asmadmin 10698752 Jul 27 11:00 c-4079461799-20180727-01 ..
以“c”開頭的文件是控製文件。
問題:我該怎麼做才能自動刪除這些文件?
感謝您的見解!
控製文件和備份集的RMAN 保留策略定義如下:
(強調我的)
[CONFIGURE]..
這是啟動參數配置的命令
... RETENTION POLICY ...
為 RMAN 標記為過時的備份集和副本指定持久、持續的策略,即不需要且符合刪除條件。
隨著時間的推移,RMAN 會根據保留策略中指定的標準將備份集和副本標記為過時。當需要空間時,RMAN 會自動刪除閃回恢復區中過時的備份集和副本。RMAN 不會自動刪除閃回恢復區之外的過時文件:您必須手動執行
DELETE OBSOLETE
才能刪除它們。... TO REDUNDANCY integer
指定 RMAN 應保留
integer
每個數據文件和控製文件的完整或 0 級備份。預設保留策略設置為REDUNDANCY 1
。如果存在多個
integer
數據文件或控製文件的完整或 0 級備份,則 RMAN 會將這些額外文件標記為過時。然後,RMAN 確定最舊的保留備份,並將所有歸檔重做日誌和比此備份更早的日誌備份標記為過時。該DELETE OBSOLETE
命令刪除過時的數據文件備份(完整或增量)、控製文件備份和歸檔日誌備份或映像副本。將上述應用到您的環境中
在您的情況下,您設置了以下內容:
CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
意思是:
保留最多三個版本的所有完整和 0 級備份$$ back $$
將所有存檔日誌也保留在這些備份之間
保留每種備份類型的所有控製文件備份
- 完整和 0 級備份
- 歸檔日誌備份
- 觸發控製文件的任何自動備份時
您可能會注意到,您基本上可以擁有與以下總和相同數量的備份控製文件:
- 完整備份文件
- 0級備份文件
- 歸檔日誌備份文件
……甚至更多。(閱讀:Oracle 12c – 自動控製文件備份了解更多詳細資訊)
如果您沒有備份到 Oracle 實例的閃回恢復區,那麼您必須在備份數據庫後通過發出以下命令手動刪除這些文件:
DELETE OBSOLETE;
您也可以通過首先執行來測試它:
REPORT OBSOLETE;
…檢查目錄中的控製文件是否確實已過時,然後使用我在此之前提到的命令在 RMAN 中手動刪除它們。
概括
您可能會看到以下問題:
- 一切正常,實例剛剛創建了很多自動備份的控製文件。
- 控製文件在 FRE 之外,必須手動刪除
- 你遇到了一個錯誤(…閱讀下文)。
因為我們不知道您的確切備份腳本和其他設置,所以很難判斷您遇到的是哪一點,但您有幾個很好的起點。
明顯的錯誤
在某些情況下(顯然)控製文件永遠不會被標記為過時:
已送出錯誤並提供了修復程序,但似乎並非在所有情況下都有效。
您可能必須手動刪除 RMAN 中的控製文件備份。
DELETE COPY OF CONTROLFILE LIKE '/mnt/backup/rman/xyz/<part_name_of_control_file>%';
回答你的問題
我該怎麼做才能自動刪除這些文件?
抱歉,但這取決於您遇到的情況,可能會有所不同:
- 會自動發生
- 可以用
REPORT OBSOLETE
and刪除DELETE OBSOLETE
- 只會手動發生
DELETE COPY OF CONTROLFILE LIKE ...
- 修復錯誤後可能會再次工作
參考
- 刪除 RMAN 備份和歸檔重做日誌(Oracle Docs)
- 配置備份保留策略(Oracle Docs)
- 列出備份和恢復相關的對象(Oracle 文件)
- 刪除指定的備份和副本(Oracle Docs)
- 12.2 控製文件備份永遠不會被標記為過時(PATRICK’S ORACLE DBA BLOG)