Oracle-12c

如何配置 RMAN 以自動刪除 crontrol 文件?

  • September 11, 2018

我在 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 中手動刪除它們。

概括

您可能會看到以下問題:

  1. 一切正常,實例剛剛創建了很多自動備份的控製文件。
  2. 控製文件在 FRE 之外,必須手動刪除
  3. 你遇到了一個錯誤(…閱讀下文)。

因為我們不知道您的確切備份腳本和其他設置,所以很難判斷您遇到的是哪一點,但您有幾個很好的起點。

明顯的錯誤

在某些情況下(顯然)控製文件永遠不會被標記為過時:

已送出錯誤並提供了修復程序,但似乎並非在所有情況下都有效。

您可能必須手動刪除 RMAN 中的控製文件備份。

DELETE COPY OF CONTROLFILE LIKE '/mnt/backup/rman/xyz/<part_name_of_control_file>%';

回答你的問題

我該怎麼做才能自動刪除這些文件?

抱歉,但這取決於您遇到的情況,可能會有所不同:

  • 會自動發生
  • 可以用REPORT OBSOLETEand刪除DELETE OBSOLETE
  • 只會手動發生DELETE COPY OF CONTROLFILE LIKE ...
  • 修復錯誤後可能會再次工作

參考

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