Oracle

為什麼在不考慮冗餘的情況下將先前版本的備份標記為過時?

  • July 18, 2018

在不完全恢復並打開 9i 數據庫後,resetlogs我們執行了一個成功完成的完整備份。備份包含一個命令,用於在完成後刪除過時的備份:

delete noprompt obsolete device type sbt;

RMAN 配置為使用 REDUNDANCY 2:

RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

然而,舊版本的所有備份都立即標記為過時並刪除,而不考慮冗餘。

  1. 如果我們有一個RECOVERY WINDOW配置而不是,這種行為會有所不同REDUNDANCY 2嗎?
  2. 這種行為在更高版本的 Oracle 中是否相同?

編輯:添加的輸出LIST INCARNATION

RMAN> list incarnation;

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            CUR Reset SCN      Reset Time
------- ------- -------- ---------------- --- -------------- ----------
1       1       LIVE     3494832994       NO  1              19-JAN-04
2       2       LIVE     3494832994       NO  11966702870498 01-JAN-14
3       3       LIVE     3494832994       YES 12041003378277 04-JUL-18

對於感興趣的 RMAN 初學者

RMAN 策略REDUNDANCYRECOVERY WINDOW是互斥的。這意味著您可以設置一個或另一個。

冗餘策略

設置REDUNDANCY 2將始終僅保留最後兩個備份並刪除(或標記為過時)任何其他以前的備份,這些備份不再需要使數據庫恢復到一致狀態。

注意:

如果您在 FULL 和/或 LEVEL 0 備份之間有 LEVEL 1 和 ARCHIVELOG 備份,則應保留它們直到不再需要。

附加資訊

根據 PDF 文件Oracle 數據庫 - 備份和恢復參考,您的保留策略REDUNDANCY 2不應該刪除舊備份:

以下場景說明了冗餘在增量備份策略中的工作原理。假設冗餘級別為 1。週一中午執行 0 級數據庫備份,週二和周三中午執行 1 級累積備份,週四中午執行 0 級備份。每次每日備份後立即執行DELETE OBSOLETE. 星期三DELETE命令不會刪除星期二的 1 級備份,因為此備份不是冗餘的:星期二的 1 級備份可用於將星期一的 0 級備份恢復到星期二中午和星期三中午之間的時間。但是,DELETE週四的命令會刪除之前的 0 級和 1 級備份。

上面的範例使用值 1,但清楚地表明完整備份的早期備份不會被刪除,直到它們大於配置的值。

回答您的問題

  1. 這取決於,….(參見 2. 和“可能的問題”)
  2. 根據文件retention policy,所有版本的設置似乎仍然相同:

可能的問題

  • 您在數據庫實例的備份和恢復過程中遇到了錯誤。

使用 Oracle 12c 進行複制

因為 Oracle RDBMS 9i 幾乎已經過時,而我們的環境幾乎是最新的,所以我只能在 12c 環境中重新迭代/重現這些步驟。

RMAN 配置

RMAN 使用預設設置:

RMAN> 全部顯示;

具有 db_unique_name ORACLE12JN 的數據庫的 RMAN 配置參數是:
將保留政策配置為冗餘 2;
配置備份優化關閉;# 預設
將預設設備類型配置到磁碟;# 預設
配置控製文件自動備份;# 預設
將設備類型磁碟的控製文件自動備份格式配置為“%F”;# 預設
配置設備類型磁碟並行 1 備份類型到備份;# 預設
將設備類型磁碟的數據文件備份副本配置為 1;# 預設
將設備類型磁碟的存檔日誌備份副本配置為 1;# 預設
將 MAXSETSIZE 配置為無限;# 預設
為數據庫關閉配置加密;# 預設
配置加密算法“AES128”;# 預設
配置壓縮算法“基本”作為發布“預設”優化負載真;# 預設
配置 RMAN 輸出保持 7 天;# 預設
將歸檔日誌刪除策略配置為無;# 預設
將快照控製文件名稱配置為“C:\ORACLE_12\PRODUCT\12.2.0\DBHOME_1\DATABASE\SNCFORACLE12JN.ORA”;# 預設

RMAN 備份

通過發出一個簡單的backup database;命令來執行 RMAN 備份:

RMAN> 備份數據庫;

