RMAN DUPLICATE详解

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、主库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增加如下内容

(UR=A)

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不是必须的

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2012-07/65403p3.htm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle RMAN(Recovery Manager)是Oracle数据库提供的一个备份和恢复工具,它可以进行物理备份和还原操作。下面是对Oracle RMAN备份的详细解释: 1. RMAN备份类型: - 完全备份(Full Backup):备份整个数据库,包括数据文件、控制文件和归档日志。 - 增量备份(Incremental Backup):只备份自上次备份以来发生变化的数据块,可以是增量备份级别0、1或2。 - 差异备份(Differential Backup):备份自上次完全备份以来发生变化的数据块。 2. RMAN备份方法: - 数据库级别备份:使用`BACKUP DATABASE`命令备份整个数据库。 - 表空间级别备份:使用`BACKUP TABLESPACE`命令备份指定的表空间。 - 数据文件级别备份:使用`BACKUP DATAFILE`命令备份指定的数据文件。 - 控制文件和归档日志备份:使用`BACKUP CONTROLFILE`和`BACKUP ARCHIVELOG`命令备份控制文件和归档日志。 3. RMAN备份设置: - RMAN配置文件:RMAN使用配置文件存储备份相关参数,包括备份路径、保留策略等。 - 备份集:RMAN将备份数据存储在备份集中,可以是磁盘备份集或磁带备份集。 - 备份策略:可以设置备份的保留周期、备份集大小等策略。 4. RMAN备份命令: - `BACKUP`:用于备份数据库、表空间、数据文件等。 - `RESTORE`:用于还原数据库、表空间、数据文件等。 - `RECOVER`:用于恢复数据库到指定的时间点或日志序列号。 5. RMAN备份的优点: - 集成性:RMAN与Oracle数据库紧密集成,可以直接访问数据库内部结构。 - 自动化:RMAN提供自动备份和恢复功能,减少了管理员的手动操作。 - 效率高:RMAN使用并行备份和增量备份等技术,提高了备份和恢复的效率。 - 完整性:RMAN备份是一致性备份,可以保证备份数据的一致性。 这是对Oracle RMAN备份的详细解释,使用RMAN进行备份可以简化备份过程,并提供高效、可靠的数据保护方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值