数据库拷贝oracle,Oracle活动数据库复制

Oracle可以从现有的数据库中复制出一份新的数据库。这在一些场合是很有用的。例如从生产库中复制出一个测试库来搭建开发和测试环境,生成大型报表而不影响生产系统的响应时间,从复制数据库中导出无意从生产库中删除的一个表,然后将它重新导入到生产库中,以及Data guard等应用。

在这里,我们把原生产数据库称之为目标数据库,而由生产库复制出来的库称之为辅助数据库。11g之前创建辅助数据库过程需要将目标数据库的备份(包括增量备份和归档日志)事先保存在辅助数据库实例可以访问到的文件系统上。而11g开始无需为操作事先创建或复制备份,可直接从已打开或已加载的目标数据库中复制出辅助数据库,这种技术称之为活动数据库复制(Active

Database Duplicate)。

能够创建辅助数据库的基本要求是原目标数据库应处于归档模式。当然,正常的生产库都应当是具备这个条件的。

下面用实例说明,如何从我们网络上的一个生产数据库mes中复制出一个辅助数据库newdb到本地机器,实现活动数据库复制。

1、创建口令文件

辅助数据库的口令必须与目标数据库口令相同,通过在操作系统命令提示符下执行orapwd命令来完成

orapwd

file=%Oracle_home%\database\PWDnewdb.ora password=mes entries=3

force=y

这里口令文件采用Windows系统下Oracle口令文件标准的命名方式,即PWD.ora的形式。

2、编制静态初始化参数文件并创建相应目录

文件中一般需要指定以下几个重要参数:

db_name:数据库名称

db_block_size:数据块大小,应当与原数据库匹配,如果未指定,则默认为2KB。而一般创建的数据库块大小默认都是8KB,所以这里需要特别指定

control_files:控制文件路径

db_file_name_convert:用于转换数据文件和临时文件路径的字符串对

log_file_name_convert:用于转换联机日志文件路径的字符串对

log_archive_dest_1:归档日志文件目标位置

log_archive_format:归档日志文件命名格式

db_recovery_file_dest:闪回恢复区目标位置

db_recovery_file_dest_size:闪回恢复区大小

参数文件路径放置于%ORACLE_HOME%\database,按照pfile文件的命名规则,文件名应为INITnewdb.ora,文本内容如下,缺少的目录需手工创建

db_name=newdb

db_block_size=8192

control_files=('D:\ORADATA\NEWDB\CONTROL01.CTL','D:\ORADATA\FLASH_RECOVERY_AREA\NEWDB\CONTROL02.CTL')

db_file_name_convert=('D:\ORADATA\MES','D:\ORADATA\NEWDB')

log_file_name_convert=('D:\ORADATA\MES','D:\ORADATA\NEWDB')

log_archive_dest_1='location=d:\oradata\newdb\archivelog'

log_archive_format='arc_%d_%t_%r_%s.log'

db_recovery_file_dest='d:\oradata\flash_recovery_area'

db_recovery_file_dest_size=4g

3、创建Oracle实例服务

在操作系统命令提示符下执行oradim命令

oradim -new -sid newdb

4、连接空闲实例并启动到nomount状态

在操作系统命令提示符下切换SID到辅助库

set oracle_sid=newdb

sqlplus / as sysdba

启动实例到nomount状态

startup nomount

5、构建spfile并重启实例到nomount状态

由pfile创建spfile

create spfile from pfile;

重启实例到nomount状态

shutdown abort

startup nomount

6、配置监听和服务名

配置好本地机器的数据库监听和服务名,同时也要配置好目标机器上的服务名,确保本地机器和目标机器都能够彼此连接到目标数据库和辅助数据库。

7、对目标库做日志切换

由于Duplicate过程对辅助库执行不完整恢复,一直恢复到目标库最后的归档日志文件为止。因此辅助库并不包含目标库尚未进入归档的事务。若要尽可能的与目标库一致,可在Duplicate前先对目标库做几次日志切换。

在操作系统命令提示符下切换SID到目标库

set

oracle_sid=mes

sqlplus / as sysdba

连续做三次日志切换

alter system switch

logfile;

alter system switch

logfile;

alter system switch

logfile;

8、用RMAN命令同时连接到目标数据库和辅助数据库

在操作系统命令提示符下启动RMAN,这里用户名和密码不能省略,否则复制不会成功

rman target sys/mes@mes

auxiliary sys/mes@newdb

9、执行Duplicate活动数据库复制

duplicate

target database to newdb from active databasenofilenamecheck;

命令中nofilenamecheck表示不对文件名进行检查,如果辅助库和目标库文件名称相同则需要该选项。

至此完成活动数据库复制,从生产库mes中复制出一份新的数据库newdb到本地机器。于是我们可以在本地克隆出的数据库上进行自己的开发、测试和学习研究,而不影响原库的运行。

说明:复制过来的库联机日志文件默认在闪回恢复区,根据需要可以考虑重定向。

复制,顾名思义就是将数据库中的数据拷贝到不同物理地点的数据库中。 在很多生产环境中,经常遇到一些大量得数据,这些数据只用作查询统计功能。例如:历史告警,历史性能指标,历史事件,等等。这种数据的特点是:只读不写,数据量相当大,一旦查询大结果集的数据时,对数据库的IO,内存缓存占用相当大,会严重影响同一个数据库的其他会话的操作,表现为整个数据库反应迟缓,业务功能不可用。采用复制技术后,将这些大型数据复制到另外一个数据库中,对这些大数据的查询统计操作放在另外的一台数据库服务器上进行,即使受影响,也只是影响局部的查询统计功能,其他正常的业务处理不受影响。 但是,使用复制技术的话,意味着一个系统中,至少存在两个数据库(集群的数据库也当成一个数据库),对应的应用程序也需要建立多个数据库连接,能够根据业务需要,访问不同的数据库ORACLE数据库自身提供有复制功能,只需要进行配置即可实现。 ORACLE提供有三种复制技术: 高级复制(Advanced Replication) 流复制(Streams Replication) 备库(Dataguard) 备库的方式,就是数据库数据库的备份方式,主要是解决容灾的,不讨论此话题。 流复制主要是利用ORACLE的归档日志,进行增量备份来实现的,不仅可以配置只复制某些表,还可以配置仅复制某些表上的ddl或dml。可以复制到表,用户,数据库级别。 高级复制主要是基于触发器的原理来触发数据同步的,因此,高级复制无法实现用户,数据库级别的对象复制,只能做些表、索引和存储过程的复制。 如果出于容灾整个数据库的考虑,高级复制相当复杂,而且并不一定能做好,流复制的配置相对简单。流复制是后来产生的复制技术,是基于日志挖掘技术实现的,对数据库的影响较低。但在稳定性方面较差,实时性没有高级复制强(因为高级复制是基于触发器的)。如果系统意外的话,流复制的恢复将会需要较长时间,特别是意外时间越长,恢复时间成倍增长。 下面使用相同的环境,分别对两种复制功能进行配置介绍,并进行性能压力测试比较。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值