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 教程详解 #### 一、RMAN Duplicate 概述 **RMAN (Recovery Manager)** 是 Oracle 数据库管理系统中的一个重要工具,用于管理数据库的备份、恢复以及灾难恢复策略。其中,**Duplicate** ...
### RAC+RMAN单实例恢复详解 #### 环境背景 本篇文章将详细介绍如何在RAC(Real Application Clusters)环境下通过RMAN(Recovery Manager)进行单实例数据库的恢复过程。恢复的目标是在一个单实例环境中实现,...
### ORACLE RMAN DUPLICATE 数据库复制详解 #### 概述 在Oracle环境中,通过RMAN(Recovery Manager)工具可以高效地复制整个数据库。本文将详细介绍如何利用RMAN的`DUPLICATE`命令来实现数据库的复制,并针对两种...
### Oracle DataGuard 环境搭建详解:使用Duplicate方法 #### 一、Oracle DataGuard简介与应用场景 Oracle DataGuard是一种高可用性和灾难恢复解决方案,它能够保护数据免受逻辑和物理故障的影响。DataGuard通过...
#### 二、RMAN命令详解 **1. 启动、关闭数据库** - **启动数据库**:`startup` 或 `startup mount` 或 `startup nomount` - `startup`: 完全启动数据库 - `startup mount`: 加载数据库但不打开 - `startup ...
### Oracle数据库RMAN手册知识点详解 #### 一、概述 Oracle Recovery Manager (RMAN) 是一个功能强大的工具,用于备份、恢复以及灾难恢复Oracle数据库。RMAN为DBA提供了全面的解决方案来保护数据库免受数据丢失的...
### Oracle 数据库通过 RMAN 实现 Data Guard 部署详解 #### 一、概述 在企业级应用环境中,为了确保数据的安全性与业务连续性,Oracle Data Guard 成为了一种广泛采用的数据保护技术。本文将详细介绍如何通过 ...
#### 三、RMAN命令详解 ##### 1. 辅助数据库(Auxiliarydatabase) - 在RMAN复制数据库之前,需要以非加载模式(NOMOUNT)启动辅助数据库实例。这样做的目的是为了确保RMAN能够正确地处理控制文件和其他关键组件。 #...
#### 三、Recovery Manager (RMAN)详解 RMAN是Oracle提供的一种强大的备份与恢复工具,它支持多种备份策略,并且能够进行增量备份,大大提高了备份效率。 1. **RMAN基本概念** - **备份集**:一组物理文件,用于...
- **RMAN(恢复管理器)操作**:`step9_rman_duplicate_auxiliary-18c.bat` 和 `step9_rman_foreign-restore-18c(1347).bat` 与RMAN相关,可能涉及数据库的备份、恢复、克隆或辅助实例的配置。 3. **SQLPlus 使用*...
- 使用RMAN命令来执行克隆操作,如`DUPLICATE DATABASE TO target FROM ACTIVE DATABASE`,这将克隆活动的源数据库到目标位置。 注意:在实际操作中,还需要考虑额外的安全措施,如备份策略、权限管理以及检查磁盘...
- 在Oracle 10g中,可以使用RMAN duplicate命令创建具有不同DBID的复制库。 - Oracle 11g R2提供了两种实现方法: - **Active Database Duplication:** 适用于11g R2及以后版本。 - **Backup-based Duplication:** ...
### OCP练习知识点详解 #### 1. nocatalog模式下的RMAN恢复管理器使用方法 在Oracle数据库中,RMAN(Recovery Manager)是用于备份、恢复和灾难恢复的重要工具。nocatalog模式指的是不通过RMAN目录表进行备份管理...
### Oracle 11g 面向 DBA 的新功能详解 #### RMAN 的新增功能概览 在 Oracle Database 11g 中,Recovery Manager (RMAN) 的增强功能为数据库管理员提供了更为强大和高效的工具,以确保数据的安全性和可用性。下面...
- 创建阶段:使用 RMAN 的 DUPLICATE 命令创建物理备用数据库。 - 配置阶段:配置备用数据库的相关参数,如监听器地址等。 - 启动阶段:启动备用数据库并使其开始接收来自生产数据库的归档日志。 #### 四、...
### 单实例数据库转换为 Oracle RAC 10g 实际操作步骤详解 #### 概述 本篇文章旨在详细介绍如何将一个单实例的Oracle数据库转换为Oracle RAC 10g集群环境。这一过程通常涉及多个步骤,包括准备工作、数据库移植、...
- 利用RMAN的duplicate命令创建包含所有数据文件、控制文件、重做日志文件等的镜像文件。注意调整参数以适应新的数据库名称和实例名称。 3. **准备目标环境**: - 安装相应版本的Oracle软件至目标系统。 - 配置...