2018 年 7 月 17 日開始備份
使用通道 ORA_DISK_1
通道 ORA_DISK_1:開始完整的數據文件備份集
通道 ORA_DISK_1:指定備份集中的數據文件
輸入數據文件文件號=00001 名稱=C:\ORACLE_12\ORADATA\ORACLE12JN\SYSTEM01.DBF
輸入數據文件文件號=00005 名稱=C:\ORACLE_12\ORADATA\ORACLE12JN\UNDOTBS01.DBF
輸入數據文件文件號=00003 名稱=C:\ORACLE_12\ORADATA\ORACLE12JN\SYSAUX01.DBF
輸入數據文件文件號=00007 名稱=C:\ORACLE_12\ORADATA\ORACLE12JN\USERS01.DBF
通道 ORA_DISK_1:18 年 7 月 17 日開始的第 1 塊
通道 ORA_DISK_1:18 年 7 月 17 日完成的第 1 件
件句柄=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNNDF_TAG20180717T151608_FNVV0RH4_.BKP tag=TAG20180717T151608 註釋=NONE
通道 ORA_DISK_1:備份集完成,經過時間:00:00:15
2018 年 7 月 17 日完成備份

2018 年 7 月 17 日開始控製文件和 SPFILE 自動備份
件句柄=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\AUTOBACKUP\2018_07_17\O1_MF_S_981731783_FNVV17QR_.BKP 註釋=NONE
2018 年 7 月 17 日完成控製文件和 SPFILE 自動備份

驗證備份、檢查過時的備份和列出化身

在執行了一段時間的備份後,我再次檢查了 RMAN 目錄:

RMAN> 列出備份摘要;


備份列表
===============
密鑰 TY LV S 設備類型 完成時間 #Pieces #Copies 壓縮標籤
------- -- -- - ----------- ------------------- ------- ------- ---------- ---
3 BFA 磁碟 2018-07-16 10:03:01 1 1 無標籤20180716T100301
5 BFA 磁碟 2018-07-16 10:27:44 1 1 無標籤20180716T102744
7 BFA 磁碟 2018-07-16 10:49:50 1 1 無標籤20180716T104950
9 BFA 磁碟 2018-07-16 10:50:08 1 1 無標籤20180716T105007
11 BFA 磁碟 2018-07-16 10:50:22 1 1 無標籤20180716T105022
13 BFA 磁碟 2018-07-16 10:51:21 1 1 無標籤20180716T105121
15 BFA 磁碟 2018-07-16 13:06:13 1 1 無標籤20180716T130612
17 BFA 磁碟 2018-07-16 15:26:23 1 1 無標籤20180716T152623
19 BFA 磁碟 2018-07-16 15:57:07 1 1 無標籤20180716T155707
20 B 0 A 磁碟 2018-07-17 08:22:01 1 1 無標籤20180717T082154
21 BFA 磁碟 2018-07-17 08:22:02 1 1 無標籤20180717T082202
22 B 0 A 磁碟 2018-07-17 14:36:07 1 1 無標籤20180717T143558
23 BFA 磁碟 2018-07-17 14:36:14 1 1 無標籤20180717T143614
24 BFA 磁碟 2018-07-17 15:16:15 1 1 無標籤20180717T151608
25 BFA 磁碟 2018-07-17 15:16:23 1 1 無標籤20180717T151623
26 BAA 磁碟 2018-07-17 15:55:52 1 1 無標籤20180717T155551
27 BFA 磁碟 2018-07-17 15:55:53 1 1 無標籤20180717T155553
28 BFA 磁碟 2018-07-17 16:05:17 1 1 無標籤20180717T160517

驗證周圍沒有過時的備份:

RMAN> 報告過時;

RMAN 保留策略將應用於命令
RMAN 保留策略設置為冗餘 2
未找到過時的備份

RMAN>

並列出了目前的化身:

RMAN> 列表化身;


數據庫化身列表
DB Key Inc Key DB 名稱 DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 ORACLE12 2083073378 家長 1 2017-03-08 15:57:31
2 2 ORACLE12 2083073378 目前 1490582 2018-07-16 09:27:03

執行首次還原/恢復

發出以下命令以將數據庫恢復/恢復到一致狀態:

RMAN> 立即關閉

數據庫關閉
數據庫已解除安裝
Oracle 實例關閉

RMAN> 啟動掛載;

連接到目標數據庫(未啟動)
Oracle 實例已啟動
數據庫掛載

總系統全域區域 1610612736 字節

固定大小 8747368 字節
可變大小 385877656 字節
數據庫緩衝區 1207959552 字節
重做緩衝區 8028160 字節

