基于RMAN的异机数据库克隆(rman duplicate)
基于RMAN的异机数据库克隆(rman duplicate)
对于基于生产环境下的数据库的版本升级或者测试新的应用程序的性能及其影响,备份恢复等等,我们可以采取从生产环境以克隆的方式将其克隆到本地而不影响生产数据库的正常使用。实现这个功能我们可以借助rman duplicate方式以及其简单的方式来完成。duplicate方式不同于OS级别的备份,它会为辅助数据库(克隆出来的数据库)生成一个新的dbid,而能够同时将目标数据库(原数据库)与辅助数据库注册到同一个恢复目录。本文描述了使用rman duplicate实现异机数据库克隆。
1、RMAN支持的duplicate类型
支持基于备份的duplicate方式,其中该方式又分为连接到target DB与不连接target DB,不连接target DB又分为连接到catalog与不连接catalog
支持基于活动数据库的duplicate方式。
这两种方式可以使用下面的图示简要描述。
From Active DB
--------------
| With recovery catalog connection
Duplicate | |--------------------------------
------------| Without target conenction |
| |----------------------------|
| | |
--------------| |-------------
From Backups | Without recovery catalog connection
|-----------------------------
With target connection
2、RMAN异机恢复示意图
下面的图示是没有连接到target DB,也没有连接到recover catalog方式。基于这种方式实现duplicate,应指定备份文件所在的位置。
本文下面所演示的试验也是基于该方式,在演示的过程中,磁盘路径,目录,数据文件使用了相同的位置与文件名。
3、实战RMAN异机克隆
[sql] --环境: --目标数据库: 192.168.7.25/sybo3 /u01/database/sybo3 主机名:linux3 --辅助数据库: 192.168.7.26/sybo3 /u01/database/sybo3 主机名:linux4 目标数据库与辅助数据库使用相同的文件位置 --说明: --本次演示使用了备份文件,没有连接到catalog,也没有连接到target DB。 [oracle@linux3 database]$ cat /etc/issue Enterprise Linux Enterprise Linux Server release 5.5 (Carthage) Kernel \r on an \m SQL> select * from v$version where rownum<2; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production a、备份及ftp目标数据库 --目标数据库存在的表及其内容,用于后续验证 SQL> select * from t; NAME ACTION ---------- -------------------- Robinson Transfer DB Jackson Transfer DB by rman --下面备份目标数据库并ftp到辅助数据库所在的主机 $ export ORACLE_SID=sybo3 $ rman target / RMAN> backup database include current controlfile plus archivelog delete input; $ scp -r fra 192.168.7.26:/u01/database/sybo3/ -->如果有必要将将备份文件打包,此处fra目录是闪回区 --Author : Robinson --Blog : http://blog.csdn.net/robinson_0612 --ftp参数文件,如果没有pfile文件,可从target db生成。 create pfile from spfile; $ scp $ORACLE_HOME/dbs/initsybo3.ora 192.168.7.26:$ORACLE_HOME/dbs b、创建相应的dump文件夹 [oracle@linux4 database]$ more sybo3.sh #!/bin/sh mkdir -p /u01/database mkdir -p /u01/database/sybo3/adump mkdir -p /u01/database/sybo3/controlf mkdir -p /u01/database/sybo3/fra mkdir -p /u01/database/sybo3/oradata mkdir -p /u01/database/sybo3/redo mkdir -p /u01/database/sybo3/dpdump mkdir -p /u01/database/sybo3/pfile [oracle@linux4 database]$ ./sybo3.sh c、配置辅助实例参数文件 --由于auxiliary DB与target DB不存在文件位置转换,因此无需作任何修改。下面是target DB 复制到auxiliary的参数文件内容 [oracle@linux4 ~]$ more /u01/oracle/db_1/dbs/initsybo3.ora sybo3.__db_cache_size=113246208 sybo3.__java_pool_size=4194304 sybo3.__large_pool_size=4194304 sybo3.__oracle_base='/u01/oracle'#ORACLE_BASE set from environment sybo3.__pga_aggregate_target=150994944 sybo3.__sga_target=226492416 sybo3.__shared_io_pool_size=0 sybo3.__shared_pool_size=96468992 sybo3.__streams_pool_size=0 *.audit_file_dest='/u01/database/sybo3/adump/' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='/u01/database/sybo3/controlf/control01.ctl','/u01/database/sybo3/controlf/control02.ctl' *.db_block_size=8192 *.db_domain='orasrv.com' *.db_name='sybo3' *.db_recovery_file_dest='/u01/database/sybo3/fra' *.db_recovery_file_dest_size=4039114752 *.dg_broker_config_file1='/u01/database/sybo3/db_broker/dr1sybo3.dat' *.dg_broker_config_file2='/u01/database/sybo3/db_broker/dr2sybo3.dat' *.dg_broker_start=FALSE *.diagnostic_dest='/u01/database/sybo3' *.log_archive_dest_1='' *.memory_target=374341632 *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.undo_tablespace='UNDOTBS1' d、生成辅助实例密码文件 --直接使用orapwd命令完成 $ orapwd file=/u01/oracle/db_1/dbs/orapwsybo3 password=oracle entries=10 e、实施数据库克隆 --由于此次测试无需连接到target及catalog,因此可以跳过配置监听,可在克隆完毕后再配置 [oracle@linux4 ~]$ export ORACLE_SID=sybo3 [oracle@linux4 ~]$ sqlplus / as sysdba SQL> startup nomount; -->启动辅助实例到nomount状态 [oracle@linux4 ~]$ rman auxiliary / -->直接使用auxiliary / 方式连接到辅助数据库 connected to auxiliary database: SYBO3 (not mounted) RMAN> duplicate target database to sybo3 spfile 2> backup location '/u01/database/sybo3/fra/SYBO3' 3> nofilenamecheck; Starting Duplicate Db at 31-JUL-13 contents of Memory Script: { restore clone spfile to '/u01/oracle/db_1/dbs/spfilesybo3.ora' from --->从自动备份还原spfile文件 '/u01/database/sybo3/fra/SYBO3/autobackup/2013_07_31/o1_mf_s_822220850_8zjy9lp8_.bkp'; sql clone "alter system set spfile= ''/u01/oracle/db_1/dbs/spfilesybo3.ora''"; } executing Memory Script Starting restore at 31-JUL-13 allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=134 device type=DISK channel ORA_AUX_DISK_1: restoring spfile from AUTOBACKUP /u01/database/sybo3/fra/SYBO3/autobackup/2013_07_31/o1_mf_s_822220850_8zjy9lp8_.bkp channel ORA_AUX_DISK_1: SPFILE restore from AUTOBACKUP complete Finished restore at 31-JUL-13 sql statement: alter syst