通過修改CATALOG記錄的方式實現備份集目錄變更

yangtingkun發表於2008-09-28

今天第一次體會到了CATALOG的好處,不過這種用法肯定是文件所不推薦的。

 

 

碰到了一個難以解決的問題,是在進行DUPLICATE命令的時候碰到的。

源資料庫RAC環境採用裸裝置方式,將備份集放到一個節點的本地磁碟上,但是目標資料庫使用了ASM,且本地磁碟沒有足夠的空間,因此將遠端的備份級拷貝到了ASM磁碟組中,但是目前的問題是,DUPLICATE命令會根據源資料庫備份集的位置讀取本地的備份級。

在本地伺服器上通過ln的方式對ASM磁碟組中的檔案是無效的,Oracle嘗試讀取時仍然會報錯。

而通過在源資料庫上CATALOG備份集的新位置也是不可行的,因為源資料庫上面沒有啟動ASM例項,而且也沒有空間來新配置一個ASM例項,並將備份集拷貝進去。

最後嘗試了一下能否通過修改CATALOG記錄的方式,可以騙過OracleRMAN,使得RMAN可以在輔助例項上根據ASM上面的路徑讀取備份集。

於是本地嘗試一下這種方式是否可行:

E:\>rman target / catalog cata_log/cata_log

恢復管理器: Release 10.2.0.1.0 - Production on 星期一 9 8 17:22:17 2008

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

連線到目標資料庫: YTK102 (DBID=3695768905)
連線到恢復目錄資料庫

RMAN> backup tablespace users;

啟動 backup 08-9 -08
正在啟動全部恢復目錄的 resync
完成全部 resync
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=132 devtype=DISK
通道 ORA_DISK_1: 啟動全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集中的資料檔案
輸入資料檔案 fno=00004 name=E:\ORACLE\ORADATA\YTK102\USERS01.DBF
通道 ORA_DISK_1: 正在啟動段 1 08-9 -08
通道 ORA_DISK_1: 已完成段 1 08-9 -08
段控制程式碼=E:\ORACLE\BACKUP\YTK102\0DJQ3EN2_1_1 標記=TAG20080908T172241 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:01
完成 backup 08-9 -08

利用一個現有的CATALOG進行嘗試,首先備份USERS表空間,下面將備份級的位置進行轉移:

RMAN> HOST;

Microsoft Windows XP [版本 5.1.2600]
(C)
版權所有 1985-2001 Microsoft Corp.

E:\>MOVE E:\ORACLE\BACKUP\YTK102\0DJQ3EN2_1_1 E:\ORACLE\BACKUP\0DJQ3EN2_1_1

E:\>EXIT
主機命令完成

RMAN>

下面登陸到CATALOG使用者下,修改剛才這個備份的HANDLE

SQL> conn cata_log/cata_log
已連線。
SQL> COL HANDLE FORMAT A50
SQL> SELECT BP_KEY, HANDLE FROM RC_BACKUP_PIECE;

    BP_KEY HANDLE
---------- ----------------------------------------------
       587 E:\ORACLE\BACKUP\0BJMSAHJ_1_1
       588 E:\ORACLE\BACKUP\YTK102\0CJMSB39_1_1
       608 E:\ORACLE\BACKUP\YTK102\0DJQ3EN2_1_1

下面修改剛剛備份的這個檔案的HANDLE,指向新的檔案位置:

SQL> UPDATE RC_BACKUP_PIECE SET HANDLE='E:\ORACLE\BACKUP\0DJQ3EN2_1_1' WHERE BP_KEY = 608;

已更新 1 行。

SQL> COMMIT;

提交完成。

下面將表空間置為OFFLINE,並刪除需要恢復資料檔案:

SQL> CONN YANGTK/YANGTK
已連線。

SQL> ALTER TABLESPACE USERS OFFLINE;

表空間已更改。

SQL> HOST DEL E:\ORACLE\ORADATA\YTK102\USERS01.DBF

然後嘗試恢復:

RMAN> RESTORE TABLESPACE USERS;

啟動 restore 08-9 -08
使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00004恢復到E:\ORACLE\ORADATA\YTK102\USERS01.DBF
通道 ORA_DISK_1: 正在讀取備份段 E:\ORACLE\BACKUP\0DJQ3EN2_1_1
通道 ORA_DISK_1: 已恢復備份段 1
段控制程式碼 = E:\ORACLE\BACKUP\0DJQ3EN2_1_1 標記 = TAG20080908T172241
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:02
完成 restore 08-9 -08

可以看到,備份已經從指定的位置進行了恢復。所以這種方式來解決前面提到的問題是可行的,利用這種方式,CATALOG方式的備份和恢復將變得更加靈活。

不過需要注意一點,目前修改的只是CATALOG資料庫中的記錄,而控制檔案中備份的位置並沒有發生變化。

SQL> SELECT HANDLE FROM V$BACKUP_PIECE
  2  WHERE START_TIME > SYSDATE - 1/24;

HANDLE
--------------------------------------------
E:\ORACLE\BACKUP\YTK102\0DJQ3EN2_1_1

建議利用這種方法之後,應該儘快進行恢復,比如將備份級放回原始位置,並修改RC_BACKPU_PIECE,或者刪除修改的備份集,避免不一致給系統帶來損害。

 

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

相關文章