透過搭建恢復目錄實現RMAN異地備份和恢復

llnnmc發表於2018-05-03

一、為何需要恢復目錄


RMAN備份的儲存庫總是存在於RMAN目標資料庫的控制檔案中的,這樣會有兩個問題:

1RMAN過分依賴目標資料庫控制檔案,如果控制檔案的所有副本都損壞了,將導致儲存庫丟失。這種情況下即便備份是完好的,但是由於丟失了RMAN備份的後設資料資訊,導致RMAN無法知道他們的存在而不能使用備份。

2、位於目標資料庫控制檔案中的儲存庫,只能儲存和恢復由control_file_record_keep_time引數指定的資料,預設該引數是保留7天。


因此,採用恢復目錄的手段是必要的,主要體現在以下幾點:

1、採用恢復目錄則RMAN的備份不再依賴於目標資料庫控制檔案。這樣即便控制檔案的所有副本都損壞了,透過恢復目錄也可以很方便的使用備份。較好的做法是將恢復目錄資料庫存放在與目標資料庫不同的機器上。

2、恢復目錄可以儲存RMAN指令碼。沒有恢復目錄,則指令碼必須做為作業系統檔案儲存在執行RMAN可執行檔案的機器上。

3、恢復目錄可以儲存多個資料庫的後設資料,做為多個資料庫備份和恢復資訊的集中式儲存庫。並且一個目錄可用於任何平臺上的資料庫,即它的連線過程是跨平臺的。

4、使用恢復目錄還可以簡化一些操作。如恢復過程對於目標資料庫不必處於MOUNT模式,當連線到恢復目錄時,RMAN能夠自動定位SPFILE和控制檔案的備份並還原它們,簡化恢復嚴重受損的資料庫的引導過程。

5、恢復目錄儲存後設資料的期限長度沒有限制。而基於控制檔案的儲存庫保留資料的時間長度則完全由例項引數control_file_record_keep_time來確定。


恢復目錄資料庫通常不是特別龐大或繁忙的資料庫,不會有很高的資源要求,但卻能夠顯著增強RMAN功能。


RMAN可執行檔案可以同時連線最多三個資料庫例項:

1、將對其應用備份或還原及恢復操作的一個目標資料庫;

2、儲存描述目標資料庫及其所有可用備份的後設資料的恢復目錄資料庫;

3、使用目標資料庫的備份建立的一個輔助資料庫。


二、利用恢復目錄資料庫實現異地備份


有時我們希望將RMAN備份儲存在異地,以便更好的容災,這裡說明一下在Windows環境中的實現方法。


1、修改本地資料庫Oracle後臺服務


修改Oracle監聽服務和資料庫服務的登入方式,用確定的賬戶登入,而不是預設的本地系統賬戶。

透過搭建恢復目錄實現RMAN異地備份和恢復


透過搭建恢復目錄實現RMAN異地備份和恢復


修改後重啟這兩個服務。


2、在異地機器上建立好訪問本地目標資料庫的服務名,保證能夠正常連線


mes =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = vm-ora11g-1)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = mes)

    )

  )


3、在異地機器上搭建恢復目錄資料庫,專門用於RMAN備份的後設資料管理。建立恢復目錄並非必須,但為了更好的異地容災,防止本地機器遭到破壞後導致所有控制檔案丟失,那麼即便存在RMAN備份,也是難以使用的。


在異地機器上建立恢復目錄分為以下幾個步驟:


1)建立一個資料庫用作恢復目錄。如建立一個資料庫名為catdb


2)建立一個儲存目錄物件的表空間

SQL> create tablespace rmancat datafile 'd:\oradata\catdb\rmancat01.dbf' size 200m;


3)建立一個預設使用儲存目錄物件表空間的使用者

SQL> create user rman identified by rman default tablespace rmancat quota unlimited on rmancat;


4)授予該使用者recovery_catalog_owner角色,它包括了必要的物件許可權

SQL> grant recovery_catalog_owner to rman;


5)用RMAN連線到目錄資料庫,並使用create catalog命令建立目錄

C:\> rman catalog rman/rman@catdb

RMAN> create catalog;


6)用RMANSYS使用者身份連線到目標資料庫

