使用RMAN還原和恢復資料庫

llnnmc發表於2017-10-06

Oracle對資料庫的還原和恢復使用了非常精準的術語:還原就是從之前所做的備份中提取檔案,而恢復是指應用重做日誌流提取變更向量,使資料庫保持最新。恢復可以是完整的,即沒有任何資料丟失,也可以是不完整的,即故意的丟失部分資料。利用恢復管理器RMAN可以自動化資料庫的還原和恢復過程,比手工操作更快更安全。

 

一、資料恢復顧問DRA的使用

 

資料恢復顧問(Data Recovery AdvisorDRA)是Oracle 11g中新增的一個診斷和修復資料庫問題的工具。共有兩種介面:RMAN可執行程式介面和企業管理器Enterprise Manager介面。DRA能夠生成指令碼來修復資料檔案和(在某些環境下)控制檔案受到的損壞。它不提供有關伺服器引數檔案和聯機日誌檔案問題的建議。DRA的決策依賴於自動診斷知識庫(Automatic Diagnostic RepositoryADR)和健康檢查Health Monitor

 

Health Monitor是一組檢查,檢查結果不儲存在資料庫,而儲存在檔案系統中。其原因在於,一些錯誤的性質決定了資料庫不再可用,因此需要一個外部知識庫來儲存Health Monitor的結果。這個知識庫就是自動診斷知識庫(ADR),位於diagnostic_dest例項引數指定的目錄中。

show parameter diagnostic_dest;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------

diagnostic_dest                      string      C:\ORACLE

 

可以看到其預設是在Oracle安裝的基目錄中,有個diag子目錄就是存放ADR的位置。

 

健康檢查Health Monitor在資料庫不同的模式階段將執行不同的檢查內容:

nomount模式下,只能檢查控制檔案的完整性,因為資料庫還沒有裝載;

mount模式下,將檢查控制檔案、聯機重做日誌檔案和資料檔案頭部的完整性,也將檢查歸檔日誌檔案的完整性;

open模式下,將可掃描每個資料檔案塊是否受損,並檢查資料字典和撤銷段的完整性。

 

DRA的功能有一定的侷限性。例如,只有當例項處於nomount或更高模式時,DRA才能奏效。如果初始化檔案存在問題,它就起不到幫助作用。但一旦能進入nomount模式,它就可以診斷控制檔案的問題,並使用現有的有效副本(如果不存在,就嘗試從備份集中提取一個副本)生成用來還原的指令碼。再一旦資料庫進入mount模式,DRA就可以診斷有關資料檔案缺失或受損的問題,以及聯機日誌檔案組丟失的問題,並生成修復指令碼。DRA只能用於單例項資料庫的環境,不能用於RAC叢集環境,也不能用於Data Guard備用資料庫。如果RAC資料庫故障,可以在單例項模式中載入,使用DRA修復損壞的內容,然後關閉它並在RAC模式中重新開啟。

 

資料恢復顧問DRA的使用非常簡單,RMAN環境下包括以下三個步驟:

1)使用list failure命令列出故障;

2)使用advise failure命令給出故障處理建議;

3)使用repair failure命令修復故障。

 

資料恢復顧問DRA使用健康檢查Health Monitor收集的資訊查詢問題並構建RMAN指令碼進行修復。如果不首先要求DRA列出故障,則DRA不會生成建議。對於最後一次列出之後再發生的故障,DRA不提供任何建議。

 

以下透過一個例子,說明資料恢復顧問(DRA)的使用。

 

1)在作業系統提示符下進入RMAN程式

C:\Users\Administrator>rman target /

 

恢復管理器: Release 11.2.0.4.0 - Production on 星期四 5月 3 10:33:33 2018

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

已連線到目標資料庫: MES (DBID=2056489697)

 

2)確認已存在SYSAUX表空間的完整備份

RMAN> list backup of tablespace sysaux;

 

使用目標資料庫控制檔案替代恢復目錄

 

備份集列表

===================

 

 

BS 關鍵字  型別 LV 大小       裝置型別 經過時間 完成時間

