利用现有环境创建一个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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-466195/