RMAN> connect target sys/mesHz2@mes


7)在目錄中註冊目標資料庫,從而將相關資訊從目標資料庫的控制檔案複製到目錄中

RMAN> register database;


8)同時連線到目錄和目標資料庫進行備份和恢復操作

C:\> rman target sys/mesHz2@mes catalog rman/rman


該命令對目標資料庫和目錄資料庫所在環境的RMAN版本關係是有要求的,即RMAN可執行檔案的版本必須與目標資料庫的版本相同,而建立恢復目錄的RMAN版本必須等於或高於在其中註冊的任何資料庫的版本。


4、建立異地備份指令碼


RMAN連線成功後可建立常用的備份指令碼,指令碼將自動儲存在恢復目錄資料庫中。


為達到完善的備份效果,先修改目標資料庫RMAN備份引數,對控制檔案和SPFILE檔案開啟自動備份

RMAN> configure controlfile autobackup on;

RMAN> configure controlfile autobackup format for device type disk to '';


以下是採用並行方式的多通道備份指令碼,執行增量級別0備份,自動完成對備份集的檢查和清理,手工指定備份位置到網路機器vm-catdb的路徑上,而控制檔案和SPFILE檔案根據配置將自動備份

create global script bak_0 {

sql 'alter system archive log current';

crosscheck backup;

delete noprompt expired backup;

crosscheck archivelog all;

delete noprompt expired archivelog all;

allocate channel c1 type disk;

allocate channel c2 type disk;

backup incremental level 0 as compressed backupset

database

format '';

backup as compressed backupset

archivelog all delete all input

format '';

delete noprompt obsolete;

release channel c1;

release channel c2;

}


以下則是對應的增量級別1備份的指令碼

create global script bak_1 {

sql 'alter system archive log current';

crosscheck backup;

delete noprompt expired backup;

crosscheck archivelog all;

delete noprompt expired archivelog all;

allocate channel c1 type disk;

allocate channel c2 type disk;

backup incremental level 1 as compressed backupset

database

format '';

backup as compressed backupset

archivelog all delete all input

format '';

delete noprompt obsolete;

release channel c1;

release channel c2;

}


5、執行異地備份


在恢復目錄中執行0級備份指令碼來完成對目標資料庫的全備份

RMAN> run {execute script bak_0;}


再次備份時可執行1級備份指令碼來完成對目標資料庫的增量備份

RMAN> run {execute script bak_1;}


三、管理恢復目錄


目錄資料庫也可以和目標資料庫是同一個資料庫。這種情況下就應當在目標資料庫中建立一個用於存放RMAN恢復後設資料的恢復目錄表空間rmancat,並將管理恢復目錄的使用者rman的預設表空間指向該表空間。之後以該使用者連線到目錄資料庫,同時也就連線到了目標資料庫,因為它們是同一個庫,然後再建立目錄

create catalog tablespace rmancat;

之後再註冊資料庫

register database;


目錄資料庫與任何生產資料庫一樣,應該執行在歸檔日誌模式下,定期進行完整的備份。但是不要只是使用RMAN來備份恢復目錄資料庫,因為如果目錄資料庫損壞,那麼還原它的任何嘗試都會出現一個遞迴性的問題:如果包含目錄資訊的控制檔案或表空間受損,那麼開啟資料庫並作為目錄連線它的任何操作都將失敗。因此,透過其它方式保護目錄資料庫是必要的,如使用者管理的備份。


如果出於某種原因沒有連線到目錄來執行備份,那麼目錄儲存庫必須與控制檔案儲存庫重新同步。在RMAN下一次同時連線到目標資料庫和目錄時會自動執行同步操作,重新同步操作將所有資訊從控制檔案儲存庫轉移到目錄中,從而保持它是最新的。因此,只有當沒有執行重新同步的週期超過control_file_record_keep_time時才會丟失有關備份的資料。


重新同步操作也可以在RMAN提示符中使用重新同步目錄的命令來強制執行

RMAN> resync catalog;


同時連線到目標資料庫和恢復目錄,可以用以下命令從恢復目錄中登出目標資料庫

RMAN> unregister database;


如果要刪除建立的目錄,則命令為