------- ---- -- ---------- ----------- ------------ -------------------

241     Incr 0  312.86M    DISK        00:01:00     2018-05-03 10:31:49

        BP 關鍵字: 241   狀態: AVAILABLE  已壓縮: YES  標記: TAG20180503T103048

段名:E:\RMAN_BAK\MES\MES_85T1V56P_1_20180503

  備份集 241 中的資料檔案列表

  檔案 LV 型別 Ckp SCN    Ckp 時間            名稱

  ---- -- ---- ---------- ------------------- ----

  2    0  Incr 1640735    2018-05-03 10:30:49 D:\ORADATA\MES\SYSAUX01.DBF

 

如果沒有備份就建立一個

RMAN> backup as backupset tablespace sysaux;

 

3)關閉例項並退出

RMAN> shutdown immediate;

RMAN> exit;

 

4)利用作業系統程式刪除sysaux表空間的資料檔案

 

5)使用SQL*Plus連線到資料庫,並嘗試啟動

C:\Users\Administrator>sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.4.0 Production on 星期四 5月 3 10:42:42 2018

 

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

 

已連線到空閒例程。

 

10:42:42 SYS @ mes AS SYSDBA>startup

ORACLE 例程已經啟動。

 

Total System Global Area 1286066176 bytes

Fixed Size                  2280896 bytes

Variable Size             771752512 bytes

Database Buffers          503316480 bytes

Redo Buffers                8716288 bytes

資料庫裝載完畢。

ORA-01157: 無法標識/鎖定資料檔案 2 - 請參閱 DBWR 跟蹤檔案

ORA-01110: 資料檔案 2: 'D:\ORADATA\MES\SYSAUX01.DBF'

 

啟動時提示sysaux01.dbf檔案缺失,並停留在mount載入模式。

 

6)再次啟動RMAN並診斷問題

C:\Users\Administrator>rman target /

 

恢復管理器: Release 11.2.0.4.0 - Production on 星期四 5月 3 10:44:17 2018

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

已連線到目標資料庫: MES (DBID=2056489697, 未開啟)

 

RMAN> list failure;

 

使用目標資料庫控制檔案替代恢復目錄

資料庫故障列表

=========================

 

失敗 ID 優先順序狀態    檢測時間            概要

------- -------- --------- ------------------- -------

4932    HIGH     OPEN      2018-05-02 23:01:58 缺失一個或多個非系統資料檔案

4908    HIGH     OPEN      2018-05-02 23:01:58 一個或多個非系統資料檔案需要介質恢復

 

返回一條訊息,提示一個非系統資料檔案的缺失。

 

7)生成有關故障的建議

RMAN> advise failure;

 

資料庫故障列表

=========================

 

失敗 ID 優先順序狀態    檢測時間            概要

------- -------- --------- ------------------- -------

4932    HIGH     OPEN      2018-05-02 23:01:58 缺失一個或多個非系統資料檔案

4908    HIGH     OPEN      2018-05-02 23:01:58 一個或多個非系統資料檔案需要介質恢復

 

正在分析自動修復選項; 這可能需要一些時間

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=221 裝置型別=DISK

分析自動修復選項完成

 

必需的手動操作

========================

沒有可用的手動操作

 

可選手動操作

=======================

1. 如果無意中重新命名或移動了檔案 D:\ORADATA\MES\SYSAUX01.DBF, 請還原該檔案

2. 如果還原了錯誤版本的資料檔案 D:\ORADATA\MES\SYSAUX01.DBF, 請使用正確版本將其替換

 

自動修復選項

========================

選項修復說明

------ ------------------

1      還原和恢復資料檔案 2

  策略: 修復操作包括無資料丟失的完全介質恢復

  修復指令碼: C:\ORACLE\diag\rdbms\mes\mes\hm\reco_339425269.hm

 

8)開啟修復指令碼,研究其內容,可以看到包括以下修復語句

restore datafile 2;

recover datafile 2;

sql 'alter database datafile 2 online';

 

10)要執行指令碼,可使用以下命令

