oracle rman 異機還原測試--set newname

selectshen發表於2014-12-11
同事進行年末的異機還原測試,到快還原完成才發現空間不足.原來,原資料庫伺服器的硬碟分割槽是/u02,/u03,/u09各200G,
而還原測試是把rman的備份複製到另一臺伺服器上做的,這個伺服器的硬碟分割槽是/u02,/u03,/u09,/u10各120G,而且
實際資料庫在/u02,/u03所佔都空間都有130多G了,超過了目標資料庫的/u02,/u03的120G.同事準備對硬碟重新進行分
區再做還原.但我想到rman可以透過set newname把檔案還原到其他地方.
具體實施如下(oracle 10.2.0.4):
[oracle@srhel10g02 dbs]$ ORACLE_SID=rh10g02
[oracle@srhel10g02 dbs]$ rman target /
RMAN> startup nomount;
RMAN> restore spfile from  '/u09/rman/rh10g03/control/c-3997128934-20141127-01';
RMAN> shutdown immediate;
RMAN> startup nomount;          --注意nomount之前,一定要記得把spfile中指定的各dump等的目錄先建好
RMAN> restore controlfile from '/u09/rman/rh10g03/control/c-3997128934-20141127-01';
RMAN> sql 'alter database mount';
RMAN>quit
[oracle@srhel10g02 dbs]$ sqlplus / as sysdba
SQL> select name from v$datafile;    --檢視控制檔案中記錄的檔案資訊,用來建對應目錄
/*產生要需要set newname的檔案指令碼,等一下rman用到,這裡是把超過100g後的檔案都移/u10,因為公司規範單檔案最大為4G,所以用100/4
取大概會超過100g之後檔案,當然具體也可以根據自己的情況*/
SQL>select rman_set from
(select 'set newname for datafile '||rfile#||' to '''||replace(name,substr(name,1,4),'/u10')||''';' rman_set,
row_number() over (partition by substr(name,1,4) order by rfile# ) rn
from  v$datafile) where rn>100/4;
SQL>quit
[oracle@srhel10g02 dbs]$ rman target /
RMAN>crosscheck backup;
RMAN>delete expired backup;
RMAN>catalog start with '/u09/rman/rh10g03';
RMAN>run
{
allocate channel d1 type disk maxpiecesize 4000m;
allocate channel d2 type disk maxpiecesize 4000m;
allocate channel d3 type disk maxpiecesize 4000m;
allocate channel d4 type disk maxpiecesize 4000m;
set newname for datafile 29 to '/u10/oradata/rh10g02/user001.dbf'; --這裡的set newname是取處上面sqlplus裡產生的結果
restore database;
switch datafile all;   --這步一定要有,不然控制檔案中的檔案位置資訊不會改過來
recover database;
release channel d4;
release channel d3;
release channel d2;
release channel d1;
}
RMAN>alter database open resetlogs;

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

相關文章