Oracle官方文档中关于DUPLICATE的文章

本文详细解析Oracle官方文档中关于DUPLICATE的语法、用途、限制和使用说明,涵盖复制数据库和备用数据库创建过程,强调不同场景下的注意事项和操作示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者 阿九【转载时请务必以超链接形式标明文章原始出处和作者信息】


本文是我自己翻译的Oracle官方文档中关于DUPLICATE的文章

1、语法

duplicate::=


dupOptionList::=


dupsbyOptionList::=


logSpec::=


sizeSpec::=



2、用途

duplicate可以创建两种类型的数据库

A:复制数据库,作为主库的一个备份或主库的子数据库,具有唯一的DBID。复制数据库既独立于主库存在,也可以以主库的身份注册在一个恢复目录中。

 

B:备用数据库,作为主库一个特殊的拷贝,通过应用主库上的归档日志去更新备库。备库不会获得新的DBID。

 

 

当复制数据库时,主库处于非归档模式下,需要使用NOREDO选项。当存在一个增量备份时, RMAN仅应用这些备份去还原数据库。当复制数据库时,主库处于归档模式下,复制操作将自动应用自执行复制命令以来的主库归档日志。或通过使用SET UNTIL选项去指定恢复到某个时间点。


3、限制和使用说明

 

3.1、以下限制和使用说明针对于复制数据库

A:主库执行DUPLICATE命令时的SCN不能早于最近一次OPENRESETLOGS时的SCN。DUPLICATE也不支持复制较早版本的数据库。

 

B:在执行DUPLICATE命令前,先申明一个或多个AUXILIARY通道。或配置AUXILIARY自动分配。

 

C:必须连接上主数据库实例和复制(辅助)数据库实例,辅助实例必须启动到nomount状态。主数据库可以是mount状态或open状态。并且主数据库不能是备数据库(standby database)。

 

D:如果你复制数据库时,有些文件不在备份集中时,你需要指定SKIP TABLESPACE 选项。如果你不指定SKIP TABLESPACE选项,那RMAN将复制如下内容:

1)、所有联机表空间的数据库文件,不论这个数据文件是否脱机。

2)、RMAN将复制使用IMMEDIATE选项脱机的表空间,但不复制正常模式下(OFFLINE NORMAL)脱机的表空间。

在没有有效的备份集的情况下,使用DUPLICATE命令将失败。

 

E:在执行DUPLICATE命令时,SYSTEM、UNDO和包含有回滚段(rollbacksegments)的表空间是不能使用SKIP排除的。RMAN不会去检查表空间的完整性。比如:你可以复制一个数据表空间,但这个表空间可能没有包含索引或其他数据。或者复制的这个表空只包含了一张分区表中的一个分区。

 

F:当复制数据库与主库存在于同一个主机上时,设置CONTROL_FILES参数是很必要的,它能避免在复制数据库时报错,由于主库的控制文件正在使用。

 

G:当复制数据库与主库存在于同一个主机上时,重新设置*_PATH和*_DEST初始化参数是很必要的,以避免主数据库覆盖了复制数据库的文件。

 

H:在DUPLICATE命令中指定的DB名称必须要复制数据库参数文件中的DB名称保持一致。

 

I:当复制数据库和主库存在于同一个Oracle主目录下时,你不能使用相同的DB名称。

 

J:如果复制数据库和主库不在同一主机上时,你必须执行如下任务中的其中一个,以保证复制数据库成功:

1)、将主库上的备份文件移动到复制数据库主机上相同的位置。

2)、将主库上的备份文件移动到复制数据库主机上新的位置,使用CATALOG START WITH ''选项去使用它们。

3)、确保在主库上的备份文件件和归档重做日志对于复制数据库是可用的。(可以考虑使用NFS)

 

K:复制数据库与主库必须处于相同的平台上。

 

L:你不能恢复复制数据库到当前时间点及最近的SCN上。RMAN将恢复复制数据库至最近的可用的归档日志,但不能恢复到联机重做日志。

 

M:当复制数据库与主库处于同一主机上时,需要转换数据文件和联机重做日志文件名字。如果你不指定,RMAN将使用主库的文件名称。

 

N:当复制数据库与主库不在同一主机上,而复制数据库文件名想与主库保持一致时,必须使用NOFILENAMECHECK选项。

 

O:当复制数据库与主库处于同一主机上 ,不要指定NOFILENAMECHECK选项,否则RMAN会提示如下错误:

RMAN-10035:exception raised in RPC: ORA-19504: failed to create file

            "/oracle/dbs/tbs_01.f"

ORA-27086:skgfglk: unable to lock file - already in use

SVR4Error: 11: Resource temporarily unavailable

Additionalinformation: 8

RMAN-10031:ORA-19624 occurred during call to

DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE

 

 

 

3.1、以下限制和使用说明针对于备用数据库

A:所有备份或拷贝放在备库主机上,路径与主库相同,且备份和拷贝对于备库是可用的。

 