RMAN> 執行
2> {
3> 設置到時間'2018-07-17 14:36:14';
4> 恢復數據庫;
5> 恢復數據庫;
6>}

執行命令:SET until 子句

2018-07-17 16:04:30 開始恢復
分配通道:ORA_DISK_1
通道 ORA_DISK_1:SID=12 設備類型=DISK

通道 ORA_DISK_1:開始數據文件備份集恢復
通道 ORA_DISK_1:指定要從備份集中恢復的數據文件
通道 ORA_DISK_1:將數據文件 00001 恢復到 C:\ORACLE_12\ORADATA\ORACLE12JN\SYSTEM01.DBF
通道 ORA_DISK_1:將數據文件 00003 恢復到 C:\ORACLE_12\ORADATA\ORACLE12JN\SYSAUX01.DBF
通道 ORA_DISK_1:將數據文件 00005 恢復到 C:\ORACLE_12\ORADATA\ORACLE12JN\UNDOTBS01.DBF
通道 ORA_DISK_1:將數據文件 00007 恢復到 C:\ORACLE_12\ORADATA\ORACLE12JN\USERS01.DBF
通道 ORA_DISK_1:從備份片 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNND0_TAG20180717T143558_FNVROH49_.BKP 讀取
通道 ORA_DISK_1:片柄=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNND0_TAG20180717T143558_FNVROH49_.BKP tag=TAG20180717T143558
通道 ORA_DISK_1:恢復的備份片 1
通道 ORA_DISK_1:恢復完成,經過時間:00:00:07
2018-07-17 16:04:38 完成恢復

2018-07-17 16:04:38 開始恢復
使用通道 ORA_DISK_1

開始媒體恢復
媒體恢復完成,經過時間:00:00:00

2018-07-17 16:04:39 完成恢復

RMAN> 改變數據庫打開重置日誌;

已處理報表

RMAN> 列表化身;


數據庫化身列表
DB Key Inc Key DB 名稱 DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 ORACLE12 2083073378 家長 1 2017-03-08 15:57:31
2 2 ORACLE12 2083073378 父 1490582 2018-07-16 09:27:03
3 3 ORACLE12 2083073378 目前 1701490 2018-07-17 16:05:13

RMAN> 列出備份摘要;


備份列表
===============
密鑰 TY LV S 設備類型 完成時間 #Pieces #Copies 壓縮標籤
------- -- -- - ----------- ------------------- ------- ------- ---------- ---
3 BFA 磁碟 2018-07-16 10:03:01 1 1 無標籤20180716T100301
5 BFA 磁碟 2018-07-16 10:27:44 1 1 無標籤20180716T102744
7 BFA 磁碟 2018-07-16 10:49:50 1 1 無標籤20180716T104950
9 BFA 磁碟 2018-07-16 10:50:08 1 1 無標籤20180716T105007
11 BFA 磁碟 2018-07-16 10:50:22 1 1 無標籤20180716T105022
13 BFA 磁碟 2018-07-16 10:51:21 1 1 無標籤20180716T105121
15 BFA 磁碟 2018-07-16 13:06:13 1 1 無標籤20180716T130612
17 BFA 磁碟 2018-07-16 15:26:23 1 1 無標籤20180716T152623
19 BFA 磁碟 2018-07-16 15:57:07 1 1 無標籤20180716T155707
20 B 0 A 磁碟 2018-07-17 08:22:01 1 1 無標籤20180717T082154
21 BFA 磁碟 2018-07-17 08:22:02 1 1 無標籤20180717T082202
22 B 0 A 磁碟 2018-07-17 14:36:07 1 1 無標籤20180717T143558
23 BFA 磁碟 2018-07-17 14:36:14 1 1 無標籤20180717T143614
24 BFA 磁碟 2018-07-17 15:16:15 1 1 無標籤20180717T151608
25 BFA 磁碟 2018-07-17 15:16:23 1 1 無標籤20180717T151623
26 BAA 磁碟 2018-07-17 15:55:52 1 1 無標籤20180717T155551
27 BFA 磁碟 2018-07-17 15:55:53 1 1 無標籤20180717T155553
28 BFA 磁碟 2018-07-17 16:05:17 1 1 無標籤20180717T160517

RMAN> 報告過時;

RMAN 保留策略將應用於命令
RMAN 保留策略設置為冗餘 2
未找到過時的備份

