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

基于RMAN的同机数据库克隆

基于RMAN的同机数据库克隆
 
Oracle数据库克隆,也叫着Oracle数据库复制,可以通过基于用户管理的方式来完成,也可以基于RMAN方式来实现。而且Oracle建议使用RMAN方式来实现,因为它简单易用,隐藏其复杂的逻辑,仅仅是执行一条duplicate命令就可以喝茶了。当然,前期的准备工作也是不可少滴,如创建相应的dump目录,准备参数文件,配置监听等等。本文描述了Oracle 11g下如何使用RMAN实现同机克隆数据库。
 
1、RMAN克隆的几种类型
    a、利用RMAN备份克隆并访问目标数据库(也就是原数据库),也就是复制期间由Oracle net与目标数据库保持连接
    b、利用RMAN备份克隆不访问目标数据库,比如网络不通阿,目标数据库不可用等等,总之是人为或故障使得与目标库失去连接
    c、直接使用活动数据库(active)进行克隆,实时备份加克隆,够牛滴!
 
2、RMAN克隆做了什么?
    RMAN克隆根据需要连接或不连接到目标数据库后,需要连接一个辅助实例。这个辅助实例也就是我们复制后的实例。
    我们知道任何一个数据库至少有一个实例与之对应,如果是RAC环境则可以多个实例对应一个数据库。
    因此,我们在克隆数据库之前先建一个nomount状态的辅助实例用于分配内存等等一系列的后台进程啦。
    有了实例就好办啦,RMAN为这个辅助实例生成控制文件,基于这个实例上还原数据库,恢复数据库等等不拉不拉的N多操作。
    那这个N多操作靠谁呢,那就是发布命令: duplicate target databaseto aux_db
    那RMAN如何连接到辅助实例呢? 与连接target或catalog方式类似,connect auxiliary name/pwd@tnsstring
    通常情况下,对于磁盘备份还原操作,RMAN会自动创建及分配相应的通道,辅助实例也不例外,当然是自动分配辅助通道
    而在磁带介质就麻烦一点了,需要手工来指定其通道,并行度等等。
    下面简要描述一下RMAN克隆不同阶段都作了什么吧,关于克隆数据库时数据文件位置转换请参考: RMAN 数据库克隆文件位置转换方法
         a、RMAN确定备份的属性,位置等等,也就备份存在性,可用等等了。
         b、RMAN为辅助实例分配通道及辅助通道的参数设置
         c、RMAN还原数据文件到辅助实例(此时使用了目标数据库控制文件)
         d、RMAN构建辅助实例的控制文件
         e、根据需要还原归档日志并进行相应的介质恢复
         f、重置辅助实例的dbid,并使用open resetlog方式打开数据库,此时会创建相应的联机重做日志文件
 
3、RMAN克隆大致步骤
    a、备份目标数据库(根据需要克隆类型而定,异机的话ftp一下,此步也可以置于步骤e之后,f之前)
    b、创建相应的dump文件夹
    c、配置辅助实例参数文件
    d、生成辅助实例密码文件
    e、配置辅助实例监听
    f、实施数据库克隆(辅助实例启动到nomount状态后)
    h、验证结果
 
4、RMAN同机克隆亲密接触
[sql] 
--环境:  
--目标数据库: sybo3      /u01/database/sybo3  
--辅助数据库: sybo5      /u01/database/sybo5  
--说明:  
  
