一.概述
复制数据库即使用RMAN工具的DUPLICATE命令从源数据库拷贝所有或者一部分的数据到目标数据库。复制数据库技术在多种场景都是特别有用的,如创建standby数据库,创建用于不同目的地测试环境,数据库迁移等。
使用DUPLICATE命令复制数据库能自动配置与源数据库不同的DBID,确保目标数据库和源数据库能一起存放在相同的恢复目录数据库中。
RMAN支持两种复制类型:活动数据库复制和基本备份的复制。RMAN能在源数据库和恢复目录数据库存在或者不存在的情况下执行基于备份的复制。
活动数据库复制要求同时连接到源数据库和恢复目标数据库,如果使用恢复目录作为元数据的存储,那么还需要连接到恢复目录数据库。
对于复制技术的选择可以考虑如下因素,活动数据库复制最主要的优势不要求源数据库备份。这个技术的缺点是在复制过程中长时间消耗服务器资源,这对源数据库会产生一定的影响。
二.活动数据库复制准备工作
在活动数据复制中,RMAN连接到作为目标数据库实例和辅助实例,RMAN通过网络拷贝源数据库到辅助实例,由此创建复制数据库,这并不需要先创建源数据库库备份
实际的复制工作是源数据库和辅助实例通过它们之间的网络完成的,源数据库实例和辅助数据库实例之间的网络由Oracle Net实现。
执行数据库复制操作,源数据库和复制数据库必须是相同的平台,在执行活动数据库复制操作之前需要完成以下准备工作:
(1)数据库空间要求
确保目标主机有足够的存储空间存放数据库的数据
(2)源和目标主机通过LAN或者WAN进行连接
在WAN中活动数据库复制的性能可能比LAN(本地区域网络)更慢,如果WAN的性能变得不可接受,那么基于备份的复制可能变成唯一的选择了,如果在多用户活动期间复制数据库,可能导致网络吞吐量下降,这种情况最好的选择基于备份的复制。
(3)复制文件的命名策略
当复制数据库是,RMAN为复制控制文件,数据文件,临时文件和联机REDO日志文件生成名称。因此,必须制定这些文件的命名策略
Oracle推荐简单的复制策略,配置与源数据库相同的名称,使用相同名称意思是环境要符合下列要求:
如果源数据库使用ASM磁盘组,那么复制数据库必须使用相同名称的磁盘组
如果源数据库文件是Oracle管理的文件(OMF),那么辅助实例必须设置DB_FILE_CREATE_DEST参数,指定与源数据库相同的目录位置,源和目标主机的目录相同,Oracle数据库为复制文件创建相应的名称。
源数据库和复制数据库要有相同的路径存放数据库文件
按照以上建议配置环境,就不需要额外的配置工作了
(4)Oracle Net 连通性
要确保源数据库到辅助实例之间的Oracle Net的连通性,如果源数据库是RAC数据库,确保RAC数据库的所有节点都可以建立于辅助实例之间的网络连接
(5) 为辅助实例创建密码文件
手动创建密码文件,活动复制要求原数据库和辅助实例使用相同的密码,默认使用SYS用户
(6)创建初始化参数文件
手动创建初始化参数文件
在DUPLICATE 命令中明确指定SPFILE选项
(7)确保源数据库处于正常状态
(8)基本步骤如下:a.连接到源数据库,b.连接到辅助实例,c.连接到恢复目录数据库(如果有的话)
切换归档redo日志 :ALTER SYSTEM ARCHIVE LOG CURRENT
执行DULICATE 命令复制活动的数据库
DUPLICATE TARGET DATABASE TO "目标数据库实例"
FROM ACTIVE DATABASE
PASSWORD FILE
SPFILE
NOFILENAMECHECK; 源数据库数据文件,密码文件,参数文件和辅助实例具有相同的目录结构;
成功执行上面命令必须确保源数据库在归档模式,以及至少产生一次归档。
三.完整的活动数据库复制实例:
(1).源数据库实例CPP,目标数据库实例MES,Oracle Net配置:
源库:cat listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl1)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/oracle
如果目标库和源库都在同一台服务器上,必须在源库的监听器上静态注册目标实例和源实例,否则当目标库nomount后,PMON进程会动态注册监听,此时监听会一直处于BLOCKED状态,无法完成复制:
(SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = PHUB)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1) 源库静态监听注册
(SID_NAME = PHUB)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MECBS)
(ORACLE_HOME = /u03/app/oracle/product/11.2.0/db_1)---目标库静态监听
(SID_NAME = MECBS)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.180)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle)
cat tnsnames.ora
CPP =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.175)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = CPP)
)
)
MES =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.176)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MES)
)
)
目标库: cat listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl2)(PORT = 1521))