RMAN> repair failure;

 

策略: 修復操作包括無資料丟失的完全介質恢復

修復指令碼: C:\ORACLE\diag\rdbms\mes\mes\hm\reco_339425269.hm

 

修復指令碼的內容:

   # restore and recover datafile

   restore datafile 2;

   recover datafile 2;

   sql 'alter database datafile 2 online';

 

是否確實要執行以上修復 (輸入 YES 或 NO)? y

執行修復指令碼

 

啟動 restore 於 2018-05-03 10:50:36

使用通道 ORA_DISK_1

 

通道 ORA_DISK_1: 正在開始還原資料檔案備份集

通道 ORA_DISK_1: 正在指定從備份集還原的資料檔案

通道 ORA_DISK_1: 將資料檔案 00002 還原到 D:\ORADATA\MES\SYSAUX01.DBF

通道 ORA_DISK_1: 正在讀取備份片段 E:\RMAN_BAK\MES\MES_85T1V56P_1_20180503

通道 ORA_DISK_1: 段控制程式碼 = E:\RMAN_BAK\MES\MES_85T1V56P_1_20180503 標記 = TAG20180503T103048

通道 ORA_DISK_1: 已還原備份片段 1

通道 ORA_DISK_1: 還原完成, 用時: 00:00:35

完成 restore 於 2018-05-03 10:51:12

 

啟動 recover 於 2018-05-03 10:51:12

使用通道 ORA_DISK_1

 

正在開始介質的恢復

介質恢復完成, 用時: 00:00:01

 

完成 recover 於 2018-05-03 10:51:13

 

sql 語句: alter database datafile 2 online

修復故障已完成

 

是否要開啟資料庫 (輸入 YES 或 NO)? y

資料庫已開啟

 

以上看到,系統自動定位最新的備份檔案,經過資料還原和介質恢復,完成後提示開啟資料庫。

 

二、資料檔案丟失後的完整恢復

 

Oracle資料庫中,有些檔案是關鍵的(critical),關鍵檔案受損意味著資料庫例項將終止,在損壞被修復之前不能重新開啟。有些檔案是非關鍵的(noncritical),如果這些檔案受損,資料庫仍能保持開啟或可以被開啟。

 

構成SYSTEM表空間和當前活動的撤銷表空間(由undo_tablespace引數指定)的資料檔案被認為是關鍵的,控制檔案的任何副本也都是關鍵的,這類檔案受損將導致例項終止執行。構成使用者資料表空間的檔案則是非關鍵的,這些檔案受損通常不會導致例項崩潰。使受損的檔案離線,使其內容不可訪問,可使資料庫的其餘部分仍可保持開啟。

 

通常,任意數目的資料檔案的損壞都可用完整恢復來修復,不會有資料丟失。還原受損的檔案,再應用重做使它們保持最新。當然,前提條件是自資料檔案上一次備份後生成的所有歸檔日誌檔案可用。不完整恢復意味著還原資料庫並只應用重做至某個特定點,在該點之後所做的所有工作將丟失。為什麼要不完整恢復?通常只有一個原因:使用者錯誤。如果因為使用者操作錯誤,則需要將整個資料庫返回到錯誤發生之前。不完整恢復的第二種原因是嘗試了完整恢復,但失敗了。這會在歸檔日誌檔案缺失或當前聯機日誌檔案組的所有副本丟失的情況下發生。

 

1、非歸檔日誌模式下的資料檔案恢復

 

在非歸檔日誌模式下,沒有什麼支援恢復的技術,因為恢復所需的歸檔日誌並不存在,因此只能進行還原,但這樣也丟失了自備份建立之後所做的所有工作。

 

還原過程只能在載入模式下執行

shutdown abort;

startup mount;

restore database;

recover database;

alter database open resetlogs;

 

2、歸檔日誌模式下丟失非關鍵檔案時的恢復

 

歸檔模式下,如果損壞的是非關鍵資料檔案,則還原和恢復過程包括以下四步:

1)使受損的資料檔案離線(可能系統已自動完整),如果還沒有離線,則可執行以下命令,如指定10#檔案離線

