创建本地Duplicate数据库

DuplicateRMAN的一个组成部分,利用Duplicate复制一个数据库相当简单,Duplicate可以在不影响目标数据库的情况下,依靠目标数据库的备份集常见一个数据库副本或者standby数据库,(11gDuplicate有所加强,已经非必须依赖目标数据库的备份集)。在复制目标数据库的时候,既可以复制完整的数据库,也可以仅复制目标数据库的部分表空间,也可以跳过指定的表空间和只读的表空间,(systemundo表空间不能被跳过)。

一、创建本地Duplicate数据库演示:

环境:Windows XPoracle 11gR2

1.   创建一个新的oracle服务,linux环境跳过。

C:\Documents and Settings\Administrator>oradim -new -sid orcl

实例已创建。

2.         创建需要的目录

mkdir D:\oracle\oradata\orcl

mkdir D:\oracle\admin\orcl\adump

mkdir D:\oracle\oradata\orcl

mkdir D:\oracle\flash_recovery_area\orcl

3.         创建参数文件和密码文件

D:\oracle\product\11.2.0\dbhome_1\database>copy PWDrac1.ora PWDorcl.ora

已复制         1 个文件。

 

D:\oracle\product\11.2.0\dbhome_1\database>copy initrac1.ora initorcl.ora

已复制         1 个文件。

4.         修改参数文件

*.audit_file_dest='D:\oracle\admin\orcl\adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'

*.control_files='D:\oracle\oradata\orcl\control01.ctl','D:\oracle\flash_recovery_area\orcl\control02.ctl'

*.db_block_size=8192

*.db_name='orcl'

*.db_recovery_file_dest='D:\oracle\flash_recovery_area'

*.db_recovery_file_dest_size=15728640000

*.diagnostic_dest='D:\oracle'

*.sga_target=314572800

*.undo_tablespace='UNDOTBS1'

db_file_name_convert=('D:\oracle\oradata\rac1','D:\oracle\oradata\orcl')

log_file_name_convert=('D:\oracle\oradata\rac1','D:\oracle\oradata\orcl')

5.   创建spfile

set ORACLE_SID=orcl

sqlplus / as sysdba

SQL> create spfile from pfile;

文件已创建。

SQL> startup nomount;

ORACLE 例程已经启动。

Total System Global Area  313860096 bytes

Fixed Size                  1374304 bytes

Variable Size             104859552 bytes

Database Buffers          201326592 bytes

Redo Buffers                6299648 bytes

SQL> show parameter name

NAME                    TYPE        VALUE

----------------------  ----------- ------------------------------

db_file_name_convert    string      D:\oracle\oradata\rac1, D:\oracle\oradata\orcl

db_name                 string      ORCL

db_unique_name          string      ORCL

global_names            boolean     FALSE

instance_name           string      orcl

lock_name_space         string

log_file_name_convert   string      D:\oracle\oradata\rac1, D:\oracle\oradata\orcl

service_names           string      ORCL

6.   Rman备份目标数据库

C:\Documents and Settings\Administrator>set ORACLE_SID=rac1

D:\oracle\product\11.2.0\dbhome_1\database>rman target /

恢复管理器: Release 11.2.0.1.0 - Production on 星期五 10月 7 20:30:28 2011

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

连接到目标数据库: RAC1 (DBID=668639724)

RMAN> backup database plus archivelog;

启动 backup 于 07-10月-11

当前日志已存档

使用目标数据库控制文件替代恢复目录

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=140 设备类型=DISK

通道 ORA_DISK_1: 正在启动归档日志备份集

通道 ORA_DISK_1: 正在指定备份集内的归档日志

输入归档日志线程=1 序列=56 RECID=1 STAMP=763936248

通道 ORA_DISK_1: 正在启动段 1 于 07-10月-11

通道 ORA_DISK_1: 已完成段 1 于 07-10月-11

段句柄=D:\ORACLE\FLASH_RECOVERY_AREA\RAC1\BACKUPSET\2011_10_07\O1_MF_ANNNN_TAG20

