天天看點

rman異機恢複

幾點說明:

(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&gt;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&gt;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&gt;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&gt;alterdatabasemount;

databasemounted

releasedchannel:ORA_DISK_1

7.restore資料庫

7.1恢複目錄不同的情況:

因為我們的路徑不同,是以我們需要使用set指令轉換一下路徑。

到Target庫查詢一下:

SQL&gt;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&gt;selectfile_id,file_namefromdba_temp_files;

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

1/u01/app/oracle/oradata/dave/temp01.dbf

注意,restore的時候不會對temp表空間進行restore。是以等restore之後,我們需要手工建立temp表空間。

RMAN&gt;run

2&gt;{

setnewnamefordatafile1to"/u01/oradata/system01.dbf";

3&gt;4&gt;setnewnamefordatafile2to"/u01/oradata/sysaux01.dbf";

5&gt;setnewnamefordatafile3to"/u01/oradata/undotbs01.dbf";

6&gt;setnewnamefordatafile4to"/u01/oradata/users01.dbf";

7&gt;restoredatabase;

8&gt;switchdatafileall;

9&gt;}

對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&gt;restoredatabase;

8.recoverDB

RMAN&gt;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&gt;

之後會報一個錯誤:

這裡是提醒恢複到一個未知的scn号。在alterdatabasemount之後,通過setuntilscn或者setuntiltime指令設定恢複到的scn号或時間。就可以避免這個錯誤。

9.用openresetlogs打開資料庫

SQL&gt;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&gt;selectgroup#,bytes/1024/1024||'M',statusfromv$log;

GROUP#BYTES/1024/1024||'M'STATUS

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

150MINACTIVE

250MCURRENT

350MUNUSED

SQL&gt;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&gt;alterdatabasedroplogfilegroup3;

SQL&gt;alterdatabaseaddlogfilegroup3('/u01/oradata/redo03.log')size50m;

SQL&gt;altersystemswitchlogfile;

Systemaltered.

250MACTIVE

350MCURRENT

SQL&gt;alterdatabasedroplogfilegroup1;

SQL&gt;alterdatabaseaddlogfilegroup1('/u01/oradata/redo01.log')size50m;

SQL&gt;alterdatabasedroplogfilegroup2;

SQL&gt;alterdatabaseaddlogfilegroup2('/u01/oradata/redo02.log')size50m;

3/u01/oradata/redo03.log

2/u01/oradata/redo02.log

1/u01/oradata/redo01.log

(2)處理temp臨時表空間

SQL&gt;selectnamefromv$tempfile;

NAME

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

/u01/app/oracle/oradata/dave/temp01.dbf

--表空間offline

SQL&gt;alterdatabasetempfile'/u01/app/oracle/oradata/dave/temp01.dbf'offline;

--在OS級别移動temp的資料檔案

SQL&gt;!mv/u01/app/oracle/oradata/dave/temp01.dbf/u01/oradata/temp01.dbf

--修改控制檔案中temp檔案的資訊

SQL&gt;alterdatabaserenamefile'/u01/app/oracle/oradata/dave/temp01.dbf'to'/u01/oradata/temp01.dbf';

--temp表空間online

SQL&gt;alterdatabasetempfile'/u01/oradata/temp01.dbf'online;

--驗證

/u01/oradata/temp01.dbf

本文轉自東方之子736651CTO部落格,原文連結: http://blog.51cto.com/ecloud/1300571,如需轉載請自行聯系原作者