RMAN> sql'alter database datafile 10 offline';

受損檔案離線後,資料庫應該已經可以開啟。

2)還原資料檔案

RMAN> restore datafile 10;

3)恢復資料檔案

RMAN> recover datafile 10;

4)使資料檔案聯機

RMAN> sql'alter database datafile 10 online';

 

以上命令中有的屬於SQL命令而非RMAN命令,因此在RMAN環境下執行時,需要新增sql字首。

 

如果備份時使用的是增量備份策略,還原和恢復操作將首先利用級別0備份,然後應用級別1備份,最後再應用重做資料完成恢復。這一方法(使對重做的使用最小化)背後的邏輯是應用增量備份總是比應用重做要快。增量備份存在與否並不會導致使用recover命令時的語法差別,RMAN透過詢問其儲存庫,將計算出執行操作的最好方法。

 

3、丟失關鍵資料檔案時的恢復

 

如果資料庫因為關鍵資料檔案損壞而崩潰,那麼第一行動就是試著啟動它。這將在載入模式下停止,同時將錯誤訊息寫入警報日誌。要進行恢復,可以採取和非關鍵檔案一樣的過程,只是還原和恢復只能在載入模式下進行,因為資料庫已不能開啟。例如要還原3#檔案,此時還原和恢復包括以下四步:

1)資料庫啟動到載入模式

RMAN> startup mount;

2)還原資料檔案

RMAN> restore datafile 3;

3)恢復資料檔案

RMAN> recover datafile 3;

4)開啟資料庫

RMAN> alter database open;

 

三、資料檔案丟失後的不完整恢復

 

執行不完整恢復只有兩個原因:完整恢復不可行或是故意要丟失資料。如果缺失歸檔日誌或當前聯機重做日誌檔案組的所有副本缺失,那麼必須執行不完整恢復。對於使用者錯誤,可以還原整個資料庫並將它恢復至錯誤發生前的點,但也同時失去了自那之後所做的所有正確的工作。

 

不完整恢復的特例是控制檔案的恢復。在理想情況下,所有恢復操作將使用當前控制檔案來引導,但有時是不可能的,必須還原控制檔案的備份。可能的原因有兩點:1)當前控制檔案的所有副本已丟失,不能執行create controlfile命令重新建立它們。

2)當前控制檔案已不能準確描述想要還原的資料庫版本,如表空間和資料檔案的結構在最近一次備份後已發生了更改。這個時候還原資料檔案的同時必須首先還原控制檔案。

 

不完整恢復分為四個步驟:

1)載入資料庫

2)還原所有資料檔案

3)恢復資料庫至某個點(以下會說明包括三種指定方式)

4)用重置日誌開啟資料庫

 

與完整恢復相比,不完整恢復有以下幾點不同:

1)開始時,完整恢復可在資料庫開啟時進行,除非受損檔案是關鍵的,而不完整恢復只能在載入模式下進行。

2)還原時,對於完整恢復,只需還原受損的資料檔案,而不完整恢復需要還原所有資料檔案,必須還原到早於想恢復的點。

3)恢復時,需要將歸檔日誌和聯機日誌的重做資料應用到所需的點,有幾個選項可用於指定想恢復到的點。

4)開啟時, 需要用RESETLOGS開啟資料庫,這將重新初始化聯機重做日誌檔案,建立資料庫的一個新化身。資料庫的化身是指帶有新的重做執行緒(日誌序列號從1開始)的資料庫版本。備份和歸檔日誌都是特定於一個化身的,由不同化身生成的備份和歸檔日誌邏輯上是彼此分離的,不能互用。正因如此,當使用RESETLOGS重置日誌檔案後,應當立即重新執行一次完整的資料庫備份。

 

載入資料庫並還原所有資料檔案(必要時還包括還原控制檔案)後,對於不完整恢復操作有三種選項:

1UNTIL TIME