111007T203049_78XW7T20_.BKP 标记=TAG20111007T203049 注释=NONE

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01

完成 backup 于 07-10月-11

启动 backup 于 07-10月-11

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在启动全部数据文件备份集

通道 ORA_DISK_1: 正在指定备份集内的数据文件

输入数据文件: 文件号=00001 名称=D:\ORACLE\ORADATA\RAC1\SYSTEM01.DBF

输入数据文件: 文件号=00002 名称=D:\ORACLE\ORADATA\RAC1\SYSAUX01.DBF

输入数据文件: 文件号=00003 名称=D:\ORACLE\ORADATA\RAC1\UNDOTBS01.DBF

输入数据文件: 文件号=00004 名称=D:\ORACLE\ORADATA\RAC1\USERS01.DBF

通道 ORA_DISK_1: 正在启动段 1 于 07-10月-11

通道 ORA_DISK_1: 已完成段 1 于 07-10月-11

段句柄=D:\ORACLE\FLASH_RECOVERY_AREA\RAC1\BACKUPSET\2011_10_07\O1_MF_NNNDF_TAG20

111007T203051_78XW7W1K_.BKP 标记=TAG20111007T203051 注释=NONE

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:02:05

通道 ORA_DISK_1: 正在启动全部数据文件备份集

通道 ORA_DISK_1: 正在指定备份集内的数据文件

备份集内包括当前控制文件

备份集内包括当前的 SPFILE

通道 ORA_DISK_1: 正在启动段 1 于 07-10月-11

通道 ORA_DISK_1: 已完成段 1 于 07-10月-11

段句柄=D:\ORACLE\FLASH_RECOVERY_AREA\RAC1\BACKUPSET\2011_10_07\O1_MF_NCSNF_TAG20

111007T203051_78XWCTFM_.BKP 标记=TAG20111007T203051 注释=NONE

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01

完成 backup 于 07-10月-11

启动 backup 于 07-10月-11

当前日志已存档

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在启动归档日志备份集

通道 ORA_DISK_1: 正在指定备份集内的归档日志

输入归档日志线程=1 序列=57 RECID=2 STAMP=763936379

通道 ORA_DISK_1: 正在启动段 1 于 07-10月-11

通道 ORA_DISK_1: 已完成段 1 于 07-10月-11

段句柄=D:\ORACLE\FLASH_RECOVERY_AREA\RAC1\BACKUPSET\2011_10_07\O1_MF_ANNNN_TAG20

111007T203300_78XWCWHL_.BKP 标记=TAG20111007T203300 注释=NONE

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01

完成 backup 于 07-10月-11

如此部分未备份归档,归档需要单独备份,否则会报找不到备份错误

ORA-19505: 无法识别文件"D:\ORACLE\FLASH_RECOVERY_AREA\RAC1\BACKUPSET\2011_10_07\

O1_MF_NNNDF_TAG20111007T203051_78XW7W1K_.BKP"

ORA-27041: 无法打开文件

OSD-04002: 无法打开文件

O/S-Error: (OS 2) 系统找不到指定的文件。

故障转移到上一个备份

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: Duplicate Db 命令 (在 10/07/2011 21:18:10 上) 失败

RMAN-03015: 在存储的脚本Memory Script中出现错误

RMAN-06026: 有些目标没有找到 - 终止还原

RMAN-06023: 没有找到数据文件4的副本来还原

RMAN-06023: 没有找到数据文件3的副本来还原

RMAN-06023: 没有找到数据文件2的副本来还原

RMAN-06023: 没有找到数据文件1的副本来还原1

7.   RMAN连接目标数据库和辅助数据库

D:\oracle\product\11.2.0\dbhome_1\database>rman target / auxiliary sys/oracle@orcl

恢复管理器: Release 11.2.0.1.0 - Production on 星期五 10月 7 20:38:34 2011

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

连接到目标数据库: RAC1 (DBID=668639724)