還原成功,並且沒有備份被標記為過時,即使在還原後化身已更改並且已ALTER DATABASE OPEN RESETLOGS發布。

替代化身列表

可以使用以下命令實現化身的替代表示:

alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
set pages 50
set lines 230
column Path format a20
select INCARNATION#, RESETLOGS_CHANGE#, RESETLOGS_TIME, 
PRIOR_INCARNATION#, STATUS, LEVEL, SYS_CONNECT_BY_PATH(INCARNATION#, ' -> ') Path 
from v$database_incarnation 
WHERE LEVEL >=1 START WITH INCARNATION# = '1' 
CONNECT BY PRIOR INCARNATION# = PRIOR_INCARNATION# 
order by Level, Path, RESETLOGS_TIME;

輸出:

INCARNATION#RESETLOGS_CHANGE#RESETLOGS_TIME PRIOR_INCARNATION#狀態等級路徑
------------ ----------------- ------------------- ------------------ ------- ---------- --------------------
1 1 2017-03-08 15:57:31 0 父母 1 -> 1
2 1490582 2018-07-16 09:27:03 1 父母 2 -> 1 -> 2
3 1701490 2018-07-17 16:05:13 2 目前 3 -> 1 -> 2 -> 3

在數據庫實例中查詢本地目錄的優點是將化身表示為要遵循的路徑

執行第二次還原/恢復

發出以下命令以再次將數據庫恢復/恢復到一致狀態:

RMAN> 立即關閉

數據庫關閉
數據庫已解除安裝
Oracle 實例關閉

RMAN> 啟動掛載

連接到目標數據庫(未啟動)
Oracle 實例已啟動
數據庫掛載

總系統全域區域 1610612736 字節

固定大小 8747368 字節
可變大小 520095384 字節
數據庫緩衝區 1073741824 字節
重做緩衝區 8028160 字節

RMAN> 執行
2> {
3> 設置到時間'2018-07-17 08:22:01';
4> 恢復數據庫;
5> 恢復數據庫;
6>}

執行命令:SET until 子句

2018-07-17 16:14:37 開始恢復
分配通道:ORA_DISK_1
通道 ORA_DISK_1: SID=11 設備類型=DISK
RMAN-00571:============================================== ==============
RMAN-00569:=============== 錯誤消息堆棧跟隨 ===============
RMAN-00571:============================================== ==============
RMAN-03002:在 2018 年 7 月 17 日 16:14:37 恢復命令失敗
RMAN-20207:UNTIL TIME 或 RECOVERY WINDOW 早於 RESETLOGS 時間

好的,我們在恢復路徑中遇到了一個化身“碰撞”。我們目前處於化身 3,如下面的化身清單所示,我從上面複製了該清單:

INCARNATION#RESETLOGS_CHANGE#RESETLOGS_TIME PRIOR_INCARNATION#狀態等級路徑
------------ ----------------- ------------------- ------------------ ------- ---------- --------------------
1 1 2017-03-08 15:57:31 0 父母 1 -> 1
2 1490582 2018-07-16 09:27:03 1 父母 2 -> 1 -> 2
3 1701490 2018-07-17 16:05:13 2 目前 3 -> 1 -> 2 -> 3

…我們的目標是在化身 2 的 RESETLOGS 之後進行備份。讓我們將化身重置為 2 並繼續備份:

RMAN> 將數據庫重置為化身 2;

數據庫重置為化身 2

RMAN>

似乎工作。讓我們再次重新啟動還原/恢復:

RMAN> 執行
2> {
3> 設置到時間'2018-07-17 08:22:01';
4> 恢復數據庫;
5> 恢復數據庫;
6>}

執行命令:SET until 子句

2018-07-17 16:16:12 開始恢復
使用通道 ORA_DISK_1

通道 ORA_DISK_1:開始數據文件備份集恢復
通道 ORA_DISK_1:指定要從備份集中恢復的數據文件
通道 ORA_DISK_1:將數據文件 00001 恢復到 C:\ORACLE_12\ORADATA\ORACLE12JN\SYSTEM01.DBF
通道 ORA_DISK_1:將數據文件 00003 恢復到 C:\ORACLE_12\ORADATA\ORACLE12JN\SYSAUX01.DBF
通道 ORA_DISK_1:將數據文件 00005 恢復到 C:\ORACLE_12\ORADATA\ORACLE12JN\UNDOTBS01.DBF
通道 ORA_DISK_1:將數據文件 00007 恢復到 C:\ORACLE_12\ORADATA\ORACLE12JN\USERS01.DBF
通道 ORA_DISK_1:從備份片 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNND0_TAG20180717T082154_FNV2R328_.BKP 讀取
通道 ORA_DISK_1:片柄=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNND0_TAG20180717T082154_FNV2R328_.BKP tag=TAG20180717T082154
通道 ORA_DISK_1:恢復的備份片 1
通道 ORA_DISK_1:恢復完成,經過時間:00:00:07
於 2018-07-17 16:16:20 完成恢復