[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、备份目标数据库  
--生成后续验证克隆成功的测试数据  
SQL> insert into t select 'Jackson','Transfer DB by rman' from dual;  
  
SQL> commit;  
  
SQL> select * from t;  
  
NAME       ACTION  
---------- --------------------  
Robinson   Transfer DB  
Jackson    Transfer DB by rman  
  
SQL> alter system archive log current;  
  
[oracle@linux3 ~]$ rman target /  
  
Recovery Manager: Release 11.2.0.1.0 - Production on Thu Jul 25 08:39:42 2013  
  
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.  
  
connected to target database: SYBO3 (DBID=2347733014)  
  
RMAN> backup database include current controlfile plus archivelog delete input;  
  
piece handle=/u01/database/sybo3/flash_recovery_area/SYBO3/backupset/2013_07_25/o1_mf_annnn_TAG20130725T083957_8z0wyy9n_.bkp   
tag=TAG20130725T083957 comment=NONE  
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01  
  
piece handle=/u01/database/sybo3/flash_recovery_area/SYBO3/backupset/2013_07_25/o1_mf_nnndf_TAG20130725T083959_8z0wz06c_.bkp   
tag=TAG20130725T083959 comment=NONE  
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:30  
Finished backup at 2013/07/25 08:41:29  
  
Starting Control File and SPFILE Autobackup at 2013/07/25 08:41:31  
piece handle=/u01/database/sybo3/flash_recovery_area/SYBO3/autobackup/2013_07_25/o1_mf_s_821695291_8z0x1vsf_.bkp comment=NONE  
Finished Control File and SPFILE Autobackup at 2013/07/25 08:41:34  
  
  
b、创建相应的dump文件夹  
[oracle@linux3 database]$ more sybo5.sh  
#!/bin/sh  
mkdir -p /u01/database  
mkdir -p /u01/database/sybo5/adump  
mkdir -p /u01/database/sybo5/controlf  
mkdir -p /u01/database/sybo5/flash_recovery_area  
mkdir -p /u01/database/sybo5/oradata  
mkdir -p /u01/database/sybo5/redo  
mkdir -p /u01/database/sybo5/dpdump  
mkdir -p /u01/database/sybo5/pfile  
[oracle@linux3 database]$ ./sybo5.sh   
  
  
c、配置辅助实例参数文件  
--在sqlplus下生成辅助实例的参数文件  
SQL> create pfile='/u01/oracle/db_1/dbs/initsybo5.ora' from spfile;    
    
--修改辅助实例参数文件     
$ sed -i 's/sybo3/sybo5/g' $ORACLE_HOME/dbs/initsybo5.ora    
$ grep sybo3 $ORACLE_HOME/dbs/initsybo5.ora    -->校验是否还存在sybo3相关字符     
  
--下面是修改后最终的结果  
[oracle@linux3 database]$ more $ORACLE_HOME/dbs/initsybo5.ora  
sybo5.__db_cache_size=113246208  
sybo5.__java_pool_size=4194304  
sybo5.__large_pool_size=4194304  
sybo5.__oracle_base='/u01/oracle'#ORACLE_BASE set from environment  
sybo5.__pga_aggregate_target=142606336  
sybo5.__sga_target=234881024  
sybo5.__shared_io_pool_size=0  
sybo5.__shared_pool_size=104857600  
sybo5.__streams_pool_size=0  
*.audit_file_dest='/u01/database/sybo5/adump/'  
*.audit_trail='db'  
*.compatible='11.2.0.0.0'  
*.control_files='/u01/database/sybo5/controlf/control01.ctl','/u01/database/sybo5/controlf/control02.ctl'  
*.db_block_size=8192  
*.db_domain='orasrv.com'  
*.db_name='sybo5'  
*.db_recovery_file_dest='/u01/database/sybo5/flash_recovery_area/'  
*.db_recovery_file_dest_size=4039114752  
*.dg_broker_config_file1='/u01/database/sybo5/db_broker/dr1sybo5.dat'  
*.dg_broker_config_file2='/u01/database/sybo5/db_broker/dr2sybo5.dat'  
*.dg_broker_start=FALSE  
*.diagnostic_dest='/u01/database/sybo5'  
*.log_archive_dest_1=''          #此处未指定archive位置,使用缺省的闪回区  
*.memory_target=374341632  
*.open_cursors=300  
*.processes=150  
*.remote_login_passwordfile='EXCLUSIVE'  
*.undo_tablespace='UNDOTBS1'  
  
  
d、生成辅助实例密码文件  
--直接使用orapwd命令完成  
$ orapwd file=$ORACLE_HOME/dbs/orapwsybo5 password=oracle entries=10   
  
  
e、配置辅助实例监听  
--配置辅助实例的监听方式很多,如netca,netmgr,直接命令方式等等,下面直接给出的脚本  
[oracle@linux3 ~]$ more $ORACLE_HOME/network/admin/listener.ora  
# listener.ora Network Configuration File: /u01/oracle/db_1/network/admin/listener.ora  
# Generated by Oracle configuration tools.  
  
SID_LIST_LISTENER_SYBO5 =  
  (SID_LIST =  
    (SID_DESC =  
      (GLOBAL_DBNAME = sybo5.orasrv.com)  
      (ORACLE_HOME = /u01/oracle/db_1)  
      (SID_NAME = sybo5)  
    )  
  )  
  
SID_LIST_LISTENER_SYBO3 =  
  (SID_LIST =  
    (SID_DESC =  
      (GLOBAL_DBNAME = sybo3.orasrv.com)  
      (ORACLE_HOME = /u01/oracle/db_1)  
      (SID_NA
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,