幾點說明:
(1)RMAN異機恢複的時候,db_name必須相同。如果說要想改成其他的執行個體名,可以在恢複成功後,用nid指令修改。執行個體名的資訊會記錄到控制檔案裡,是以如果在恢複的時候,如果執行個體名不一緻,恢複的時候會報錯。
(2)如果恢複的路徑和源庫不一緻,就需要在restore時用set指令指定新位置。并且使用switchdatafileall将資訊更新的到控制檔案。
在做duplicate的時候,RMAN會自動根據pfile中的log_file_name_convert和db_file_name_convert來進行set的轉換。手工restore時,隻能隻隻能使用set指令。
(3)異機恢複對相同目錄和不同目錄都做了說明。
(4)最後測試了NID修改DBID和DBNAME.
一.Target庫準備工作:
1.查詢DBID
SQL>selectname,dbidfromv$database;
NAMEDBID
-------------------
DAVE808234286
2.備份DB
關于RMAN的shell備份腳本,參考:
Nocatalog下的RMAN增量備份shell腳本
<a href="http://blog.csdn.net/tianlesoftware/archive/2011/01/26/6164931.aspx" target="_blank">http://blog.csdn.net/tianlesoftware/archive/2011/01/26/6164931.aspx</a>
在這裡我用0級和1級備份了下DB。
[oracle@qs-dmm-rh1backup]$ls
arch_0pm6qt8q_1_1_20110309dave_lev0_0jm6qt77_1_1_20110309dave_lev1_0um6qtcq_1_1_20110309
arch_0qm6qt8q_1_1_20110309dave_lev0_0km6qt77_1_1_20110309dave_lev1_0vm6qtcq_1_1_20110309
arch_13m6qtda_1_1_20110309dave_lev0_0lm6qt77_1_1_20110309dave_lev1_11m6qtd7_1_1_20110309
arch_14m6qtda_1_1_20110309dave_lev0_0nm6qt7c_1_1_20110309dave_spfile_16m6qtde_1_1_20110309
ctl_file_15m6qtdc_1_1_20110309dave_lev1_0tm6qtcq_1_1_20110309
二.Auxiliary庫準備工作:
1.建立密碼檔案
[oracle@qs-dmm-rh2trace]$orapwdfile=?/dbs/orapwdavepassword=oracle
2.建立相關的目錄
[oracle@qs-dmm-rh2u01]$mkdiroradata
[oracle@qs-dmm-rh2oradata]$pwd
/u01/oradata
3.建立初始化參數
将Target庫的pfile檔案copy過來。
也可以使用RMAN從我們Target庫的備份集中恢複,因為我們之前備份過spfile。不過使用RMAN,DB要先啟動到nomout狀态。這個可以用預設的init.ora來啟動。
[oracle@qs-dmm-rh2backup]$exportORACLE_SID=dave
[oracle@qs-dmm-rh2backup]$rmantarget/
RecoveryManager:Release11.2.0.1.0-ProductiononFriMar1115:11:312011
Copyright(c)1982,2009,Oracleand/oritsaffiliates.Allrightsreserved.
connectedtotargetdatabase:DAVE(notmounted)
RMAN>restorespfiletopfile'/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initdave2.ora'from'/u01/backup/dave_spfile_16m6qtde_1_1_20110309';
Startingrestoreat11-MAR-11
usingtargetdatabasecontrolfileinsteadofrecoverycatalog
allocatedchannel:ORA_DISK_1
channelORA_DISK_1:SID=19devicetype=DISK
channelORA_DISK_1:restoringspfilefromAUTOBACKUP/u01/backup/dave_spfile_16m6qtde_1_1_20110309
channelORA_DISK_1:SPFILErestorefromAUTOBACKUPcomplete
Finishedrestoreat11-MAR-11
如果修改資料檔案儲存的位置,那麼要修改控制檔案的相關的參數:
*.control_files='/u01/oradata/control01.ctl','/u01/oradata/control02.ctl','/u01/oradata/control03.ctl'
*.db_name='dave'
4.将用pfile将Auxiliary庫啟動到nomout狀态
SQL>startupnomountpfile=?/dbs/initdave.ora
5.恢複控制檔案
[oracle@qs-dmm-rh2dbs]$exportORACLE_SID=dave
[oracle@qs-dmm-rh2dbs]$rmantarget/
RecoveryManager:Release11.2.0.1.0-ProductiononFriMar1115:25:552011
RMAN>restorecontrolfilefrom'/u01/backup/ctl_file_15m6qtdc_1_1_20110309';
channelORA_DISK_1:SID=20devicetype=DISK
channelORA_DISK_1:restoringcontrolfile
channelORA_DISK_1:restorecomplete,elapsedtime:00:00:01
outputfilename=/u01/oradata/control01.ctl
outputfilename=/u01/oradata/control02.ctl
outputfilename=/u01/oradata/control03.ctl
restore的時候需要控制檔案,控制檔案恢複的位置,是我們在pfile中的control_files參數控制的。
6.将DB啟動到mout狀态
RMAN>alterdatabasemount;
databasemounted
releasedchannel:ORA_DISK_1
7.restore資料庫
7.1恢複目錄不同的情況:
因為我們的路徑不同,是以我們需要使用set指令轉換一下路徑。
到Target庫查詢一下:
SQL>selectfile_id,file_namefromdba_data_files;
FILE_IDFILE_NAME
-----------------------------------------------------
4/u01/app/oracle/oradata/dave/users01.dbf
3/u01/app/oracle/oradata/dave/undotbs01.dbf
2/u01/app/oracle/oradata/dave/sysaux01.dbf
1/u01/app/oracle/oradata/dave/system01.dbf
SQL>selectfile_id,file_namefromdba_temp_files;
----------------------------------------------------
1/u01/app/oracle/oradata/dave/temp01.dbf
注意,restore的時候不會對temp表空間進行restore。是以等restore之後,我們需要手工建立temp表空間。
RMAN>run
2>{
setnewnamefordatafile1to"/u01/oradata/system01.dbf";
3>4>setnewnamefordatafile2to"/u01/oradata/sysaux01.dbf";
5>setnewnamefordatafile3to"/u01/oradata/undotbs01.dbf";
6>setnewnamefordatafile4to"/u01/oradata/users01.dbf";
7>restoredatabase;
8>switchdatafileall;
9>}
對switchdatafileall的說明:
--對于nocatalog模式下,rman備份的資訊是儲存在控制檔案裡的,包括檔案的路徑資訊。這裡的switchdatafileall的作用,就是更新控制檔案裡的資訊。
executingcommand:SETNEWNAME
channelORA_DISK_1:startingdatafilebackupsetrestore
channelORA_DISK_1:specifyingdatafile(s)torestorefrombackupset
channelORA_DISK_1:restoringdatafile00003to/u01/oradata/undotbs01.dbf
channelORA_DISK_1:readingfrombackuppiece/u01/backup/dave_lev0_0lm6qt77_1_1_20110309
channelORA_DISK_1:piecehandle=/u01/backup/dave_lev0_0lm6qt77_1_1_20110309tag=DAVE_LEV0
channelORA_DISK_1:restoredbackuppiece1
channelORA_DISK_1:restorecomplete,elapsedtime:00:00:03
channelORA_DISK_1:restoringdatafile00004to/u01/oradata/users01.dbf
channelORA_DISK_1:readingfrombackuppiece/u01/backup/dave_lev0_0nm6qt7c_1_1_20110309
channelORA_DISK_1:piecehandle=/u01/backup/dave_lev0_0nm6qt7c_1_1_20110309tag=DAVE_LEV0
channelORA_DISK_1:restoringdatafile00002to/u01/oradata/sysaux01.dbf
channelORA_DISK_1:readingfrombackuppiece/u01/backup/dave_lev0_0km6qt77_1_1_20110309
channelORA_DISK_1:piecehandle=/u01/backup/dave_lev0_0km6qt77_1_1_20110309tag=DAVE_LEV0
channelORA_DISK_1:restorecomplete,elapsedtime:00:00:15
channelORA_DISK_1:restoringdatafile00001to/u01/oradata/system01.dbf
channelORA_DISK_1:readingfrombackuppiece/u01/backup/dave_lev0_0jm6qt77_1_1_20110309
channelORA_DISK_1:piecehandle=/u01/backup/dave_lev0_0jm6qt77_1_1_20110309tag=DAVE_LEV0
channelORA_DISK_1:restorecomplete,elapsedtime:00:00:25
datafile1switchedtodatafilecopy
inputdatafilecopyRECID=5STAMP=745522150filename=/u01/oradata/system01.dbf
datafile2switchedtodatafilecopy
inputdatafilecopyRECID=6STAMP=745522150filename=/u01/oradata/sysaux01.dbf
datafile3switchedtodatafilecopy
inputdatafilecopyRECID=7STAMP=745522150filename=/u01/oradata/undotbs01.dbf
datafile4switchedtodatafilecopy
inputdatafilecopyRECID=8STAMP=745522150filename=/u01/oradata/users01.dbf
7.2恢複目錄相同
這種情況比較簡單,直接:
RMAN>restoredatabase;
8.recoverDB
RMAN>recoverdatabase;
Startingrecoverat11-MAR-11
usingchannelORA_DISK_1
channelORA_DISK_1:startingincrementaldatafilebackupsetrestore
destinationforrestoreofdatafile00001:/u01/oradata/system01.dbf
channelORA_DISK_1:readingfrombackuppiece/u01/backup/dave_lev1_0tm6qtcq_1_1_20110309
channelORA_DISK_1:piecehandle=/u01/backup/dave_lev1_0tm6qtcq_1_1_20110309tag=DAVE_LEV1
destinationforrestoreofdatafile00002:/u01/oradata/sysaux01.dbf
channelORA_DISK_1:readingfrombackuppiece/u01/backup/dave_lev1_0um6qtcq_1_1_20110309
channelORA_DISK_1:piecehandle=/u01/backup/dave_lev1_0um6qtcq_1_1_20110309tag=DAVE_LEV1
channelORA_DISK_1:restorecomplete,elapsedtime:00:00:02
destinationforrestoreofdatafile00003:/u01/oradata/undotbs01.dbf
channelORA_DISK_1:readingfrombackuppiece/u01/backup/dave_lev1_0vm6qtcq_1_1_20110309
channelORA_DISK_1:piecehandle=/u01/backup/dave_lev1_0vm6qtcq_1_1_20110309tag=DAVE_LEV1
destinationforrestoreofdatafile00004:/u01/oradata/users01.dbf
channelORA_DISK_1:readingfrombackuppiece/u01/backup/dave_lev1_11m6qtd7_1_1_20110309
channelORA_DISK_1:piecehandle=/u01/backup/dave_lev1_11m6qtd7_1_1_20110309tag=DAVE_LEV1
startingmediarecovery
channelORA_DISK_1:startingarchivedlogrestoretodefaultdestination
channelORA_DISK_1:restoringarchivedlog
archivedlogthread=1sequence=7
channelORA_DISK_1:readingfrombackuppiece/u01/backup/arch_13m6qtda_1_1_20110309
channelORA_DISK_1:piecehandle=/u01/backup/arch_13m6qtda_1_1_20110309tag=ARC_BAK
archivedlogfilename=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_7_745352047.dbfthread=1sequence=7
archivedlogthread=1sequence=8
channelORA_DISK_1:readingfrombackuppiece/u01/backup/arch_14m6qtda_1_1_20110309
channelORA_DISK_1:piecehandle=/u01/backup/arch_14m6qtda_1_1_20110309tag=ARC_BAK
archivedlogfilename=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_8_745352047.dbfthread=1sequence=8
unabletofindarchivedlog
archivedlogthread=1sequence=9
RMAN-00571:===========================================================
RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS===============
RMAN-03002:failureofrecovercommandat03/11/201117:32:00
RMAN-06054:mediarecoveryrequestingunknownarchivedlogforthread1withsequence9andstartingSCNof823627
RMAN>
之後會報一個錯誤:
這裡是提醒恢複到一個未知的scn号。在alterdatabasemount之後,通過setuntilscn或者setuntiltime指令設定恢複到的scn号或時間。就可以避免這個錯誤。
9.用openresetlogs打開資料庫
SQL>alterdatabaseopenresetlogs;
Databasealtered.
我測試的平台是11gR2的版本,在openresetlogs之後,自動在原來預設的路徑建立了temp表空間和3組redo檔案。
如果恢複目錄和原來相同,就不用修改。
如果目錄不同,我們就需要把這些檔案移到我們現在的data目錄。
源目錄:
[oracle@qs-dmm-rh2dave]$pwd
/u01/app/oracle/oradata/dave
[oracle@qs-dmm-rh2dave]$ls
redo01.logredo02.logredo03.logtemp01.dbf
現在的目錄:
[oracle@qs-dmm-rh2dave]$cd/u01/oradata/
[oracle@qs-dmm-rh2oradata]$ls
control01.ctlcontrol02.ctlcontrol03.ctlsysaux01.dbfsystem01.dbfundotbs01.dbfusers01.dbf
(1)處理onlineredolog
SQL>selectgroup#,bytes/1024/1024||'M',statusfromv$log;
GROUP#BYTES/1024/1024||'M'STATUS
-------------------------------------------------------------------
150MINACTIVE
250MCURRENT
350MUNUSED
SQL>selectgroup#,memberfromv$logfile;
GROUP#MEMBER
-------------------------------------------------------------------------------
3/u01/app/oracle/oradata/dave/redo03.log
2/u01/app/oracle/oradata/dave/redo02.log
1/u01/app/oracle/oradata/dave/redo01.log
oracle至少有2組redolog。是以我們可以将已經完成歸檔的redodrop掉,重新建立。
SQL>alterdatabasedroplogfilegroup3;
SQL>alterdatabaseaddlogfilegroup3('/u01/oradata/redo03.log')size50m;
SQL>altersystemswitchlogfile;
Systemaltered.
250MACTIVE
350MCURRENT
SQL>alterdatabasedroplogfilegroup1;
SQL>alterdatabaseaddlogfilegroup1('/u01/oradata/redo01.log')size50m;
SQL>alterdatabasedroplogfilegroup2;
SQL>alterdatabaseaddlogfilegroup2('/u01/oradata/redo02.log')size50m;
3/u01/oradata/redo03.log
2/u01/oradata/redo02.log
1/u01/oradata/redo01.log
(2)處理temp臨時表空間
SQL>selectnamefromv$tempfile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/dave/temp01.dbf
--表空間offline
SQL>alterdatabasetempfile'/u01/app/oracle/oradata/dave/temp01.dbf'offline;
--在OS級别移動temp的資料檔案
SQL>!mv/u01/app/oracle/oradata/dave/temp01.dbf/u01/oradata/temp01.dbf
--修改控制檔案中temp檔案的資訊
SQL>alterdatabaserenamefile'/u01/app/oracle/oradata/dave/temp01.dbf'to'/u01/oradata/temp01.dbf';
--temp表空間online
SQL>alterdatabasetempfile'/u01/oradata/temp01.dbf'online;
--驗證
/u01/oradata/temp01.dbf
本文轉自東方之子736651CTO部落格,原文連結: http://blog.51cto.com/ecloud/1300571,如需轉載請自行聯系原作者