当前位置:操作系统 > Unix/Linux >>

基于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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,