已连接到辅助数据库: ORCL (未装载)

8.   创建Duplicate数据库

RMAN> Duplicate target database to orcl nofilenamecheck;

启动 Duplicate Db 于 07-10月-11

使用目标数据库控制文件替代恢复目录

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: SID=10 设备类型=DISK

内存脚本的内容:

{

   sql clone "alter system set  db_name =

 ''RAC1'' comment=

 ''Modified by RMAN Duplicate'' scope=spfile";

   sql clone "alter system set  db_unique_name =

 ''ORCL'' comment=

 ''Modified by RMAN Duplicate'' scope=spfile";

   shutdown clone immediate;

   startup clone force nomount

   restore clone primary controlfile;

   alter clone database mount;

}

正在执行内存脚本

sql 语句: alter system set  db_name =  ''RAC1'' comment= ''Modified by RMAN dupl

icate'' scope=spfile

sql 语句: alter system set  db_unique_name =  ''ORCL'' comment= ''Modified by RM

AN Duplicate'' scope=spfile

Oracle 实例已关闭

Oracle 实例已启动

系统全局区域总计     313860096 字节

Fixed Size           1374304 字节

Variable Size        104859552 字节

Database Buffers     201326592 字节

Redo Buffers         6299648 字节

以上日志为启动创建Duplicate数据库,并修改db_name RAC1db_unique_nameORCL,然后重新启动辅助实例到nomount状态。

启动 restore 于 07-10月-11

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: SID=133 设备类型=DISK

通道 ORA_AUX_DISK_1: 正在开始还原数据文件备份集

通道 ORA_AUX_DISK_1: 正在还原控制文件

通道 ORA_AUX_DISK_1: 正在读取备份片段 D:\ORACLE\FLASH_RECOVERY_AREA\RAC1\BACKUPS

ET\2011_10_07\O1_MF_NCSNF_TAG20111007T203051_78XWCTFM_.BKP

通道 ORA_AUX_DISK_1: 段句柄 = D:\ORACLE\FLASH_RECOVERY_AREA\RAC1\BACKUPSET\2011_

10_07\O1_MF_NCSNF_TAG20111007T203051_78XWCTFM_.BKP 标记 = TAG20111007T203051

通道 ORA_AUX_DISK_1: 已还原备份片段 1

通道 ORA_AUX_DISK_1: 还原完成, 用时: 00:00:03

输出文件名=D:\ORACLE\ORADATA\ORCL\CONTROL01.CTL

输出文件名=D:\ORACLE\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL

完成 restore 于 07-10月-11

数据库已装载

以上日志为restore控制文件

内存脚本的内容:

{

   set until scn  799964;

   set newname for datafile  1 to

 "D:\ORACLE\ORADATA\RAC1\SYSTEM01.DBF";

   set newname for datafile  2 to

 "D:\ORACLE\ORADATA\RAC1\SYSAUX01.DBF";

   set newname for datafile  3 to

 "D:\ORACLE\ORADATA\RAC1\UNDOTBS01.DBF";

   set newname for datafile  4 to

 "D:\ORACLE\ORADATA\RAC1\USERS01.DBF";

   restore

   clone database

   ;

}

正在执行内存脚本

正在执行命令: SET until clause

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

启动 restore 于 07-10月-11

使用通道 ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: 正在开始还原数据文件备份集

通道 ORA_AUX_DISK_1: 正在指定从备份集还原的数据文件

通道 ORA_AUX_DISK_1: 将数据文件 00001 还原到 D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF

通道 ORA_AUX_DISK_1: 将数据文件 00002 还原到 D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF

通道 ORA_AUX_DISK_1: 将数据文件 00003 还原到 D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF

通道 ORA_AUX_DISK_1: 将数据文件 00004 还原到 D:\ORACLE\ORADATA\ORCL\USERS01.DBF

通道 ORA_AUX_DISK_1: 正在读取备份片段 D:\ORACLE\FLASH_RECOVERY_AREA\RAC1\BACKUPS