RMAN> drop catalog;


透過目錄資料庫提供的一些檢視,包括rc_databaserc_tablespace rc_datafilerc_backup_setrc_backup_piece等,可以查詢在恢復目錄中註冊的目標資料庫資訊以及備份的資訊,另外還包括一些記錄RMAN執行狀態的資訊,如rc_rman_configuration等。這些檢視都是以字母rc打頭

conn rman/rman


檢視恢復目錄中的RMAN配置資訊

col db_unique_name for a20

col name for a50

col value for a70

select db_unique_name, name, value from rc_rman_configuration;


DB_UNIQUE_NAME       NAME                                               VALUE

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

MES                  CONTROLFILE AUTOBACKUP                             ON

MES                  CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE      DISK TO 'd:\rman_bak\mes\control_bak\%F'

MES                  CHANNEL                                            DEVICE TYPE DISK FORMAT   'd:\rman_bak\mes\%d_%u_%c_%T'


檢視恢復目錄中的資料庫資訊

select dbid, name from rc_database;


      DBID NAME

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

2056489697 MES


檢視恢復目錄中的表空間資訊

col name for a20

select db_name, ts#, name, creation_time, included_in_database_backup, bigfile, temporary from rc_tablespace;


DB_NAME         TS# NAME                 CREATION_TIME       INC BIG TEM

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

MES               0 SYSTEM               2013-10-09 18:23:41 YES NO  NO

MES               1 SYSAUX               2013-10-09 18:23:44 YES NO  NO

MES               2 UNDOTBS1             2013-10-09 19:09:38 YES NO  NO

MES               3 TEMP                 2018-04-08 13:01:44 NO  NO  YES

MES               4 USERS                2013-10-09 18:23:53 YES NO  NO

MES              11 FDA                  2018-04-24 09:17:41 YES NO  NO

MES               7 CMES                 2018-04-17 21:03:01 YES NO  NO

MES               8 RMES                 2018-04-17 21:03:34 YES NO  NO

MES               9 HMES                 2018-04-17 21:04:11 YES NO  NO

MES              10 INDX                 2018-04-17 21:04:54 YES NO  NO

MES               6 EXAMPLE              2018-04-08 13:02:46 YES NO  NO


檢視恢復目錄中的資料檔案資訊

col name for a50

select db_name, ts#, tablespace_name, file#, name, bytes/1024/1024 size_m, creation_time from rc_datafile;


DB_NAME         TS# TABLESPACE_NAME                     FILE# NAME                                           SIZE_M CREATION_TIME

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

MES               0 SYSTEM                                  1 D:\ORADATA\MES\SYSTEM01.DBF                       770 2013-10-09 18:23:41

MES               1 SYSAUX                                  2 D:\ORADATA\MES\SYSAUX01.DBF                       580 2013-10-09 18:23:44

MES               2 UNDOTBS1                                3 D:\ORADATA\MES\UNDOTBS01.DBF                      100 2013-10-09 19:09:38

MES               4 USERS                                   4 D:\ORADATA\MES\USERS01.DBF                          5 2013-10-09 18:23:53

MES               6 EXAMPLE                                 5 D:\ORADATA\MES\EXAMPLE01.DBF                   331.25 2018-04-08 13:02:46

MES               7 CMES                                    6 D:\ORADATA\MES\CMES01.DBF                         100 2018-04-17 21:03:01

MES               8 RMES                                    7 D:\ORADATA\MES\RMES01.DBF                         100 2018-04-17 21:03:34

MES               9 HMES                                    8 D:\ORADATA\MES\HMES01.DBF                         100 2018-04-17 21:04:11

MES              10 INDX                                    9 D:\ORADATA\MES\INDX01.DBF                         100 2018-04-17 21:04:54

MES              11 FDA                                    10 D:\ORADATA\MES\FDA01.DBF                          100 2018-04-24 09:17:41


檢視恢復目錄中的備份集資訊

select db_id, bs_key, backup_type, incremental_level, start_time, completion_time, elapsed_seconds, controlfile_included from rc_backup_set;


     DB_ID     BS_KEY B INCREMENTAL_LEVEL START_TIME          COMPLETION_TIME     ELAPSED_SECONDS CONTROL

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