該選項將應用重做前滾資料檔案至一個特定時間,精度為秒。該選項通常用於糾正使用者錯誤,如果使用者犯了不可逆的錯誤,但知道犯錯誤的時間,那麼就可以基於時間恢復至錯誤發生之前。

2UNTIL SCN

如果已知錯誤發生時的確切的系統改變號SCN,那麼可使用該選項準確的將恢復停在錯誤發生之前,從而儘可能少的丟失資料。這需要使用如Log Miner這樣的高階工具或是使用閃回功能,確定提交事務時的SCN

3UNTIL SEQUENCE

如果歸檔日誌檔案或聯機日誌檔案組缺失,則使用該選項,它會將恢復工作停止至指定的歸檔日誌序列號。

 

預設情況下,RMAN應按最近的備份來還原,並應用重做。但不完整恢復與此不同,必須從早於恢復點的備份進行還原,再前滾到那個需要恢復到的時間點。要確保還原和恢復使用相同的UNTIL TIME,最佳辦法是在一個run塊中完成還原和恢復這兩個命令。

RMAN> run {

startup mount;

set until time = "to_date('2015-11-01 10:00:00', 'yyyy-mm-dd hh24:mi:ss')";

restore database;

recover database;

alter database open resetlogs;

}

 

命令set until time指定一個將應用到所有後續命令的時間,最終資料庫將還原和恢復到該時間點的狀態上。當然也可以單獨指定UNTIL

RMAN> restore database until time 'sysdate -7';

RMAN> recover database until time '27-OCT-08';

 

這裡如果沒有像前面run塊那樣指定時間格式,那麼時間識別依賴於初始化引數NLS_DATE_FORMAT,如上命令假設NLS_DATE_FORMAT被設定為dd-MON-rr

 

四、控制檔案的自動備份和恢復

 

資料庫嚴重依賴於控制檔案,如果控制檔案受損,資料庫將崩潰。RMAN的情況更糟,存放備份資訊的RMAN儲存庫就儲存在控制檔案中。因此,如果控制檔案損壞,一方面資料庫將崩潰,而另一方面RMAN又不能恢復它,因為RMAN所需要的資訊不可用。這是個遞迴性的問題,解決這一問題的辦法是使用RMAN目錄資料庫或者啟用控制檔案的自動備份功能。

 

要啟用控制檔案的自動備份,在RMAN提示符下執行以下命令

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

該命令執行後,每個RMAN操作都會把控制檔案和spfile檔案自動備份到已知位置的備份集中。指定好自動備份的路徑,未指定時預設儲存在閃回恢復區,檔名基於DBID。資料庫的ID是一個10位數字。DBID在啟動RMAN時可以看到,也可以透過查詢檢視v$database的欄位DBID獲知。以下設定控制檔案自動備份的儲存路徑

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'e:\rman_bak\mes\control_bak\%F';

 

若要還原控制檔案,可在資料庫處於非載入模式下執行以下命令

RMAN> restore controlfile from autobackup;

 

該命令從最近的自動備份中提取控制檔案,還原到spfile初始化引數檔案指定的位置。之後便可用還原的控制檔案載入資料庫,RMAN將可以定位所需的備份來還原資料庫的其餘部分。由於非載入模式下控制檔案尚未載入,RMAN不知道自動備份控制檔案的位置,故會從預設位置還原控制檔案(包含spfile),該位置對於Windows來說是%ORACLE_HOME%\database,對於Unix系統來說是$ORACLE_HOME\dbs。因此還原前應當首先把最近一次自動備份的控制檔案(包含spfile)複製到該路徑下。

 

如果spfile檔案也丟失了,則可用啞初始化引數檔案啟動例項:只有一個引數db_namepfile檔案(如內容只有一行db_name=mes)。然後用RMAN連線,發出以下命令替換為自己的DBID

RMAN> set dbid 1979336967;

RMAN> restore spfile from autobackup;

 

該命令將spfile檔案還原到系統預設位置(Windows%ORACLE_HOME%\databaseUnix$ORACLE_HOME\dbs)。之後再以非載入模式重啟例項,便可進行控制檔案的還原以及後續資料庫的還原。

 