B:在磁带上的备份,备库主机必须可以访问。

 

C:如果归档日志没有被备份,则归档日志在备库上的路径必须与主库相同,且备份文件可用。

 

D:如果RMAN恢复备用数据库,那么控制文件的CHK SCN 必须包括在一个归档重做日志文件中,该日志文件对于备用数据库是可用的,或包含在一个RMAN备份集中。例如:你创建了一个备用数据库的控制文件,在这以后归档了当前的日志文件,这个日志的序列号假定为100.在这种情况下,你必须恢复备用数据库到日志号为100的SCN。或者数据库报ORA-1152的错误,因为备用数据库控制文件的备份或拷贝要早于这个时间点。

 

E:你不能在备用数据库上使用SETNEWNAME 或者 CONFIGURE AUXNAME 去转换联机重做日志的文件名。

 

F:你不能使用DUPLICATE命令去复制一个激活的备用数据库。

 

G:你不能连接到备用数据库然后使用DUPLICATE... FOR STANDBY 去创建一个额外的备用数据库。要创建一个额外的备用数据库,必须连接到(原始original ? )主库上运行DUPLICATE ... FOR STANDBY

 

H:不要尝试在主库的知识库中去注册备用数据库。

 

I:在使用Oracle ManagedFiles (OMF)的数据库上,不能使用DB_FILE_NAME_CONVERT和 LOG_FILE_NAME_CONVERT 参数去转换文件名。当你使用ASM磁盘组来存储OMF数据库时,RMAN会使用DB_FILE_NAME_CONVERT 或 LOG_FILE_NAME_CONVERT参数去转换磁盘组的名字,然后根据转换后的磁盘组名去生成新的,有效的文件名。

当你复制一个使用OMF的数据库时,你可以使用如下方式去避免这种文件名转换问题:

1)、使用SET NEWNAME 去指定一个独立的数据文件名。

2)、可以为任何文件件名指定DB_CREATE_FILE_DEST 参数,但是不能使用SET NEWNAME或DB_FILE_NAME_CONVERT参数

在使用OMF的数据库中,复制数据库时,重命名联机重做日志文件可以使用DB_CREATE_FILE_DEST,DB_RECOVERY_FILE_DEST,DB_CREATE_ONLINE_LOG_DEST_n参数。但不能使用LOG_FILE_NAME_CONVERT参数。

 

J:在复制使用OMF的数据库后,当数据库转换为主库角色或者以只读方式打开的时候,临时文件会重新创建在 DB_CREATE_FILE_DEST 地址下。

 

4、例子

4.1、手动设置新文件名

 

假设主数据库在h1主机上,目录为/h1/oracle/dbs/trgt。你想复制一个数据库到h2主机上,目录为/h2/oracle/oradata/newdb。备份文件在磁带上,你想复制数据库并恢复到24小时以前的状态:

RUN
  ALLOCATE AUXILIARY CHANNEL newdb1 DEVICE TYPE sbt; 
  DUPLICATE TARGET DATABASE TO newdb
    DB_FILE_NAME_CONVERT=('/h1/oracle/dbs/trgt/','/h2/oracle/oradata/newdb/')
    UNTIL TIME 'SYSDATE-1'  # specifies incomplete recovery
    SKIP TABLESPACE cmwlite, drsys, example   # skip desired tablespaces
    PFILE = ?/dbs/initNEWDB.ora
    lOGFILE
      GROUP 1 ('?/oradata/newdb/redo01_1.f', 
               '?/oradata/newdb/redo01_2.f') SIZE 200K, 
      GROUP 2 ('?/oradata/newdb/redo02_1.f', 
               '?/oradata/newdb/redo02_2.f') SIZE 200K 
      GROUP 3 ('?/oradata/newdb/redo03_1.f',
               '?/oradata/newdb/redo03_2.f') SIZE 200K REUSE;
}

 

 

4.2、使用主数据库文件名

这个例子假定如下情况:

1、你在没有知识库的情况下执行异机还原。

2、你配置了自动通道。

3、主库和复制库具有相同的文件结构。

4、你希望复制库使用与主库一样的文件名。

5、你不想复制只读表空间。

6、你想防止RMAN检查主库和复制库的文件名。

CONNECT TARGET
CONNECT AUXILIARY SYS/aux_pwd@newdb
DUPLICATE TARGET DATABASE TO ndbnewh 
  LOGFILE 
    '?/dbs/log_1.f' SIZE 200K,
    '?/dbs/log_2.f' SIZE 200K 
  SKIP READONLY 
  NOFILENAMECHECK

 

 

4.3、创建备用数据库

该例子创建一个远程的备用数据库,备库与主库具有相同的文件结构。在该例子中NOFILENAMECHECK被指定,因为备库和主库使用相同的文件名。并且已经配置了自动AUXILIARY通道。

DUPLICATE TARGET DATABASE FOR STANDBY
  NOFILENAMECHECK;

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值