2056489697       6303 D                 0 2018-05-02 11:59:20 2018-05-02 11:59:32              12 NONE

2056489697       6304 D                 0 2018-05-02 11:59:35 2018-05-02 11:59:36               1 BACKUP

2056489697       6305 D                 0 2018-05-02 11:59:37 2018-05-02 11:59:37               0 NONE

2056489697       6306 D                 0 2018-05-02 11:59:20 2018-05-02 11:59:39              19 NONE

2056489697       6343 L                   2018-05-02 11:59:42 2018-05-02 11:59:42               0 NONE

2056489697       6344 L                   2018-05-02 11:59:42 2018-05-02 11:59:43               1 NONE

2056489697       6345 L                   2018-05-02 11:59:44 2018-05-02 11:59:44               0 NONE

2056489697       6370 D                   2018-05-02 11:59:46 2018-05-02 11:59:48               2 BACKUP


檢視恢復目錄中的備份片資訊

col handle for a70

select db_id, bp_key, bs_key, backup_type, incremental_level, handle, tag, start_time, completion_time, elapsed_seconds, bytes, compressed from rc_backup_piece;


     DB_ID     BP_KEY     BS_KEY B INCREMENTAL_LEVEL HANDLE                                                         TAG                              START_TIME          COMPLETION_TIME     ELAPSED_SECONDS      BYTES COM

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

2056489697       6307       6303 D                 0                     TAG20180502T115920               2018-05-02 11:59:22 2018-05-02 11:59:31        9  105791488 YES

2056489697       6308       6304 D                 0                     TAG20180502T115920               2018-05-02 11:59:36 2018-05-02 11:59:36        0   1130496 YES

2056489697       6309       6305 D                 0                     TAG20180502T115920               2018-05-02 11:59:37 2018-05-02 11:59:37        0     81920 YES

2056489697       6352       6344 L                                       TAG20180502T115942               2018-05-02 11:59:42 2018-05-02 11:59:42        0   1102848 YES

2056489697       6310       6306 D                 0                     TAG20180502T115920               2018-05-02 11:59:22 2018-05-02 11:59:39       17  211460096 YES

2056489697       6351       6343 L                                       TAG20180502T115942               2018-05-02 11:59:42 2018-05-02 11:59:42        0    376832 YES

2056489697       6353       6345 L                                       TAG20180502T115942               2018-05-02 11:59:44 2018-05-02 11:59:44        0      8704 YES

2056489697       6372       6370 D                           TAG20180502T115946               2018-05-02 11:59:47 2018-05-02 11:59:48        1   10141696 NO


四、使用恢復目錄儲存RMAN指令碼


RMAN指令碼可以作為作業系統檔案來儲存,如以下是指令碼檔案e:\script1.rman內容

run {

allocate channel c1 type disk;

allocate channel c2 type disk;

backup incremental level 1 as compressed backupset

database plus archivelog delete all input;

release channel c1;

release channel c2;

}


執行指令碼時,用RMAN連線到目標資料庫和恢復目錄,並用@符連線和執行

C:\> rman target / catalog rman/rman@catdb @e:\script1.rman


也可以直接把指令碼儲存在恢復目錄中。以下一些命令是關於指令碼的,注意這些命令必須同時連線到目標資料庫和目錄資料庫才能使用,指令碼建立同時會進行語法有效性檢查。預設情況下,指令碼是目標資料庫特有的,使用關鍵字global表示指令碼對於所有目標資料庫都可見,否則同樣的指令碼需要分別連線到每個目標資料庫去建立它。


建立指令碼

create { global } script


替換指令碼

replace { global } script


執行指令碼

execute { global } script


顯示指令碼

print { global } script


列出指令碼

list { global } script names


刪除指令碼

delete { global } script


可以使用如下的命令將作為作業系統檔案儲存的RMAN指令碼儲存為目錄資料庫中的指令碼

RMAN> create script script1 from file 'e:\script1.rman';


沒有直接編輯指令碼的命令,但是可以透過查詢檢視rc_stored_scriptrc_stored_script_line來檢視儲存的指令碼,並可用DML來編輯它們。為方便編輯,也可以將指令碼轉出為作業系統檔案

