rman恢複與使用者管理的備份恢複一樣,都分為完全恢複和不完全恢複,都需要工作在archivelog模式下。
rman10g之後隻保留了0級和1級備份,1級備份分為:cumulative(累積增量)和differential(差異增量)兩種模式,如果不加關鍵詞預設是差異增量備份:
backup incremental level 1 cumulative database(累積增量)
backup incremental level 1 database(差異增量)
連接配接:
rman
connect target /
@/mydir/lyg.txt
或者:
rman @/mydir/lyg.txt
1、rman轉儲指令:
當使用rman執行媒體恢複時,首先需要用restore指令來完成轉儲備份檔案的,執行restore指令時,rman自動轉儲最近備份的檔案。
restore database : 轉儲資料庫的所有資料檔案,當資料庫的所有資料檔案都出現媒體失敗,或者執行不完全恢複時,應該使用restore database 指令轉儲所有資料檔案,此指令隻能在mount狀态下使用。
restore tablespace :用于轉儲特定表空間的資料檔案,如果某個表空間的所有資料檔案都出現媒體失敗,并且資料庫處于open階段,那就應該使用restore tablespace指令。該指令隻能在open狀态下使用。
restore datafile:轉儲特定資料檔案,該指令既可以在mount狀态下,也可以在open狀态下使用。
restore controlfile: 該指令用于轉儲控制檔案,當執行基于控制檔案的不完全恢複或者将資料庫恢複到先前副本狀态時,必須轉儲控制檔案,restore controlfile 指令隻能在nomount狀态下使用。
restore archivelog:轉儲歸檔日志,當執行完全恢複和不完全恢複時,都需要應用歸檔日志。如果歸檔日志出現媒體失敗,或者歸檔日志的映像副本不存在,那麼應該使用restore archivelog指令轉儲歸檔日志,注意,該指令既可以在mount狀态下使用,也可以在open狀态下使用。
restore spfile: 轉儲伺服器參數檔案。如果伺服器參數檔案出現媒體失敗,那麼可以使用restore spfile指令進行轉儲。該指令隻能在nomount狀态使用。
2、rman恢複指令:
當執行媒體恢複時,在轉儲了資料檔案備份之後,需要應用歸檔日志恢複資料檔案,恢複資料檔案是使用recover指令來完成的,當執行recover指令時,rman會自動應用自 最近備份以來的所有歸檔日志。
recover database : 用于恢複資料庫所有的資料檔案,當使用restore database指令轉儲了所有的資料檔案備份之後,應該使用recover database指令執行恢複,注意該指令隻能在mount狀态下使用。
recover tablespace: 恢複特定表空間的資料檔案,先用restore tablespace指令轉儲,然後使用recover tablespace執行恢複。注意,該指令隻能在open狀态下。
recover datafile: 該指令既可以在mount狀态下,也可以在open狀态下使用。
恢複資料庫:
通過查詢動态性能視圖 v$recover_file可以确定需要恢複的資料檔案:
SQL> startup —— 資料庫顯示mounted 但是open時出錯
SQL> select file#, error from v$recover_file; ——查詢需要恢複的檔案,以及出錯的原因
示例一 :所有資料檔案被誤删除:因為所有資料檔案全部被誤删除,是以可以使用restore database 指令轉儲所有資料檔案,在使用recover database 指令恢複資料庫,最後執行 alter database open打開資料庫:
C:\> rman target sys/liu123@mynewdb nocatalog
RMAN> startup force mount
RMAN>run{ restore database;
recover database;
sql 'alter database open ';
}
示例二:資料檔案所在磁盤出現硬體故障:
需要注意,資料檔案此事将不能被轉儲到其原來的位置,為了恢複資料庫,必須将資料檔案轉儲到其他磁盤。在執行restore database 指令之前,通過執行set newname指令可以為資料檔案指定新的位置。在執行restore database 指令之後,通過執行switch datafile指令,可以改變控制檔案所記載的資料檔案位置和名稱,在通過執行recover database指令可以應用歸檔日志。最後用sql語句打開資料庫。示例:
RMAN> run{
startup force mount;
set newname for datafile 1 to 'c:\demo\system01.dbf';
set newname for datafile 2 to 'c:\demo\undotas01.dbf';
set newname for datafile 3 to 'c:\demo\sysaux01.dbf';
set newname for datafile 4 to 'c:\demo\users01.dbf';
set newname for datafile 5 to 'c:\demo\user01.dbf';
set newname for datafile 6 to 'c:\demo\user02.dbf';
restore database;
switch databse;
sql 'alter database open'
在恢複并打開資料庫之後,執行report schema指令可以檢視到資料庫新的實體方案
RMAN> report schema;
恢複system表空間的資料檔案:
因為system表空間出現媒體失敗時,資料庫不能被打開,是以必須在mount狀态下恢複其資料檔案。
示例一:system表空間的資料檔案被誤删除,在裝載了資料庫之後,先使用restore datafile 指令轉儲該表空間所對應的資料檔案,在使用recover datafile 指令應用歸檔日志。最後打開資料庫。指令:
startup force mount;
restore datafile 1 ;
recover datafile 1 ;
示例二:system表空間資料檔案所在磁盤出現故障,肯定不能轉儲到原來位置,在restore datafile之前,執行set newname為資料檔案指定新的位置。執行完restore datafile之後,通過switch datafile可以應用歸檔日志,最後打開資料庫。示例:
RMAN> run {
set newname for datafile 1 to 'd:\demo\system01.dbf';
restore datafile 1 ;
switch datafle 1;
recover datafile 1;
sql 'alter database open';
在open狀态下恢複關閉後意外丢失的資料檔案:
除了system 表空間的資料檔案之外,其他資料檔案都可以使用該方法進行恢複:
示例一:資料檔案被誤删除:裝載資料庫之後,先使用sql語句alter database datafile 。。。offline脫機丢失的資料檔案,接着alter database open 打開資料庫。,再使用restore datafile指令轉儲資料檔案,使用recover datafile 指令應用歸檔日志。,最後再 alter database datafile 。。online恢複聯機、示例:
RMAN > run {
sql ‘ alter database datafile 4 offline’;
sql 'alter database open';
restore datafile 4;
recover dtafile 4;
sql 'alter database datafile 4 online';
示例二:資料檔案所在的磁盤出現損壞:
很顯然資料檔案不能被轉儲到原來的位置。首先裝載資料庫,然後alter database datafile 。。 offline 。然後alter database open。 在restore datafile之前,先set newname 指令為資料檔案制定新的位置,在執行了restore datafile指令之後,用switch datafile 指令可以改變控制檔案所記載的資料檔案的位置和名稱,在通過recover datafile 指令可以應用歸檔日志。最後alter database datafile
。。 online聯機。示例代碼:
RMAN > run{
startup force mount;
sql 'alter databse datafile 4 offline';
sql 'alter database open ';
set newname for datafile 4 to 'd:\demouser01.dbf';
restore datafile 4;
switch datafile 4;
recover datafile 4;
sql 'alter database datafile 4 onlune';
在open狀态下恢複打開時意外丢失的資料檔案:
此時,隻有出現媒體失敗的資料檔案不能通路,而不影響其他資料檔案,假定在open狀态下users01,.dbf出現媒體失敗。
示例一:資料檔案被誤删除:先在open狀态下alter database datafile 。。offline ,使用restore datafile 指令轉儲資料檔案,再recovert datafile應用歸檔日志,最後alter database datafile 。。online使資料檔案聯機:
RMAN>run {
sql 'alter database datafile 4 offline';
sql 'alter database datafile 4 online';
示例二:資料檔案所在磁盤出現故障:不能講資料檔案轉儲到原來位置,首先alter database datafile 。。offline 。然後set newname for 指令為資料檔案指定新位置。然後restore datafile,再switch datafile 更改控制檔案中資料檔案的名稱和位置。再使用recover datafile應用歸檔日志。最後alter
database datafile 。。online。示例:
sql ' alter database datafile 4 offline';
set newname for datafile 4 to 'd:\demo\users01.dbf';
在open狀态下恢複未備份的資料檔案:
示例一:資料檔案被誤删除:
注意此時資料檔案并沒有備份,從10g開始,如果資料檔案備份不存在,那麼轉儲資料檔案時會自動建立資料檔案,建立了資料檔案之後,就可以根據歸檔日志跑日志,一直恢複到删除檔案的時間點。示例:
starup force mount;
sql 'alter database datafile 7 offline';
restore datafile 7;
recover datafile 7;
sql 'alter database datafile 7 online';
示例二:資料檔案所在磁盤損壞。
RMAN>run{
startup force mount ;
set newname for datafile 7 to 'c:\demo\user04.dbf';
switch datafile 7;
恢複表空間:
示例一:資料庫處于open狀态下,如果某個表空間所有資料檔案出現媒體故障,首先要使用alter tablespace 。。offline for recover來脫機表空間。接着使用restore tablespace 。。再revover tablespace應用歸檔日志,最後alter tablespace 。。online 。示例:
sql ' alter tablespace users offline for recover';
restore tablespace users;
recover tablespace users;
sql ' alter tablespace users online';
示例二:表空間資料檔案所在磁盤故障:
sql 'alter tablespace users offline for recover';
set newname for datafile 4 to 'd:\demo\users01.dbf';
restore tablespace user;
switch datafile all;
recover tablespace users;
sql 'alter tablespace users online';
資料塊媒體恢複:
隻有當通路到這些壞塊的時候才會報錯。如報錯:
ora-01578:oracle data block corrupted (file# 5, block# 21)
ora-01110:data file 5 :’d:\demo\uyser01,dbf‘
使用指令如下:RMAN > blockrecover device type disk datafile 5 block 21 ,48 ,128;
RMAN不完全恢複:
rman的不完全恢複能在mount狀态下完成。
1、基于時間恢複:當rman執行基于時間點的 不完全恢複時,首先要在指令行設定環境變量NLS_DATE_FORMAT。進入rman之後,先mount資料庫,再使用SET UNTIL TIME 指令執行要恢複到的時間點。示例:
C:\> set nls_date_format = yyyy-mm-dd hh24:mi:ss
C:\>rman target sys/oracle@demo nocatalog
startup force mount;
set until time = '2012-05-08 17:00:28';
recover database;
sql 'alter database open resetlogs';
當使用resetlogs選項打開資料庫之後,會複位日志序列号,并生成新的資料庫副本,在10g之前,不完全恢複之後必須重新備份資料庫,10g之後,oracle提供了安全機制可以確定歸檔日志不會被覆寫,進而使得在恢複資料庫時可以使用早期資料庫副本的備份,但在執行了不完全恢複之後,建議删除早期的所有備份,并重新備份資料庫。示例:
delete noprompt backup;
delete noprompt copy;
backup database format =’d:backup\%d_%s.bakj‘;
sql 'alter system archive log current';
基于SCN的恢複:
首先查詢目前scn号:SQL> select current_scn from v$databse;
然後删除一個表scott.emp。
示例如下:RMAN > run{
set until scn = 511416;
基于日志序列号恢複:
假定我們在執行完全備份恢複失敗時,出現了如下錯誤
這種情況下dba可以實用基于日志序列号的不完全恢複:示例:
set until sequence = 6;
restore database;
recover database;
sql ’alter database open resetlogs‘;
基于備份控制檔案恢複:
是指實用備份控制檔案恢複資料庫的過程,當誤删除了表空間或者資料庫所有控制檔案全部損壞時,可以使用這種方法。下面模拟dba使用者删除了users表空間為例,說明基于備份控制檔案恢複的方法;
SQL> drop tablespace user01 including contents;
通過查詢alert檔案可以确定誤操作時間,alert檔案位置:background_dump_dest所對應的目錄中,檔案名格式:alert_mynewdb.log檢視alert檔案時,應該有檔案尾部向上檢視,可以看到删除該表的具體時間,大概為2012-05-08 22:13:34 ,隻要恢複到該時間點就可以了,注意:當使用基于備份控制檔案的rman不完全恢複時,必須使用恢複目錄,将控制檔案内的rman中繼資料周期性寫到恢複目錄中去,如果沒有使用恢複目錄,那就要求激活控制檔案自動備份功能,否則就不能轉儲控制檔案備份,轉儲控制檔案之前,需要使用set
dbid指令,設定資料庫id編号,在轉儲了控制檔案之後裝載資料庫,然後執行基于時間點的rman不完全恢複。示例:
RMAN > startup force nomount
RMAN > set dbid = 3282656886;
RMAN > restore controlfile from autobackup maxseq 6;
RMAN > alter database mount
RMAN >run{
set until time = '2012-05-08 22:13:34';