資料庫的ID號一般可以從備份的控制檔名上獲得,如控制檔案備份C-1979336967-20151116-00,1979336967即是DBID。在RMAN連線到目標資料庫時也會提示DBID。檢視v$database中也包含了DBID欄位的資訊。

 

RMAN也只有這兩個關於spfile檔案和控制檔案的還原命令能在非載入模式下執行,所有其他命令只能在載入模式或開啟模式下執行。

 

下列指令碼用啞初始化引數檔案dummy.ora開始例項的啟動,逐步完成資料庫的完整還原和恢復(假定所有資料檔案、控制檔案、spfile檔案都已丟失)

run {

startup nomount pfile = C:\oracle\product\11.2.0\dbhome_1\database\dummy.ora;

set dbid = 1979336967;

restore spfile from autobackup;

shutdown abort;

startup nomount;

restore controlfile from autobackup;

alter database mount;

restore database;

recover database;

alter database open resetlogs;

}

 

如果之前沒有啟用控制檔案的自動備份,但有包含spfilecontrolfile的備份集,則命令可以指定包含該內容的備份

restore spfile from 'e:\rman_bak\mes\control_bak\C-2056489697-20180502-06';

 

五、不完整恢復實驗

 

1、實驗前備份的構建

 

更改控制檔案的備份配置,設為自動備份,並指定備份的目標路徑

RMAN> configure controlfile autobackup on;

RMAN> configure controlfile autobackup format for device type disk to 'e:\rman_bak\mes\control_bak\%F';

 

更改資料檔案備份集的目標位置和命名規則

RMAN> configure channel device type disk format 'e:\rman_bak\mes\%d_%u_%c_%T';

 

執行一次完整的資料庫增量級別1壓縮備份,並將之前(已不再需要)的歸檔日誌檔案刪除

RMAN> backup incremental level 1 as compressed backupset database plus archivelog delete all input;

 

2、清楚需要恢復的時間點

 

當故障發生後,我們需要將系統恢復到故障發生之前的某一時刻,這個時間愈靠近故障發生時刻,就愈能保證恢復後不丟失使用者資料,因此在實驗前我們先明確一下當前時間。

select sysdate from dual;

 

SYSDATE

-------------------

2018-05-03 12:09:34

 

3、故障模擬

 

假定現在由於使用者誤操作,不小心刪除了CMES表空間,導致重要資料丟失

drop tablespace cmes including contents and datafiles;

 

4、還原控制檔案

 

由於表空間的刪除,資料庫的結構發生了變化,該變化已被記入當前的控制檔案。因此如果要恢復到故障之前的狀態,必須首先恢復未刪除表空間之前的控制檔案,用原有的控制檔案載入資料庫,之後再還原表空間和資料檔案。

 

登入RMAN,構建一個run塊,設定還原時間點,然後還原控制檔案到一個指定的路徑

RMAN> run {

2> shutdown abort;

3> startup mount;

4> set until time = '2018-05-03 12:09:34';

5> restore controlfile to 'D:\control.ctl';

6> }

 

Oracle 例項已關閉

 

已連線到目標資料庫 (未啟動)

Oracle 例項已啟動

資料庫已裝載

 

系統全域性區域總計    1286066176 位元組

 

Fixed Size                     2280896 位元組

Variable Size                771752512 位元組

Database Buffers             503316480 位元組

Redo Buffers                   8716288 位元組

 

正在執行命令: SET until clause

 

啟動 restore 於 2018-05-03 12:18:35

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=189 裝置型別=DISK

 

通道 ORA_DISK_1: 正在開始還原資料檔案備份集

通道 ORA_DISK_1: 正在還原控制檔案

輸出檔名=D:\CONTROL.CTL

通道 ORA_DISK_1: 正在讀取備份片段 E:\RMAN_BAK\MES\CONTROL_BAK\C-2056489697-20180503-02

通道 ORA_DISK_1: 段控制程式碼 = E:\RMAN_BAK\MES\CONTROL_BAK\C-2056489697-20180503-02 標記 = TAG20180503T105757