RMAN> print script script1 to file 'e:\script1.rman';


透過檢視rc_stored_scriptrc_stored_script_line來查詢儲存的指令碼,需要時可以直接透過DML操作來編輯

col script_name for a30

col script_comment for a30

select * from rc_stored_script;


    DB_KEY DB_NAME  SCRIPT_NAME                    SCRIPT_COMMENT

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

           GLOBAL   bak_1

         1 MES      script1

           GLOBAL   bak_0


col script_name for a30

col text for a80

select * from rc_stored_script_line where script_name = 'script1';


    DB_KEY SCRIPT_NAME                          LINE TEXT

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

         1 script1                                 1 run {

         1 script1                                 2 allocate channel c1 type disk;

         1 script1                                 3 allocate channel c2 type disk;

         1 script1                                 4 backup incremental level 1 as compressed backupset

         1 script1                                 5 database plus archivelog delete all input;

         1 script1                                 6 release channel c1;

         1 script1                                 7 release channel c2;

         1 script1                                 8 }


最後可以在恢復目錄中執行儲存的指令碼,目錄首先會自動執行一次與目標資料庫的同步,然後再開始執行備份

RMAN> run {execute script script1;}


五、資料庫破壞恢復實驗


這裡模擬一個故障處理的過程,假定目標資料庫的引數檔案和控制檔案都已損壞,資料檔案也部分損壞。並且恢復目錄資料庫因故障無法啟動,雖然備份存在於恢復目錄資料庫伺服器的磁碟上,但RMAN此時無法直接找到這些備份,這種情況看如何能將系統恢復。


實驗前的工作:


1、在恢復目錄機器上用RMAN連線到目標資料庫和恢復目錄資料庫,並確認備份完整

C:\Users\Administrator>rman target sys/mesHz2@mes catalog rman/rman

RMAN> resync catalog;

RMAN> list backup;


如果目標資料庫沒有備份,則實驗前先做一次完整的備份。


2、將恢復目錄資料庫關閉,模擬恢復目錄不可用。

shutdown immediate;


3、用shutdown abort直接關閉目標資料庫,刪除引數檔案SPFILEPFILE、控制檔案的所有副本、資料檔案cmes01.dbf


恢復實驗:


1、在恢復目錄資料庫伺服器上用RMAN命令連線到目標資料庫,並啟動到nomountRMAN將使用一個啞引數檔案來啟動例項

C:\Users\Administrator>rman target sys/mesHz2@mes


恢復管理器: Release 11.2.0.4.0 - Production on 星期三 5月 2 22:54:27 2018


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


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


RMAN> startup nomount


啟動失敗: ORA-01078: failure in processing system parameters

LRM-00109: ???????????????? 'C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\INITMES.ORA'


在沒有引數檔案的情況下啟動 Oracle 例項以檢索 spfile

Oracle 例項已啟動


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


Fixed Size                     2288080 位元組

Variable Size                285214256 位元組

Database Buffers             775946240 位元組

Redo Buffers                   5488640 位元組


2、因為知道磁碟備份的所在位置,因此可以手動指定備份路徑給RMAN。首先恢復引數檔案,然後使用恢復的SPFILE重啟例項,再還原控制檔案

RMAN> restore spfile from '';


啟動 restore 於 2018-05-02 22:56:06

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

分配的通道: ORA_DISK_1

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


通道 ORA_DISK_1: 正在從 AUTOBACKUP 還原 spfile

通道 ORA_DISK_1: 從 AUTOBACKUP 還原 SPFILE 已完成

完成 restore 於 2018-05-02 22:56:10


RMAN> shutdown abort


Oracle 例項已關閉


RMAN> startup nomount


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

Oracle 例項已啟動


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


Fixed Size                     2280896 位元組

Variable Size                771752512 位元組

Database Buffers             503316480 位元組

Redo Buffers                   8716288 位元組


RMAN> restore controlfile from '';


啟動 restore 於 2018-05-02 22:59:05

分配的通道: ORA_DISK_1

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


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

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

輸出檔名=D:\ORADATA\MES\CONTROL01.CTL

輸出檔名=E:\FAST_RECOVERY_AREA\MES\CONTROL02.CTL

