1、概念:
1、恢複目錄資料庫:恢複目錄資料庫是指專門用于存放護膚目錄方案的oracle資料庫,注意,如果使用恢複目錄存放rman中繼資料,那麼一定要将恢複目錄存放到堵路的恢複目錄資料庫中,而不應該存放到目标資料庫。
2、恢複目錄所有者:是指在恢複目錄資料庫中用于管理恢複目錄資料庫對象的資料庫使用者,注意:恢複目錄所有者必須具有recovery_catalog_owenr 角色,并且恢複目錄所有者不能是sys使用者。
3、恢複目錄方案:是指恢複目錄資料庫對象的集合,其名稱世界就是恢複目錄所有者的名稱,為了建立恢複目錄方案,必須在rman中以恢複目錄所有者身份登入,然後執行create catalog指令。
4、。規劃恢複目錄空間,在建立恢複目錄之前,必須規劃恢複目錄所占用的空間,多數情況下,每個目标資料庫的rman中繼資料每年大約占用15M的恢複目錄空間,是以,如果恢複目錄方案隻存放一個目标資料庫的rman中繼資料,那麼每年大于需要15M空間,若果存放兩個目标資料庫的rman中繼資料,那麼每年大約需要30M空間。
5、恢複目錄的内容
存放資料檔案、控制檔案、歸檔日志、和spfile的備份集和備份片資訊。
存放資料檔案、控制檔案、歸檔日志映像副本的資訊。
存放目标資料庫的實體結構資訊。
存放資料庫副本資訊。
存放存儲腳本資訊。
6、恢複目錄的優點:
存放多個目标資料庫的rman中繼資料,目标資料庫控制檔案隻能存放其自身資料庫的rman中繼資料。而不能存放其他目标資料庫的rman中繼資料。
存放同一個目标資料庫不同副本的中繼資料。在執行了不完全恢複。用resetlogs選項打開目标資料庫之後,會生成一個新的資料庫副本。
存放目标資料庫的曆史中繼資料,如果使用目标資料庫控制檔案存放rman中繼資料,當時間達到初始化參數control_file_record_time的值時,rman中繼資料會被覆寫,如果使用恢複目錄存放rman 中繼資料,那麼恢複目錄可以永久保留rman中繼資料。
存放存儲腳本,當使用目标資料庫控制檔案存放rman中繼資料時,不能建立存儲腳本,如果使用恢複目錄存放rman中繼資料,則可以建立存儲腳本。
2、建立恢複目錄:
1、建立恢複目錄表空間:為了易于管理和備份恢複目錄,應該講恢複目錄放在專門的表空間上,如果一個恢複目錄隻存放一個目标資料庫的rman中繼資料,那麼應該升值其尺寸不低于15M,首先建立恢複目錄表空間:
SQL> create tablespace rman_ts datafile '$ORACLE_BASE/oradata/test/rman.dbf' size 15M;
2、建立恢複目錄所有者。除了sys使用者之外,恢複目錄資料庫的其他資料庫使用者都可以作為恢複目錄所有者,為了撿回恢複目錄的管理,應該在恢複目錄資料庫上建立專門的恢複目錄所有者。當建立恢複目錄所有者時,應該将恢複目錄表空間設定為其預設表空間,下面建立RMAN 恢複目錄。
SQL > create user rman identified by rman default tablespace rman_ts;
3、授予恢複目錄所有者角色。恢複目錄所有者必須具有recovery_catalog_owner角色。另外,當建立恢複目錄時,需要連接配接到資料庫,并且在恢複目錄表空間上鍵表。是以,還應該為恢複目錄所有者授予 connect 和 resource 角色。
SQL > grant connect ,resource ,recovery_catalog_owner to rman ;
4、建立恢複目錄,使用rman指令的creat catalog來完成的。當建立恢複目錄時,必須以恢複目錄所有者身份連接配接到恢複目錄資料庫,當運作rman時,通過指定catalog選項可以連接配接到恢複目錄資料庫。
c:\ > rman catalog rman/rman@catdb
RMAN > create catalog;
5、注冊目标資料庫:建立了恢複目錄之後,為了将目标資料庫的rman中繼資料存放到恢複目錄中,必須連接配接到目标資料庫,并使用register database 指令可以檢查注冊是否成功,示例:
RMAN > connect target sys/liu123 @mynewdb
RMAN > register database;
RMAN >report schema;
3、使用存儲腳本:
存儲腳本用于存放頻繁的備份、轉儲、和恢複操作。通過使用預先建立好的存儲腳本,不僅可以避免操作人員執行互動操作時可能發生的錯誤,而且可以使系統自動執行備份操作。注意:存儲腳本隻能存放在恢複目錄中。
1、建立存儲腳本: 用create script指令來完成的,注意,當建立存儲腳本時,必須同時連接配接到目标資料庫和恢複目錄。下面以建立用于備份資料庫所有資料檔案、控制檔案和歸檔日志的存儲腳本bak_database為例,說明。
C:\> rman catalog rman/rman@catdb target sys/liu123@mynewdb
RMAN > create script bak_database{
backup format = 'd:\backup|%d_%s.bak'
database include current controlfile
plus archivelog;
sql 'alter system archive log current';
}
2、運作存儲腳本
運作存儲腳本有兩種方法:第一種方法是在rman提示符下運作存儲腳本,第二種方法是在指令行直接影響存儲腳本,通過運作存儲腳本,可以執行備份、轉儲、和恢複等操作。
1、在rman提示符下運作存儲腳本。是使用execute script指令來完成的。注意,因為execute script指令時作業指令,是以必須在run塊内指定該指令。RMAN > run{ execute script bak_database; }
2、在指令行運作存儲腳本。是通過指定script選項來完成的,示例:
c:\> rman catalog rman/rman@catbd target sys/oracle@mynewdb script bak_dtyabase;
3、顯示存儲腳本内容,是使用print script指令來完成的。示例:
RMAN > print script bak_database;
4 、替換存儲腳本:使用replace script指令來完成的。如果存儲腳本内同不适合,那麼使用replace script可以替換其原來的内容。
RMAN > replace script bak_database {
backup database format = 'd:\backup\%d_%s.bak';
5、删除存儲腳本:
使用delete script指令來完成的,如果存儲腳本不在需要,可以使用此指令删除:
RMAN > delete script bak_database;
6、列出所有存儲腳本
是使用list script names指令完成的:
RMAN > list scropt names;
4、維護恢複目錄:
1、重新同步恢複目錄:是使用resync catalog 指令來完成的,是為了是恢複目錄和目标資料庫控制檔案保持同步。當目标資料庫實體結構發生改變(增加和删除表空間,增加資料檔案)時,應該重新同步恢複目錄:
RMAN > resync catalog ;
當執行了resync catalog 指令之後,rman會建立快照控制檔案,比較恢複目錄和快照控制檔案,然後使用快照控制檔案資訊更新恢複目錄。注意:當執行某些rman指令(如:backup、delete 等)時,會自動重新同步恢複目錄。
2、登出目标資料庫:使用unregister database指令來完成,登出目标資料庫後,會丢失早于contrilfile_record_keep_time設定時間的rman資料庫記錄,示例如下:
RMAN > unregister database;
3、更新恢複目錄:使用ungrade catalog指令來完成的。如果rman用戶端版本高于恢複目錄版本号,那麼應該更新恢複目錄。假定rman用戶端版本号為10.1.0而恢複目錄的版本号是9.2.0 那麼應該更新恢複目錄到10.1.0. 注意,當更新恢複目錄時,需要執行 兩次ungrade catalog指令。
c:\> rman catalog rman/rman@catdb target sys/liu123 @demo
RMAN >upgrade catalog ;
4、删除恢複目錄:删除恢複目錄時使用drop catalog 指令來完成的。注意需要執行兩次這個指令。示例:
RMAN >drop catalog ;
5、恢複資料庫到早期資料庫副本:
當執行了不完全恢複後,需要使用alter database open resetlogs。指令打開資料庫,當使用alter database open resetlogs指令打開資料庫後,會建立新的資料庫副本,如果你希望将資料庫恢複到早期副本的狀态,則必須使用reset database to incarnation 指令設定目前書庫副本為早期副本。然後執行相應的恢複操作。具體步驟如下:
1、确定資料庫副本的副本鍵值。使用list incarnation of database 指令可以列出所有的資料庫副本。并顯示資料庫副本鍵值。
RMAN > list incarnation of database ;

reset time 用于辨別執行resetlogs操作時的時間。
2、設定資料庫到早期副本。使用reset database to incarnation 指令可以設定資料庫到早期副本。當設定資料庫到早期副本時,需要制定書庫副本鍵值。注意,當設定資料庫到早期副本時,要求目标資料庫鼻息處于mount狀态. 示例:
RMAN > startup force mount
RMAN > reset database to incarnation 2;
3、轉儲早期版本的控制檔案。當轉儲控制檔案時,要求目标資料庫必須處于nomount狀态。注意,當轉儲早期版本的控制檔案時,必須確定控制檔案備份存在。示例:
RMAN > run {
startup force nomount ;
set unil scn = 656740;
restore controlfile;
4、恢複資料庫到早期副本。在轉儲了早期版本的控制檔案以後,就可以護膚資料庫到早期版本了。應為轉儲資料庫和恢複資料庫必須在mount狀态下完成。是以應該首先裝載資料庫,然後執行轉儲和恢複等指令:
RMNA > run {
alter database mount;
restore database;
recover database;
alter datbase open resetlogs;
5、查詢恢複目錄:
1、RC_DATABASE 視圖:該資料字典視圖用于顯示在恢複目錄中已經注冊的多有目标資料庫資訊。下面以顯示目标資料庫DBID,資料庫名和執行和resetlogs操作時的scn值 為例。說明使用該資料字典視圖的方法。示例如下:
SQL > select dbid , name , resetlogs_change# from rc_database;
2、RC_TABLESPACEA視圖:該資料字典視圖用于顯示在恢複目錄中目标資料庫的表空間資訊。下面以顯示目标資料庫demo的所有表空間編号,名稱,建立時的scn值為例。說明使用該資料字典視圖的方法。
SQL> select ts#, name ,creation_change# from rc_tablespace where db_name= 'demo';
3、RC_DATFILE 視圖。顯示在恢複目錄中記載的目标資料庫的資料檔案資訊。下面顯示目标資料庫demo的所喲資料檔案編号,名稱,和尺寸。說明使用該資料字典的方法:
SQL> select file# , name , bytes from rc_datafile where db_name = 'demo' ;
4、RC_STORED_SCRIPT : 用于顯示在恢複目錄中所記載的所有存儲腳本資訊。下面顯示目标資料庫demo的所有存儲腳本:
SQL > select script_name from rc_stored_script where db_name = 'demo';
5、RC_STORED_SCRIPT_LINE:顯示存儲腳本的内容,
SQL> select line , text from rc_stored_script_line where script_name = 'bak_database';