ET\2011_10_07\O1_MF_NNNDF_TAG20111007T203051_78XW7W1K_.BKP

通道 ORA_AUX_DISK_1: 段句柄 = D:\ORACLE\FLASH_RECOVERY_AREA\RAC1\BACKUPSET\2011_

10_07\O1_MF_NNNDF_TAG20111007T203051_78XW7W1K_.BKP 标记 = TAG20111007T203051

通道 ORA_AUX_DISK_1: 已还原备份片段 1

通道 ORA_AUX_DISK_1: 还原完成, 用时: 00:01:25

完成 restore 于 07-10月-11

内存脚本的内容:

{

   switch clone datafile all;

}

正在执行内存脚本

数据文件 1 已转换成数据文件副本

输入数据文件副本 RECID=5 STAMP=763937147 文件名=D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF

数据文件 2 已转换成数据文件副本

输入数据文件副本 RECID=6 STAMP=763937148 文件名=D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF

数据文件 3 已转换成数据文件副本

输入数据文件副本 RECID=7 STAMP=763937148 文件名=D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF

数据文件 4 已转换成数据文件副本

输入数据文件副本 RECID=8 STAMP=763937148 文件名=D:\ORACLE\ORADATA\ORCL\USERS01.DBF

以上日志为restore数据文件

内存脚本的内容:

{

   set until scn  799964;

   recover

   clone database

    delete archivelog

   ;

}

正在执行内存脚本

正在执行命令: SET until clause

启动 recover 于 07-10月-11

使用通道 ORA_AUX_DISK_1

正在开始介质的恢复

线程 1 序列 57 的归档日志已作为文件 D:\ORACLE\FLASH_RECOVERY_AREA\RAC1\ARCHIVELO

G\2011_10_07\O1_MF_1_57_78XWCVRC_.ARC 存在于磁盘上

归档日志文件名=D:\ORACLE\FLASH_RECOVERY_AREA\RAC1\ARCHIVELOG\2011_10_07\O1_MF_1_

57_78XWCVRC_.ARC 线程=1 序列=57

介质恢复完成, 用时: 00:00:01

完成 recover 于 07-10月-11

以上日志为recover数据文件

内存脚本的内容:

{

   shutdown clone immediate;

   startup clone nomount;

   sql clone "alter system set  db_name =

 ''ORCL'' comment=

 ''Reset to original value by RMAN'' scope=spfile";

   sql clone "alter system reset  db_unique_name scope=spfile";

   shutdown clone immediate;

   startup clone nomount;

}

正在执行内存脚本

数据库已卸装

Oracle 实例已关闭

已连接到辅助数据库 (未启动)

Oracle 实例已启动

系统全局区域总计     313860096 字节

Fixed Size           1374304 字节

Variable Size        104859552 字节

Database Buffers     201326592 字节

Redo Buffers         6299648 字节

sql 语句: alter system set  db_name =  ''ORCL'' comment= ''Reset to original value by RMAN'' scope=spfile

sql 语句: alter system reset  db_unique_name scope=spfile

Oracle 实例已关闭

已连接到辅助数据库 (未启动)

Oracle 实例已启动

系统全局区域总计     313860096 字节

Fixed Size           1374304 字节

Variable Size        104859552 字节

Database Buffers     201326592 字节

Redo Buffers         6299648 字节

以上日志为修改db_name为ORCL、重置db_unique_name,并重启到nomount状态

sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "ORCL" RESETLOGS ARCHIVELOG

  MAXLOGFILES     16

  MAXLOGMEMBERS      3

  MAXDATAFILES      100

  MAXINSTANCES     8

  MAXLOGHISTORY      292

 LOGFILE

  GROUP  1 ( 'D:\ORACLE\ORADATA\ORCL\REDO01.LOG' ) SIZE 50 M  REUSE,

  GROUP  2 ( 'D:\ORACLE\ORADATA\ORCL\REDO02.LOG' ) SIZE 50 M  REUSE,

  GROUP  3 ( 'D:\ORACLE\ORADATA\ORCL\REDO03.LOG' ) SIZE 50 M  REUSE

 DATAFILE

  'D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'

 CHARACTER SET ZHS16GBK

