基于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