恢復之RAC資料庫DUPLICATE(一)

yangtingkun發表於2008-09-29

利用現有環境建立一個DUPLICATE RAC環境。

由於篇幅限制,這篇描述DUPLICATE命令的準備工作。

 

 

原資料庫為ORACLE RAC 11.1.0.6加上Volumn Cluster Manager,而用來恢復的目標伺服器仍然是Oracle RAC 11.1.0.6,不過使用了ASM作為儲存方式。

目標資料庫的Oracle rac環境已經建立,ASM也已經啟動,而且有一個源資料庫的備份,已經放到了ASM磁碟組中,下面開始恢復過程。

由於資料庫本身比較大,因此不打算採用網路傳輸的ACTIVE DATABASE方式,而是將備份集複製到本地進行恢復。

首先檢查當前環境:

$ env|grep ORA
ORACLE_BASE=/data/oracle
ORACLE_HOME=/data/oracle/product/11.1/database
ORACLE_SID=rac11g1

編輯一個最簡單的初始化引數,啟動AUXILIARY例項:

db_name=rac11gs

下面透過這個初始化引數啟動例項:

bash-3.00$ rman target/

Recovery Manager: Release 11.1.0.6.0 - Production on Mon Sep 8 15:16:50 2008

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

connected to target database (not started)

RMAN> startup nomount pfile=initrac11g1.ora

Oracle instance started

Total System Global Area     217219072 bytes

Fixed Size                     2093360 bytes
Variable Size                160362192 bytes
Database Buffers              50331648 bytes
Redo Buffers                   4431872 bytes

下面退出rman,然後分別連線兩個例項:

RMAN> exit


Recovery Manager complete.
bash-3.00$ rman target sys/test@172.0.2.54/rac11g.us.oracle.com auxiliary /

Recovery Manager: Release 11.1.0.6.0 - Production on Mon Sep 8 15:33:10 2008

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

connected to target database: RAC11G (DBID=1712482917)
connected to auxiliary database: RAC11GS (not mounted)

RMAN>

由於當前節點的備份集和源節點備份集路徑不一樣,源節點採用本地磁碟的方式儲存備份集,而目標節點採用ASM的方式存放備份集,所以常規方法無法解決源節點和目標節點之間備份集不一致的問題。

如果不解決這個問題而直接進行DUPLICATE,則報錯如下:

bash-3.00$ rman target sys/test@172.0.2.54/rac11g.us.oracle.com auxiliary /

Recovery Manager: Release 11.1.0.6.0 - Production on Mon Sep 8 17:49:00 2008

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

connected to target database: RAC11G (DBID=1712482917)
connected to auxiliary database: RAC11GS (not mounted)

RMAN> duplicate target database to rac11gs
2> db_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
3> spfile
4> parameter_value_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
5> set log_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
6> set log_archive_dest_1='LOCATION=+DATA/RAC11G'
7> set local_listener = ''
8> ;

Starting Duplicate Db at 08-SEP-08
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=113 device type=DISK

contents of Memory Script.:
{
   set until scn  26685490;
   restore clone spfile to  '/data/oracle/product/11.1/database/dbs/spfilerac11g1.ora';
   sql clone "alter system set spfile= ''/data/oracle/product/11.1/database/dbs/spfilerac11g1.ora''";
}
executing Memory Script

executing command: SET until clause

Starting restore at 08-SEP-08
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: restoring SPFILE
output file name=/data/oracle/product/11.1/database/dbs/spfilerac11g1.ora
channel ORA_AUX_DISK_1: reading from backup piece /data/01jpk0bj_1_1
channel ORA_AUX_DISK_1: ORA-19870: error while restoring backup piece /data/01jpk0bj_1_1
ORA-19505: failed to identify file "/data/01jpk0bj_1_1"
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3

failover to previous backup

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 09/08/2008 17:49:21
RMAN-03015: error occurred in stored script. Memory Script
RMAN-06026: some targets not found - aborting restore
RMAN-06729: no backup of the SPFILE found to restore

RMAN> exit