内存脚本的内容:

{

   set newname for tempfile  1 to

 "D:\ORACLE\ORADATA\ORCL\TEMP01.DBF";

   switch clone tempfile all;

   catalog clone datafilecopy  "D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF",

 "D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF",

 "D:\ORACLE\ORADATA\ORCL\USERS01.DBF";

   switch clone datafile all;

}

正在执行内存脚本

正在执行命令: SET NEWNAME

临时文件 1 在控制文件中已重命名为 D:\ORACLE\ORADATA\ORCL\TEMP01.DBF

已将数据文件副本列入目录

数据文件副本文件名=D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF RECID=1 STAMP=763937171

已将数据文件副本列入目录

数据文件副本文件名=D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF RECID=2 STAMP=763937171

已将数据文件副本列入目录

数据文件副本文件名=D:\ORACLE\ORADATA\ORCL\USERS01.DBF RECID=3 STAMP=763937172

数据文件 2 已转换成数据文件副本

输入数据文件副本 RECID=1 STAMP=763937171 文件名=D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF

数据文件 3 已转换成数据文件副本

输入数据文件副本 RECID=2 STAMP=763937171 文件名=D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF

数据文件 4 已转换成数据文件副本

输入数据文件副本 RECID=3 STAMP=763937172 文件名=D:\ORACLE\ORADATA\ORCL\USERS01.DBF

以上为重建控制文件,并将数据文件注册到控制文件内。

内存脚本的内容:

{

   Alter clone database open resetlogs;

}

正在执行内存脚本

数据库已打开

完成 Duplicate Db 于 07-10月-11

以上日志为resetlogs方式打开数据库(Standby数据库不会打开数据库)

SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS

---------------- ------------

orcl             OPEN

db_name已改回ORCL

SQL> show parameter name

NAME                    TYPE        VALUE

----------------------  ----------- ----------------------------------------------

db_file_name_convert    string      D:\oracle\oradata\rac1, D:\oracle\oradata\orcl

db_name                 string      ORCL

db_unique_name          string      ORCL

global_names            boolean     FALSE

instance_name           string      orcl

lock_name_space         string

log_file_name_convert   string      D:\oracle\oradata\rac1, D:\oracle\oradata\orcl

service_names           string      ORCL

表空间和数据文件已成功复制

SQL> select * from v$tablespace;

       TS# NAME                                     INC BIG FLA ENC

---------- ---------------------------------------- --- --- --- ---

         0 SYSTEM                                   YES NO  YES

         3 TEMP                                     NO  NO  YES

         1 SYSAUX                                   YES NO  YES

         2 UNDOTBS1                                 YES NO  YES

         4 USERS                                    YES NO  YES

SQL> select name from v$datafile;

NAME

----------------------------------------

D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF

D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF

D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF

D:\ORACLE\ORADATA\ORCL\USERS01.DBF

    日志序号已从1开始(Standby数据库不会重置redo日志)

SQL> archive log list

数据库日志模式            存档模式

自动存档                  启用

存档终点                  USE_DB_RECOVERY_FILE_DEST

最早的联机日志序列        1

下一个存档日志序列        1

当前日志序列              1

SQL> select GROUP#,THREAD#,SEQUENCE#,BYTES,MEMBERS,ARCHIVED,STATUS from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- ---------- ---------- ---------- ---------- --- ---------

         1          1          1   52428800          1 NO  CURRENT

         2          1          0   52428800          1 YES UNUSED

         3          1          0   52428800          1 YES UNUSED

Duplicate数据库已产生新的DBIDStandby数据库不会产生新的DBID

SQL> select dbid,name,open_mode from v$database;

      DBID    NAME         OPEN_MODE

----------    ---------    --------------------

1291717905    ORCL         READ WRITE

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值