完成 restore 於 2018-05-02 22:59:08


3、用恢復的控制檔案重啟例項到mount狀態,根據已知的備份集儲存位置,重新在儲存庫中編目和註冊備份檔案

RMAN> shutdown abort


Oracle 例項已關閉


RMAN> startup mount


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

Oracle 例項已啟動

資料庫已裝載


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


Fixed Size                     2280896 位元組

Variable Size                771752512 位元組

Database Buffers             503316480 位元組

Redo Buffers                   8716288 位元組


為保證恢復成功,先更改RMAN備份檔案所在路徑,再用crosscheck backup命令做交叉檢查,確認備份狀態為expired已失效,再用delete expired命令將備份登記刪除,當然這個只是刪除了備份記錄,而磁碟上的備份檔案不會被刪掉

RMAN> crosscheck backup;


啟動 implicit crosscheck backup 於 2018-05-02 23:01:55

分配的通道: ORA_DISK_1

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

已交叉檢驗的 5 物件

完成 implicit crosscheck backup 於 2018-05-02 23:01:57


啟動 implicit crosscheck copy 於 2018-05-02 23:01:57

使用通道 ORA_DISK_1

完成 implicit crosscheck copy 於 2018-05-02 23:01:57


搜尋恢復區中的所有檔案

正在編制檔案目錄...

目錄編制完畢


已列入目錄的檔案的列表

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

檔名: E:\FAST_RECOVERY_AREA\MES\archivelog\ARC_7A938AE1_1_975085062_5.LOG


使用通道 ORA_DISK_1

交叉校驗備份片段: 找到為 'EXPIRED'

備份片段控制程式碼=\\VM-CATDB\E\RMAN_BAK\MES\D_MES_7NT1T9HG_1_20180502 RECID=224 STAMP=975087154

交叉校驗備份片段: 找到為 'EXPIRED'

備份片段控制程式碼=\\VM-CATDB\E\RMAN_BAK\MES\D_MES_7OT1T9HG_1_20180502 RECID=225 STAMP=975087154

交叉校驗備份片段: 找到為 'EXPIRED'

備份片段控制程式碼=\\VM-CATDB\E\RMAN_BAK\MES\A_MES_7QT1T9IE_1_20180502 RECID=226 STAMP=975087182

交叉校驗備份片段: 找到為 'EXPIRED'

備份片段控制程式碼=\\VM-CATDB\E\RMAN_BAK\MES\A_MES_7PT1T9IE_1_20180502 RECID=227 STAMP=975087182

交叉校驗備份片段: 找到為 'EXPIRED'

備份片段控制程式碼=\\VM-CATDB\E\RMAN_BAK\MES\A_MES_7RT1T9IF_1_20180502 RECID=228 STAMP=975087183

已交叉檢驗的 5 物件


RMAN> delete expired backup;


使用通道 ORA_DISK_1


備份片段列表

BP 關鍵字  BS 關鍵字  Pc# Cp# 狀態      裝置型別段名稱

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

224     224     1   1   EXPIRED     DISK       

225     225     1   1   EXPIRED     DISK       

226     226     1   1   EXPIRED     DISK       

227     227     1   1   EXPIRED     DISK       

228     228     1   1   EXPIRED     DISK       


是否確定要刪除以上物件 (輸入 YES 或 NO)? y

已刪除備份片段

備份片段控制程式碼=\\VM-CATDB\E\RMAN_BAK\MES\D_MES_7NT1T9HG_1_20180502 RECID=224 STAMP=975087154

已刪除備份片段

備份片段控制程式碼=\\VM-CATDB\E\RMAN_BAK\MES\D_MES_7OT1T9HG_1_20180502 RECID=225 STAMP=975087154

已刪除備份片段

備份片段控制程式碼=\\VM-CATDB\E\RMAN_BAK\MES\A_MES_7QT1T9IE_1_20180502 RECID=226 STAMP=975087182

已刪除備份片段

備份片段控制程式碼=\\VM-CATDB\E\RMAN_BAK\MES\A_MES_7PT1T9IE_1_20180502 RECID=227 STAMP=975087182

已刪除備份片段