通道 ORA_DISK_1: 已還原備份片段 1

通道 ORA_DISK_1: 還原完成, 用時: 00:00:01

完成 restore 於 2018-05-03 12:18:37

 

5、用還原出來的控制檔案重新載入資料庫

alter system set control_files = 'D:\control.ctl' scope = spfile;

shutdown abort

startup mount

 

6、按設定的時間點進行資料庫的還原和恢復

RMAN會話中構建以下run塊,設定還原和恢復的時間點,然後進行資料庫的還原和恢復,並開啟資料庫

RMAN> run {

allocate channel c1 type disk;

allocate channel c2 type disk;

set until time = '2018-05-03 12:09:34';

restore database;

recover database;

alter database open resetlogs;

}

 

使用目標資料庫控制檔案替代恢復目錄

分配的通道: c1

通道 c1: SID=221 裝置型別=DISK

 

分配的通道: c2

通道 c2: SID=3 裝置型別=DISK

 

正在執行命令: SET until clause

 

啟動 restore 於 2018-05-03 12:25:41

啟動 implicit crosscheck backup 於 2018-05-03 12:25:41

已交叉檢驗的 5 物件

完成 implicit crosscheck backup 於 2018-05-03 12:25:41

 

啟動 implicit crosscheck copy 於 2018-05-03 12:25:41

完成 implicit crosscheck copy 於 2018-05-03 12:25:42

 

搜尋恢復區中的所有檔案

正在編制檔案目錄...

沒有為檔案編制目錄

 

 

通道 c1: 正在開始還原資料檔案備份集

通道 c1: 正在指定從備份集還原的資料檔案

通道 c1: 將資料檔案 00001 還原到 D:\ORADATA\MES\SYSTEM01.DBF

通道 c1: 將資料檔案 00002 還原到 D:\ORADATA\MES\SYSAUX01.DBF

通道 c1: 將資料檔案 00003 還原到 D:\ORADATA\MES\UNDOTBS01.DBF

通道 c1: 將資料檔案 00004 還原到 D:\ORADATA\MES\USERS01.DBF

通道 c1: 將資料檔案 00005 還原到 D:\ORADATA\MES\EXAMPLE01.DBF

通道 c1: 正在讀取備份片段 E:\RMAN_BAK\MES\MES_85T1V56P_1_20180503

通道 c2: 正在開始還原資料檔案備份集

通道 c2: 正在指定從備份集還原的資料檔案

通道 c2: 將資料檔案 00006 還原到 D:\ORADATA\MES\CMES01.DBF

通道 c2: 將資料檔案 00007 還原到 D:\ORADATA\MES\RMES01.DBF

通道 c2: 將資料檔案 00008 還原到 D:\ORADATA\MES\HMES01.DBF

通道 c2: 將資料檔案 00009 還原到 D:\ORADATA\MES\INDX01.DBF

通道 c2: 將資料檔案 00010 還原到 D:\ORADATA\MES\FDA01.DBF

通道 c2: 正在讀取備份片段 E:\RMAN_BAK\MES\MES_86T1V58Q_1_20180503

通道 c2: 段控制程式碼 = E:\RMAN_BAK\MES\MES_86T1V58Q_1_20180503 標記 = TAG20180503T103048

通道 c2: 已還原備份片段 1

通道 c2: 還原完成, 用時: 00:00:15

通道 c1: 段控制程式碼 = E:\RMAN_BAK\MES\MES_85T1V56P_1_20180503 標記 = TAG20180503T103048

通道 c1: 已還原備份片段 1

通道 c1: 還原完成, 用時: 00:00:46

完成 restore 於 2018-05-03 12:26:30

 

啟動 recover 於 2018-05-03 12:26:30

 

正在開始介質的恢復

 

執行緒 1 序列 7 的歸檔日誌已作為檔案 D:\ORADATA\MES\REDO01.LOG 存在於磁碟上

執行緒 1 序列 8 的歸檔日誌已作為檔案 D:\ORADATA\MES\REDO02.LOG 存在於磁碟上