2018-07-17 16:16:20 開始恢復
使用通道 ORA_DISK_1

開始媒體恢復

具有序列 3 的執行緒 1 的歸檔日誌已作為文件 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\ARCHIVELOG\2018_07_17\O1_MF_1_3_FNVXC7R7_.ARC 在磁碟上
歸檔日誌文件名=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\ARCHIVELOG\2018_07_17\O1_MF_1_3_FNVXC7R7_.ARC 執行緒=1 序列=3
媒體恢復完成,經過時間:00:00:00
於 2018-07-17 16:16:21 完成恢復

RMAN> 改變數據庫打開重置日誌;

已處理報表

RMAN> 報告過時
2>;

RMAN 保留策略將應用於命令
RMAN 保留策略設置為冗餘 2
未找到過時的備份

RMAN>

還原成功並且沒有備份被標記為過時,即使在還原後化身發生了變化並且ALTER DATABASE OPEN RESETLOGS再次發出了 。現在我們是一個更新的化身,仍然沒有Obsolete Backups報告。

第二次還原後的目前化身列表 (SQL)

SQL> select INCARNATION#, RESETLOGS_CHANGE#, RESETLOGS_TIME, PRIOR_INCARNATION#, STATUS, LEVEL, SYS_CONNECT_BY_PATH(INCARNATION#, ' -> ') v$database_incarnation 的路徑 WHERE LEVEL >=1 START WITH INCARNATION# = '1' CONNECT BY PRIOR INCARNATION # = PRIOR_INCARNATION# 按級別、路徑、RESETLOGS_TIME 排序;

INCARNATION#RESETLOGS_CHANGE#RESETLOGS_TIME PRIOR_INCARNATION#狀態等級路徑
------------ ----------------- ------------------- ------------------ ------- ---------- --------------------
1 1 2017-03-08 15:57:31 0 父母 1 -> 1
2 1490582 2018-07-16 09:27:03 1 父母 2 -> 1 -> 2
3 1701490 2018-07-17 16:05:13 2 孤兒 3 -> 1 -> 2 -> 3
4 1691865 2018-07-17 16:16:29 2 目前 3 -> 1 -> 2 -> 4

啟動備份

第二次恢復後,讓我們再次備份數據庫:

RMAN> 備份數據庫;

2018-07-17 16:51:39 開始備份
使用通道 ORA_DISK_1
通道 ORA_DISK_1:開始完整的數據文件備份集
通道 ORA_DISK_1:指定備份集中的數據文件
輸入數據文件文件號=00001 名稱=C:\ORACLE_12\ORADATA\ORACLE12JN\SYSTEM01.DBF
輸入數據文件文件號=00005 名稱=C:\ORACLE_12\ORADATA\ORACLE12JN\UNDOTBS01.DBF
輸入數據文件文件號=00003 名稱=C:\ORACLE_12\ORADATA\ORACLE12JN\SYSAUX01.DBF
輸入數據文件文件號=00007 名稱=C:\ORACLE_12\ORADATA\ORACLE12JN\USERS01.DBF
通道 ORA_DISK_1:2018-07-17 16:51:39 的起始片段 1
通道 ORA_DISK_1:2018 年 7 月 17 日 16:51:46 完成的第 1 件
件句柄=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNNDF_TAG20180717T165139_FNW0MVRT_.BKP tag=TAG20180717T165139 註釋=NONE
通道 ORA_DISK_1:備份集完成,經過時間:00:00:07
2018-07-17 16:51:46 完成備份

在 2018-07-17 16:51:46 開始控製文件和 SPFILE 自動備份
件句柄=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\AUTOBACKUP\2018_07_17\O1_MF_S_981737506_FNW0N31S_.BKP 註釋=NONE
在 2018-07-17 16:51:47 完成控製文件和 SPFILE 自動備份