備份片段控制程式碼=\\VM-CATDB\E\RMAN_BAK\MES\A_MES_7RT1T9IF_1_20180502 RECID=228 STAMP=975087183

5 EXPIRED 物件已刪除


RMAN> list backup;


說明與資料檔案庫中的任何備份都不匹配


現在再把剛才備份的路徑改回,表示備份已經拿來,然後重新編目和註冊備份,讓RMAN知道備份的存在

RMAN> catalog start with '';


搜尋與樣式 匹配的所有檔案


資料庫未知檔案的列表

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

檔名:

檔名:

檔名:

檔名:

檔名:

檔名:


是否確實要將上述檔案列入目錄 (輸入 YES 或 NO)? y

正在編制檔案目錄...

目錄編制完畢


已列入目錄的檔案的列表

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

檔名:

檔名:

檔名:

檔名:

檔名:

檔名:


4、執行資料庫還原

RMAN> restore database;


啟動 restore 於 2018-05-02 23:05:55

使用通道 ORA_DISK_1


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

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

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

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

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

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

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

通道 ORA_DISK_1: 正在讀取備份片段

通道 ORA_DISK_1: 段控制程式碼 = 標記 = TAG20180502T173232

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

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

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

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

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

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

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

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

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

通道 ORA_DISK_1: 正在讀取備份片段

通道 ORA_DISK_1: 段控制程式碼 = 標記 = TAG20180502T173232

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

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

完成 restore 於 2018-05-02 23:06:57


5、為了確保資料庫的完全恢復,可能還需要利用歸檔日誌,因此需將歸檔日誌編目。

首先檢視RMAN儲存庫中關於歸檔日誌的記錄,這裡顯示沒有記錄

RMAN> list archivelog all;


說明與資料檔案庫中的任何歸檔日誌都不匹配


重新編目

RMAN> catalog start with 'E:\fast_recovery_area\mes\archivelog';


搜尋與樣式 E:\fast_recovery_area\mes\archivelog 匹配的所有檔案


資料庫未知檔案的列表

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

檔名: E:\FAST_RECOVERY_AREA\MES\archivelog\ARC_7A938AE1_1_975085062_5.LOG


是否確實要將上述檔案列入目錄 (輸入 YES 或 NO)? y

正在編制檔案目錄...

目錄編制完畢


已列入目錄的檔案的列表

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

檔名: E:\FAST_RECOVERY_AREA\MES\archivelog\ARC_7A938AE1_1_975085062_5.LOG


RMAN> list archivelog all;


db_unique_name 為 MES 的資料庫的歸檔日誌副本列表

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


關鍵字     執行緒序列     S 時間下限

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

6       1    5       A 2018-05-02 17:32:59

        名稱: E:\FAST_RECOVERY_AREA\MES\ARCHIVELOG\ARC_7A938AE1_1_975085062_5.LOG


6、執行資料庫的完全恢復

RMAN> recover database;


啟動 recover 於 2018-05-02 23:22:30

使用通道 ORA_DISK_1


正在開始介質的恢復


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

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

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

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

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

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

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

完成 recover 於 2018-05-02 23:22:32


7、開啟資料庫並重置日誌序列

RMAN> alter database open resetlogs;


資料庫已開啟


至此,完成了mes資料庫破壞後的完全恢復。


8、實驗完畢後開啟恢復目錄資料庫,之後應在恢復目錄機器上重新註冊資料庫的新化身

C:\Users\Administrator>rman target sys/mesHz2@mes catalog rman/rman


恢復管理器: Release 11.2.0.4.0 - Production on 星期三 5月 2 23:24:54 2018


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


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

連線到恢復目錄資料庫


RMAN> unregister database;


資料庫名為 "MES" 且 DBID 為 2056489697


是否確實要登出資料庫 (輸入 YES 或 NO)? y

已從恢復目錄中登出資料庫


RMAN> register database;


註冊在恢復目錄中的資料庫

正在啟動恢復目錄的全部重新同步

完成全部重新同步


9、由於生成了資料庫新的化身,以前所做的備份和歸檔都已不再有用,可以用RMAN命令將其刪除和登出,檔案不再保留,新的資料庫應當儘快重做備份。


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

相關文章