歸檔日誌檔名=D:\ORADATA\MES\REDO01.LOG 執行緒=1 序列=7

歸檔日誌檔名=D:\ORADATA\MES\REDO02.LOG 執行緒=1 序列=8

介質恢復完成, 用時: 00:00:03

完成 recover 於 2018-05-03 12:26:36

 

資料庫已開啟

釋放的通道: c1

釋放的通道: c2

 

7、恢復控制檔案的複用狀態

 

資料庫開啟後,檢視當前啟用的控制檔案

show parameter control_files;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_files                        string      D:\CONTROL.CTL

 

修改控制檔案引數,回到原先的多路複用狀態

alter system set control_files='d:\oradata\mes\control01.ctl','e:\fast_recovery_area\mes\control02.ctl' scope=spfile;

 

關閉資料庫

shutdown immediate

 

將控制檔案d:\control.ctl分別複製到d:\oradata\mes\control01.ctl和e:\fast_recovery_area\mes\control02.ctl中

 

重啟資料庫

startup

 

資料庫開啟後再次確認啟用的控制檔案

show parameter control_files;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_files                        string      D:\ORADATA\MES\CONTROL01.CTL,

                                                 E:\FAST_RECOVERY_AREA\MES\CONT

                                                 ROL02.CTL

 

由於恢復使用RESETLOGS重置了聯機日誌檔案(日誌序列號重新從1開始),因此建立的是資料庫的一個新化身,之前的備份和歸檔日誌已經和當前資料庫分離,因此可以在RMAN下將之前的備份和歸檔日誌刪除,並儘快重新執行一次完整的資料庫備份。

 

六、使用映像副本恢復

 

如果備份策略包括映像副本,那麼另一種還原選擇實際就是根本不用還原。由於映像副本與原資料檔案是完全相同的,因此如果磁碟上有,則可以立即使用它。需要做的就是告訴資料庫映像副本的位置,然後恢復副本。與從備份集中提取資料檔案所引起的延遲相比,映像副本的恢復可節省大量時間。

 

可使用下列RMAN命令建立整個資料庫的映像副本

RMAN> backup as copy database;

 

如果沒有更改預設的備份位置引數,那麼該命令將所有資料檔案複製到閃回恢復區作為映像副本。要使用映像副本,首先使原資料檔案離線(可能已經自動發生),然後更新控制檔案中資料檔案的指向,再恢復副本檔案。例如有如下建立的副本

RMAN> backup as copy datafile 5 format 'e:\rman_bak\mes\cmes01.dbf';

 

透過以下指令碼可以使用它

RMAN> run {

sql'alter database datafile 5 offline';

set newname for datafile 5 to 'e:\rman_bak\mes\cmes01.dbf';

switch datafile 5;

recover datafile 5;

sql'alter database datafile 5 online';

}

 

如果已對整個資料庫建立了映像副本,則可用一條命令還原整個資料庫

RMAN> switch database to copy;

 

映像副本的另一種使用方法是透過增量備份來更新副本,以維護副本的較新狀態。這要求將資料庫的完整副本作為起點,之後建立增量備份,將其應用至副本中。以下開闢兩個通道並行備份,將副本更新到閃回恢復區中,檔名格式將是OMF

RMAN> run {

allocate channel c1 type disk;

allocate channel c2 type disk;

backup incremental level 1 for recover of copy with tag 'inc_copy' database;

recover copy of database with tag 'inc_copy';

release channel c1;

release channel c2;

}

 

該命令首次執行時,RMAN嘗試增量級別1備份,但由於之前沒有級別0備份,因此執行級別0備份。該語句生成一個映像副本。recover命令在首次執行時將失敗,因為沒有可用的副本和增量備份。指令碼第二次執行時,第一個命令將執行增量級別1備份,提取自上一次備份後所有的變更塊,第二個命令則把這個增量變更應用到副本。以後每次執行都延續該行為。這種基於增量更新副本的策略可以使恢復過程非常快。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2145730/,如需轉載,請註明出處,否則將追究法律責任。

相關文章