RMAN>

檢查過時

我們現在將檢查哪些(備份)文件已過時:

RMAN> 報告過時
2>;

RMAN 保留策略將應用於命令
RMAN 保留策略設置為冗餘 2
過時備份和副本的報告
鍵入密鑰完成時間文件名/句柄
-------------------- ------ ------------------ --------------------
備份集 20 2018-07-17 08:22:01
備份片 20 2018-07-17 08:22:01 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNND0_TAG20180717T082154_FNV2R328_.BKP
備份集 22 2018-07-17 14:36:07
備份片 22 2018-07-17 14:36:07 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNND0_TAG20180717T143558_FNVROH49_.BKP
備份集 24 2018-07-17 15:16:15
備份片 24 2018-07-17 15:16:15 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNNDF_TAG20180717T151608_FNVV0RH4_.BKP
存檔日誌 2 2018-07-17 15:55:51 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\ARCHIVELOG\2018_07_17\O1_MF_1_3_FNVXC7R7_.ARC
備份集 26 2018-07-17 15:55:52
備份片 26 2018-07-17 15:55:52 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_ANNNN_TAG20180717T155551_FNVXC84F_.BKP
存檔日誌 3 2018-07-17 16:05:13 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\ARCHIVELOG\2018_07_17\O1_MF_1_4_FNVXWSDY_.ARC

RMAN>

檢查化身 (SQL)

SQL> select INCARNATION#, RESETLOGS_CHANGE#, RESETLOGS_TIME, PRIOR_INCARNATION#, STATUS, LEVEL, SYS_CONNECT_BY_PATH(INCARNATION#, ' -> ') v$database_incarnation 的路徑 WHERE LEVEL >=1 START WITH INCARNATION# = '1' CONNECT BY PRIOR INCARNATION # = PRIOR_INCARNATION# 按級別、路徑、RESETLOGS_TIME 排序;

INCARNATION#RESETLOGS_CHANGE#RESETLOGS_TIME PRIOR_INCARNATION#狀態等級路徑
------------ ----------------- ------------------- ------------------ ------- ---------- --------------------
1 1 2017-03-08 15:57:31 0 父母 1 -> 1
2 1490582 2018-07-16 09:27:03 1 父母 2 -> 1 -> 2
3 1701490 2018-07-17 16:05:13 2 孤兒 3 -> 1 -> 2 -> 3
4 1691865 2018-07-17 16:16:29 2 目前 3 -> 1 -> 2 -> 4

可以看出,化身 3 現在是孤立的,因為它與數據庫目前狀態有關的直接繼承線已被破壞。在第一次恢復之後,我們及時返回並再次重新恢復了數據庫,這導致化身路徑1 -> 2 -> 4成為打開數據庫的目前祖先的直線。

因為恢復目前數據庫的直接路徑是沿著 1、2、4 的化身,所以 RMAN 不需要保留上面列出的過時備份。可以安全地刪除它們。

刪除過時的

讓我們繼續刪除過時的備份:

RMAN> 刪除過時的
2>;

RMAN 保留策略將應用於命令
RMAN 保留策略設置為冗餘 2
使用通道 ORA_DISK_1
刪除以下過時的備份和副本:
鍵入密鑰完成時間文件名/句柄
-------------------- ------ ------------------ --------------------
備份集 20 2018-07-17 08:22:01
備份片 20 2018-07-17 08:22:01 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNND0_TAG20180717T082154_FNV2R328_.BKP
備份集 22 2018-07-17 14:36:07
備份片 22 2018-07-17 14:36:07 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNND0_TAG20180717T143558_FNVROH49_.BKP
備份集 24 2018-07-17 15:16:15
備份片 24 2018-07-17 15:16:15 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNNDF_TAG20180717T151608_FNVV0RH4_.BKP
存檔日誌 2 2018-07-17 15:55:51 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\ARCHIVELOG\2018_07_17\O1_MF_1_3_FNVXC7R7_.ARC
備份集 26 2018-07-17 15:55:52
備份片 26 2018-07-17 15:55:52 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_ANNNN_TAG20180717T155551_FNVXC84F_.BKP
存檔日誌 3 2018-07-17 16:05:13 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\ARCHIVELOG\2018_07_17\O1_MF_1_4_FNVXWSDY_.ARC
備份集 30 2018-07-17 16:17:52
備份片 30 2018-07-17 16:17:52 C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNNDF_TAG20180717T161743_FNVYN815_.BKP

