DUPLICATE概述
使用RMAN DUPLICATE命令可以在保留目标数据库的基础上依靠目标数据库(TargetDatabase)的备份创建一个副本数据库(DuplicateDatabase)。该副本即可与目标数据库完全相同,也可仅包含目标数据库表空间的一部子集。目标站点(TargetSite)以及副本站点(DuplicateSite)甚至可以在同一台机器上。
副本数据库呢是目标数据库的一个拷贝。可以实现如下功能比如:
测试备份和恢复过程。如,你可以从Host1复制生产数据库到Host2,然后使用Host2上的副本数据库实践修复、恢复等操作,而生产数据库则完全不受其影响
导出数据,例如在生产数据库上被有意无意删除的表,然后你就可以再将其导入生产数据库。
需要注意的是,虽然都可以通过Duplicate命令创建,但是副本数据库与备库(StandbyDatabase)还是有区别地。备库是主库(PrimaryDatabase)的一份拷贝,你可以根据主库的ArchivedLogs定期或不定期的更新它。如果 主库崩溃,你还可以将其转换为主库使用。而副本数据库则并非为故障切换设计,而且也不支持这种Standby恢复和故障切换。
RMAN如何创建数据库副本
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最多也就能取到目标数据库最近一次备份的数据恢复到副本数据库。
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中必须唯一。这才是副本数据库可以与目标库在相同站点的真正原因。
实战
主库SID:SOURCE 备库SID:DP 数据库版本:11.0.2
1、备份主库
$ rman target /
RMAN> run {
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> backup database format '/u01/data/bak/DB-bak-20120325-%U';
5> backup archivelog all delete all input format '/u01/data/bak/ARC_%U';
6> }
2、创建口令文件
$ orapwd file=/u01/app/oracle/product/11.2.0/db_1/dbs/orapwSOURCE password=sys entries=5 ignorecase=y
3、配置listener.ora 和tnsnames.ora
$ cat tnsnames.ora
names.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
DP =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.26.29.4)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DP)
)
SOURCE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.26.29.2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SOURCE)
)
若出现
ORA-12528: TNS:listener: all appropriate instances are blocking new connections
可以在tnsnames.ora增加如下内容
DP =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.26.29.4)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DP)
(UR=A)
)
辅助实例上的listener
$ cat listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = DP)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = DP))
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.26.29.4)(PORT = 1521))
)
)
Target实例上的listener
$ cat listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = DP)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = DP))
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.26.29.2)(PORT = 1521))
)
)
4、配置备库初始化参数文件pfile,根据参数文件创建必要的目录
$export ORACLE_SID=source
SQL>create pfile='/home/oracle/pfile.ora' from spfile;
修改参数文件如下
*.control_files='/u01/data/dp/control01.ctl','/u01/data/dp/control02.ctl'
*.core_dump_dest='/u01/app/oracle/admin/dp/cdump'
*.db_block_size=8192
*.db_name='DP'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=53687091200
shared_pool_size=200000000
db_block_size=8192
db_file_name_convert=('/u01/data/source', '/u01/data/dp')
log_file_name_convert=(' /u01/data/source ','/u01/data/dp')
audit_file_dest= /u01/app/oracle/admin/dp/adump'
background_dump_dest=' /u01/app/oracle/admin/dp/bdump'
*.compatible='11.2.0'
user_dump_dest=' /u01/app/oracle/admin/dp/udump'
$export ORACLE_SID=dp
SQL>create spfile from pfile='/home/oracle/pfile.ora' ;
$mkdir -p /u01/data/dp /u01/app/oracle/admin/dp
$cd /u01/app/oracle/admin/dp/
$mkdir adump bdump cdump dpdump pfile udump
SQL>startup force nomount
5、备库duplicate复制
$ export ORACLE_SID=dp
$ rman target sys/sys@source auxiliary sys/sys@dp
RMAN> duplicate target database to dp nofilenamecheck;
说明:
如果目标库与副本数据库的在线日志文件和数据文件路径不相同,则需要像本文一样配置db_file_name_convert和log_file_name_convert,否则会报错rman-06023。
要是不配置db_file_name_convert和log_file_name_convert,可以通过如下命令达到相同的目的
RUN
{
# The DUPLICATE command uses an automatic sbt channel.
# Because the target datafiles are spread across multiple directories,
# run SET NEWNAME rather than DB_FILE_NAME_CONVERT
SET NEWNAME FOR DATAFILE 1 TO '/oradata1/system01.dbf';
SET NEWNAME FOR DATAFILE 2 TO '/oradata2/undotbs01.dbf';
SET NEWNAME FOR DATAFILE 3 TO '/oradata3/cwmlite01.dbf';
SET NEWNAME FOR DATAFILE 4 TO '/oradata4/drsys01';
SET NEWNAME FOR DATAFILE 5 TO '/oradata5/example01.dbf';
SET NEWNAME FOR DATAFILE 6 TO '/oradata6/indx01.dbf';
# Do not set a newname for datafile 7, because it is in the tools tablespace,
# and you are excluding tools from the duplicate database.
SET NEWNAME FOR DATAFILE 8 TO '/oradata7/users01.dbf';
DUPLICATE TARGET DATABASE TO dupdb
SKIP TABLESPACE tools
LOGFILE
GROUP 1 ('/duplogs/redo01a.log',
'/duplogs/redo01b.log') SIZE 200K REUSE,
GROUP 2 ('/duplogs/redo02a.log',
'/duplogs/redo02b.log') SIZE 200K REUSE;
}
上面的命令还使用过SKIP TABLESPACE子句跳过指定表空间
另外还可以使用CONFIGURE AUXNAME 命令重命名数据文件,复制步骤如下:
#configurethenewdesiredfilenames
CONFIGURE AUXNAME FOR DATAFILE 1 TO 'F:\oracle\oradata\jssdup\system01.dbf';
CONFIGURE AUXNAME FOR DATAFILE 2 TO 'F:\oracle\oradata\jssdup\undotbs01.dbf';
#...addmoreCONFIGUREAUXNAMEcommandsasneeded
不过需要注意的是,duplicate执行完之后,推荐清除CONFIGUREAUXNAME。这样就不会对未来的
类似操作造成影响。
#clearspecifiedauxiliarynamesforthedatafiles
CONFIGURE AUXNAME FOR DATAFILE 1 CLEAR;
CONFIGURE AUXNAME FOR DATAFILE 2 CLEAR;
如果副本数据库与目标库不在同一台机器上,并且副本数据库的在线日志文件路径与目标库相同,NOFILENAMECHECK
则运行duplicate命令时必须指定NOFILENAMECHECK参数以避免冲突提示。此处oracle表现的很傻,它不知道你要恢复的路径是在另一台机器上,它只是认为要恢复到的路径怎么跟目标数据库表现的一样呢?会不会是要覆盖目标数据库啊,为了避免这种情形,于是它就报错。所以一旦异机恢复,并且路径相同,那么你必须通过指定NOFILENAMECHECK来避免oracle的自动识别。 这里NOFILENAMECHECK不是必须的
Target 库:
SQL> select name,dbid from v$database;
NAME DBID
--------- ----------
SOURCE 1272955137
Auxiliary库:
SQL> select name,dbid from v$database;
NAME DBID
--------- ----------
DP 1272984602
参考至:《[三思笔记]RMAN高级应用之Duplicate复制数据库》三思著
http://docs.oracle.com/cd/B19306_01/backup.102/b14191/rcmdupdb.htm#BRADV169
http://blog.csdn.net/ad007520/article/details/4972455
http://guojuanjun.blog.51cto.com/277646/395866
http://www.cnblogs.com/dba001/archive/2012/03/25/2416398.html
http://blog.itpub.net/13062352/viewspace-617399/
http://blog.csdn.net/tianlesoftware/article/details/6230498
本文原创,转载请注明、作者
如有错误,欢迎指正
邮箱:czmcj@163.com
相关推荐
Oracle RMAN DUPLICATE教程
Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库
Oracle Rman命令详解,包括rman命令和rman语句解析。
使用RMAN DUPLICATE...FROM ACTIVE DATABASE 创建物理备库 简化standby创建过程,提高效率
rman duplicate 搭建dg 一步步向你展示如何不停机搭建dg
oracle rman命令详解,详细的介绍了rman的各种命令
Oracle Rman Active Database Duplicate 迁移方案V1.1.pdf
Oracle Rman 详解,Oracle Rman 详解。Oracle Rman 详解,Oracle Rman 详解。
RMAN备份技术详解 包括 命令 备份策略 故障恢复等,很实用
RMAN命令详解.pdf
Rman通过duplicate创建standby
此文档中详解介绍了oracle数据库中关于RMAN命令的详细及其注意事项
Oracle_RMAN_详解与实例 1. 检查数据库模式: 2.连接到target数据库 3.用list backupset 命令查看有没有备份的东西 4. 常用备份命令: .......
Oracle数据库rman环境配置详解,详解介绍了rman备份
rman自动备份详解 恢复数据库 恢复表空间
详细讲解了RMAN的备份机制以及如何备份
RMAN高级应用之Duplicate复制数据库
RMAN高级应用之Duplicate复制数据库 1.基本概述 2.创建辅助实例 3.不同环境下的复制流程 4.实战 5.附录
ORACLE RMAN备份命令.一次实际的操作过程,注解比较详细