Recovery Manager complete.

根據Oracle的文件,當源節點和目標節點位置不一樣的時候,常規的方式是在源節點根據目錄節點的位置建立目錄,並將備份集複製到目錄中,透過CATALOG方式新增新的位置,但是由於目標資料庫採用ASM方式,所以這種方式也是不可行的,首先源資料庫沒有采用ASM的方式,其次,源資料庫也沒有足夠的共享空間來建立ASM磁碟組來容納備份集。

那麼只剩下一個辦法,就是透過修改CATALOG資料庫中記錄的方式來騙過RMAN,關於這個方法的具體描述可以參考:

下面找一個同版本的資料庫建立CATALOG賬號,對於測試資料庫而言,也可以直接在源資料庫上建立CATALOG

SQL> conn / as sysdba
已連線。
SQL> create user catalog_user identified by catalog_user
  2  default tablespace yangtk
  3  quota unlimited on yangtk;

使用者已建立。

SQL> grant recovery_catalog_owner to catalog_user;

授權成功。

SQL> host;
$ rman catalog catalog_user/catalog_user

恢復管理器: Release 11.1.0.6.0 - Production on 星期一 9 8 18:28:19 2008

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

連線到恢復目錄資料庫

RMAN> create catalog;

恢復目錄已建立

下面連線target資料庫,catalog資料庫和auxiliary資料庫,註冊資料庫並同步備份資訊:

bash-3.00$ rman target sys/test@172.0.2.54/rac11g.us.oracle.com catalog catalog_user/catalog_user@172.0.2.61/test11g.netdb auxiliary /

Recovery Manager: Release 11.1.0.6.0 - Production on Mon Sep 8 18:33:30 2008

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

connected to target database: RAC11G (DBID=1712482917)
connected to recovery catalog database
connected to auxiliary database: RAC11GS (not mounted)

RMAN> register database;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

下面就可以修改catalog庫中catalog_user使用者下對應的記錄了:

SQL> conn catalog_user/catalog_user
已連線。
SQL> col handle format a60
SQL> select bp_key, handle from rc_backup_piece;

    BP_KEY HANDLE
---------- ------------------------------------------------------------
      1475 /data/01jpk0bj_1_1

SQL> update rc_backup_piece set handle = '+DATA/backup/01jpk0bj_1_1'            
  2  where bp_key = 1475;

已更新 1 行。

SQL> commit;

提交完成。

修改完成後,就可以RMAN會話中執行DUPLICATE命令了。最終使用的DUPLICATE命令如下:

duplicate target database to rac11gs
db_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
spfile
parameter_value_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
set log_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
set log_archive_dest_1='LOCATION=+DATA/RAC11G'
set local_listener = ''
set cluster_database = 'false'
;

為了DUPLICATE不需要設定繁瑣的初始化引數,可以先去掉引數中的LOCAL_LISTENER的設定,等到啟動之後在重新設定。

將引數CLUSTER_DATABASE設定為FALSE,是為了避免在建立控制檔案時出現錯誤,詳細描述可以參考文章:

還要注意將歸檔日誌檔案複製到目標伺服器上和源資料庫相同的目錄下,否則執行會報錯RMAN-6025錯誤,詳細描述可以參考:

在最終執行DUPLICATE命令之前,還需要確保將源資料庫中tnsnames.ora中的LISTENERS_RAC11G的配置新增到本地資料庫的tnsnames.ora中,否則啟動會報錯找不到REMOTE_LISTENER

而且需要在DUPLICATE的目標節點上建立對應的目錄:

$ mkdir -p /data/oracle/admin/rac11g/adump
$ mkdir /data/oracle/admin/rac11g/dpdump
$ mkdir /data/oracle/admin/rac11g/hdump
$ mkdir /data/oracle/admin/rac11g/pfile
$ mkdir /data/oracle/admin/rac11g/scripts
$ mkdir -p /data/oracle/diag/rdbms/rac11g/rac11g1/alert

所有這些都準備好了,下面可以執行DUPLICATE命令了。

 

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

相關文章