是否真的要刪除上述對象(輸入 YES 或 NO)?是的
刪除的備份片
備份片句柄=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNND0_TAG20180717T082154_FNV2R328_.BKP RECID=20 STAMP=981706915
刪除的備份片
備份片句柄=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNND0_TAG20180717T143558_FNVROH49_.BKP RECID=22 STAMP=981729359
刪除的備份片
備份片句柄=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNNDF_TAG20180717T151608_FNVV0RH4_.BKP RECID=24 STAMP=981731768
已刪除歸檔日誌
歸檔日誌文件名=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\ARCHIVELOG\2018_07_17\O1_MF_1_3_FNVXC7R7_.ARC RECID=2 STAMP=981734151
刪除的備份片
備份片句柄=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_ANNNN_TAG20180717T155551_FNVXC84F_.BKP RECID=26 STAMP=981734152
已刪除歸檔日誌
歸檔日誌文件名=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\ARCHIVELOG\2018_07_17\O1_MF_1_4_FNVXWSDY_.ARC RECID=3 STAMP=981734713
刪除的備份片
備份片句柄=C:\ORACLE_12\RECOVERY_AREA\ORACLE12JN\BACKUPSET\2018_07_17\O1_MF_NNNDF_TAG20180717T161743_FNVYN815_.BKP RECID=30 STAMP=981735464
刪除了 7 個對象

列出備份摘要

現在我們已經刪除了一些備份文件,並且 RMAN 進行了一些內部清理,讓我們看一下備份摘要:

RMAN> 列出備份摘要;


備份列表
===============
密鑰 TY LV S 設備類型 完成時間 #Pieces #Copies 壓縮標籤
------- -- -- - ----------- ------------------- ------- ------- ---------- ---
3 BFA 磁碟 2018-07-16 10:03:01 1 1 無標籤20180716T100301
5 BFA 磁碟 2018-07-16 10:27:44 1 1 無標籤20180716T102744
7 BFA 磁碟 2018-07-16 10:49:50 1 1 無標籤20180716T104950
9 BFA 磁碟 2018-07-16 10:50:08 1 1 無標籤20180716T105007
11 BFA 磁碟 2018-07-16 10:50:22 1 1 無標籤20180716T105022
13 BFA 磁碟 2018-07-16 10:51:21 1 1 無標籤20180716T105121
15 BFA 磁碟 2018-07-16 13:06:13 1 1 無標籤20180716T130612
17 BFA 磁碟 2018-07-16 15:26:23 1 1 無標籤20180716T152623
19 BFA 磁碟 2018-07-16 15:57:07 1 1 無標籤20180716T155707
21 BFA 磁碟 2018-07-17 08:22:02 1 1 無標籤20180717T082202
23 BFA 磁碟 2018-07-17 14:36:14 1 1 無標籤20180717T143614
25 BFA 磁碟 2018-07-17 15:16:23 1 1 無標籤20180717T151623
27 BFA 磁碟 2018-07-17 15:55:53 1 1 無標籤20180717T155553
28 BFA 磁碟 2018-07-17 16:05:17 1 1 無標籤20180717T160517
29 BFA 磁碟 2018-07-17 16:16:34 1 1 無標籤20180717T161634
31 BFA 磁碟 2018-07-17 16:17:59 1 1 無標籤20180717T161759
32 BFA 磁碟 2018-07-17 16:51:46 1 1 無標籤20180717T165139
33 BFA 磁碟 2018-07-17 16:51:47 1 1 無標籤20180717T165146
34 BFA 磁碟 2018-07-18 07:24:13 1 1 無標籤20180718T072405
35 BFA 磁碟 2018-07-18 07:24:21 1 1 無標籤20180718T072421

RMAN>

正如我們所看到的,我們仍然有“至少”兩個完整的備份,這將允許我們恢復數據庫過去的兩個備份。RMAN(在 12c 中)沒有刪除沿化身路徑或孤立化身之外的任何其他備份。

結論

關於在 9i 中初始還原後刪除的備份,我相信有兩種可能的情況:

  1. 你遇到了一個錯誤。
  2. 恢復後啟動了兩個(完整)備份,導致備份在磁帶上被刪除。

參考資料

  • Doc ID 206862.1(RMAN 保留策略如何廢棄增量備份集和存檔日誌文件)

    • 適用於 Oracle 9i+

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