關於rman中set newname的探討

lygle發表於2013-04-08
 在做rman恢復測試時,將備份的資料恢復到本地,使用了setnewname命令,由於當時做試驗的時候,沒有深入研究此命令,只是在restore之後,能夠在測試庫中將restore出來的資料open就可以了。但如果只是到此為止的話,還是不夠的,需要做一些後續的清理工作,才能算做一個完整的本地恢復測試。
   在做本地恢復測試時,有一步(略去了其它步驟)是將資料恢復到一個新的路徑下:
利用rman更改資料檔案存放路徑並restore到新的路徑 
run {
set newname for datafile 1 to '/test_ora/new/system01.dbf';
set newname for datafile 2 to '/test_ora/new/rbs01.dbf';
set newname for datafile 3 to '/test_ora/new/users01.dbf';
set newname for datafile 4 to '/test_ora/new/test01.dbf';
set newname for datafile 5 to '/test_ora/new/test201.dbf';
restore database;
}
   做這一步的目的是更改一下資料檔案路徑,並將資料restore到新路徑下。問題就在於做了這一步之後,rman並不認為是將資料restore到新路徑下,而是認為將資料檔案備份到新路徑下(相當於uman備份)。這在oracle的官方文件中可以查到(紅色字型):
Sets the default name for all subsequent RESTORE or SWITCH commands that affect the specified datafile. Ifyou do not issue this command before the datafile restoreoperation, then RMAN restores the file to its defaultlocation
After you restore a datafile to a newlocation, then you can run SWITCH to rename the file in the control file to theNEWNAME.If you do not runSWITCH, then the restored file functions as a datafilecopy and is recorded as such in the repository.
  下面的試驗可以證明:
1.將restore到新路徑/test_ora/new/下的資料刪除
[oracle@single rman_bk]$ rm/test_ora/new/*
2.此時,試圖再用rman重新restore到/test_ora/new/下。

[oracle@single rman_bk]$ rmantarget /

Recovery Manager: Release9.2.0.4.0 - Production

Copyright (c) 1995, 2002,Oracle Corporation.  All rightsreserved.

connected to target database:TEST (DBID=1935070339)

RMAN> run {
2> set newname for datafile 1 to '/test_ora/new/system01.dbf';
3> set newname for datafile 2 to '/test_ora/new/rbs01.dbf';
4> set newname for datafile 3 to '/test_ora/new/users01.dbf';
5> set newname for datafile 4 to '/test_ora/new/test01.dbf';
6> set newname for datafile 5 to '/test_ora/new/test201.dbf';
7> restore database;
8> }

executing command: SETNEWNAME
using target database controlfile instead of recoverycatalog

executing command: SETNEWNAME

executing command: SETNEWNAME

executing command: SETNEWNAME

executing command: SETNEWNAME

Starting restore at27-OCT-07

allocated channel:ORA_DISK_1
channel ORA_DISK_1: sid=15 devtype=DISK
RMAN-00571:===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS===============
RMAN-00571:===========================================================
RMAN-03002: failure of restore command at 10/27/2007 19:06:57
ORA-19625: error identifying file /test_ora/new/system01.dbf
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3

 
從錯誤提示可以看出,rman試圖尋找/test_ora/new下的資料檔案,但沒有找到,於是報錯。
3. 為了進一步上述觀點,將生產庫的資料mv到別處:
[oracle@single rman_bk]$ mv/test_ora/*.dbf /test_ora/new/
此時,用rman恢復生產庫資料:

Recovery Manager: Release 9.2.0.4.0 -Production

Copyright (c) 1995, 2002,Oracle Corporation.  All rightsreserved.

connected to target database:TEST (DBID=1935070339)

RMAN> restoredatabase;

Starting restore at27-OCT-07

using target databasecontrolfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=13 devtype=DISK
RMAN-00571:===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS===============
RMAN-00571:===========================================================
RMAN-03002: failure of restore command at 10/27/2007 19:15:26
ORA-19563: datafile copy header validationfailed for file /test_ora/new/system01.dbf

從紅色字型部分可以看出,/test_ora/new/system01.dbf被視作一個datafilecopy,rman試圖將該檔案restore到生產庫的資料存放路徑下,但沒有找到該檔案,於是報錯。

 

從上述分析可以得出:

   rman在setnewname之後的restore過程,是將現有的資料檔案做一份副本,相當於做了一次uman的備份,而該副本的資訊是儲存在rman知識庫中,當再一次進行restore時,rman試圖尋找最新的備份(也就是資料檔案副本),而該資料檔案副本已經被刪除,於是報錯。

 

4.處理方法:

 將rman知識庫中的關於資料檔案副本資訊刪除:

(1)檢查資料檔案副本狀態
RMAN> crosscheck copy;

allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=13 devtype=DISK
validation failed for datafile copy
datafile copy filename=/test_ora/new/system01.dbf recid=41stamp=637095874
validation failed for datafile copy
datafile copy filename=/test_ora/new/rbs01.dbf recid=38stamp=637095858
validation failed for datafile copy
datafile copy filename=/test_ora/new/users01.dbf recid=40stamp=637095868
validation failed for datafile copy
datafile copy filename=/test_ora/new/test01.dbf recid=39stamp=637095859
validation failed for datafile copy
datafile copy filename=/test_ora/new/test201.dbf recid=37stamp=637095855

(2)刪除已經expired的資料檔案副本資訊

RMAN> delete nopromptexpired copy;

released channel:ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=13 devtype=DISK
specification does not match any archive log in the recoverycatalog

List of Datafile Copies
Key    File S Completion Time CkpSCN    CkpTime       Name
------- ---- - --------------- ---------- -------------------
41     1    X27-OCT-07      460930    27-OCT-07      /test_ora/new/system01.dbf
38     2    X27-OCT-07      460930    27-OCT-07      /test_ora/new/rbs01.dbf
40     3    X27-OCT-07      460930    27-OCT-07      /test_ora/new/users01.dbf
39     4    X27-OCT-07      460930    27-OCT-07      /test_ora/new/test01.dbf
37     5    X27-OCT-07      482616    27-OCT-07      /test_ora/new/test201.dbf
deleted datafile copy
datafile copy filename=/test_ora/new/system01.dbf recid=41stamp=637095874
deleted datafile copy
datafile copy filename=/test_ora/new/rbs01.dbf recid=38stamp=637095858
deleted datafile copy
datafile copy filename=/test_ora/new/users01.dbf recid=40stamp=637095868
deleted datafile copy
datafile copy filename=/test_ora/new/test01.dbf recid=39stamp=637095859
deleted datafile copy
datafile copy filename=/test_ora/new/test201.dbf recid=37stamp=637095855
Deleted 5 EXPIRED objects

(3).此時,再次進行set newname並restore。

RMAN> run {
2> set newname for datafile 1 to '/test_ora/new/system01.dbf';
3> set newname for datafile 2 to '/test_ora/new/rbs01.dbf';
4> set newname for datafile 3 to '/test_ora/new/users01.dbf';
5> set newname for datafile 4 to '/test_ora/new/test01.dbf';
6> set newname for datafile 5 to '/test_ora/new/test201.dbf';
7> restore database;
8> }

executing command: SETNEWNAME

executing command: SETNEWNAME

executing command: SETNEWNAME

executing command: SETNEWNAME

executing command: SETNEWNAME

Starting restore at27-OCT-07

using channel ORA_DISK_1
channel ORA_DISK_1: restoring datafile 00005
input datafilecopy recid=36 stamp=637095244filename=/oracle/rman_bk/df_5.dbf
destination for restore of datafile 00005:/test_ora/new/test201.dbf
channel ORA_DISK_1: copied datafilecopy of datafile 00005
output filename=/test_ora/new/test201.dbf recid=42stamp=637097488
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backupset
restoring datafile 00001 to /test_ora/new/system01.dbf
restoring datafile 00002 to /test_ora/new/rbs01.dbf
restoring datafile 00003 to /test_ora/new/users01.dbf
restoring datafile 00004 to /test_ora/new/test01.dbf
channel ORA_DISK_1: restored backup piece 1
piece handle=/oracle/product/9.2.0.4/dbs/03ivie8c_1_1tag=TAG20071027T172739 params=NULL
channel ORA_DISK_1: restore complete
Finished restore at 27-OCT-07

 

試驗完畢。

 

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

相關文章