使用RMAN DUPLICATE命令可以在保留目标数据库的基础上依靠目标数据库(TargetDatabase)的备份创建一个副本数据库(DuplicateDatabase)。该副本即可与目标数据库完全相同,也可仅包含目标数据库表空间的一部子集。目标站点(TargetSite)以及副本站点(DuplicateSite)甚至可以在同一台机器上。
副本数据库呢是目标数据库的一个拷贝。可以实现如下功能比如:
测试备份和恢复过程。如,你可以从Host1复制生产数据库到Host2,然后使用Host2上的副本数据库实践修复、恢复等操作,而生产数据库则完全不受其影响
导出数据,例如在生产数据库上被有意无意删除的表,然后你就可以再将其导入生产数据库。
需要注意的是,虽然都可以通过Duplicate命令创建,但是副本数据库与备库(StandbyDatabase)还是有区别地。备库是主库(PrimaryDatabase)的一份拷贝,你可以根据主库的ArchivedLogs定期或不定期的更新它。如果 主库崩溃,你还可以将其转换为主库使用。而副本数据库则并非为故障切换设计,而且也不支持这种Standby恢复和故障切换。
1、创建一个辅助实例通过RMAN必须能够连接到目标数据库及启动到nomount模式下的辅助实例。
2、至少在辅助实例上分配一条辅助通道,复制的主要工作都是通过在副本站点启动的服务器session的辅助通道实施的。3、应用主库的必要备份,并创建及恢复副本数据库。
4、RMAN客户端可以在任何地方运行,只要能够连接到主、辅实例。所有可被副本站点访问到的备份以及archived redologs都将被用于创建和恢复副本数据库。如果副本站点与目标站点不在一起,你必须确保副本站点的备份所在路径与主库路径一致,如果路径无法保持一致,则必须保证副本站点能够访问到备份所在路径。
做为复制操作的一部分,RMAN自动执行下列步骤:
1、为副本数据库创建控制文件。
2、Restore数据文件到副本数据库,并通过增量备份和Archived RedoLogs进行不完全恢复,故需要备份日志文件。
重启辅助实例,以加载服务器端的初始化参数文件。
3、不完全恢复后通过Resetlogs方式Open副本数据库以重建Online RedoLogs(Duplicate...For Standby方式除外,该操作不会打开数据库)。
4、为副本数据库产生一个新的,唯一的DBID(Duplicate...ForStandby方式除外,该方式不会创建新的唯一DBID)。
5、在创建副本期间,RMAN必须进行不完全恢复,因为目标库的Online RedoLogs并不能时时备份并应用到副本数据库。RMAN最多也就能取到目标数据库最近一次备份的数据恢复到副本数据库。
Oracle提供了一些可选操作,以满足不同环境的不同需求,具体如下:
1、Duplicate命令可在Catalog或Nocatalog模式下运行
2、使用SKIP READONLY子句跳过只读表空间。默认情况下复制包含只读表空间。
3、通过SKIP TABLESPACE子句跳过指定表空间。SYSTEM表空间或包含回滚、UNDO的表空间除外。
4、可以将副本数据库创建到新站点,如果新站点的目录结构与主相同的话,必须指定NOFILENAMECHECK 选项。
5、从传统文件系统复制到ASM或OMF。
6、默认情况下,DUPLICATE命令通过目标数据的最近一次备份创建副本数据库,并恢复到归档日志中的最近一致点。另外,你也可以使用RUN命令块,执行SET UNTIL命令,或者执行DUPLICATE命令时附带UNTIL子句,控制RMAN将副本数据库恢复到指定的时间点(不过,注意指定的时间点不要超出了备份的范围)。
7、可以将副本数据库在相同恢复目录中注册成一个目标数据库,因为该副本数据库拥有一个新的唯一的DBID。
8、在某些情况下,你可以设置副本数据库的DB_NAME与目标数据库DB_NAME不同,更明确的讲,如果副本数据库与目标库在相同的OracleHome,则DB_NAME的初始化参数必须不同。如果两者在不同的OracleHome,则副本数据库的DB_NAME在其所在的OracleHome中必须唯一。这才是副本数据库可以与目标库在相同站点的真正原因。