当前位置: 首页 > Oracle, oracle 10g, oracle 11g > 正文

创建本地Duplicate数据库

Duplicate是RMAN的一个组成部分,利用Duplicate复制一个数据库相当简单,Duplicate可以在不影响目标数据库的情况下,依靠目标数据库的备份集常见一个数据库副本或者standby数据库,(11g对Duplicate有所加强,已经非必须依赖目标数据库的备份集)。在复制目标数据库的时候,既可以复制完整的数据库,也可以仅复制目标数据库的部分表空间,也可以跳过指定的表空间和只读的表空间,(system和undo表空间不能被跳过)。
一、创建本地Duplicate数据库演示:
环境:Windows XP,oracle 11gR2
1.创建一个新的oracle服务,linux环境跳过。

C:Documents and SettingsAdministrator>oradim -new -sid orcl

实例已创建。

2.创建需要的目录

mkdir D:oracleoradataorcl
mkdir D:oracleadminorcladump
mkdir D:oracleoradataorcl
mkdir D:oracleflash_recovery_areaorcl

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

D:oracleproduct11.2.0dbhome_1database>copy PWDrac1.ora PWDorcl.ora
已复制         1 个文件。
D:oracleproduct11.2.0dbhome_1database>copy initrac1.ora initorcl.ora
已复制         1 个文件。

4.修改参数文件

*.audit_file_dest='D:oracleadminorcladump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='D:oracleoradataorclcontrol01.ctl','D:oracleflash_recovery_areaorclcontrol02.ctl'
*.db_block_size=8192
*.db_name='orcl'
*.db_recovery_file_dest='D:oracleflash_recovery_area'
*.db_recovery_file_dest_size=15728640000
*.diagnostic_dest='D:oracle'
*.sga_target=314572800
*.undo_tablespace='UNDOTBS1'
db_file_name_convert=('D:oracleoradatarac1','D:oracleoradataorcl')
log_file_name_convert=('D:oracleoradatarac1','D:oracleoradataorcl')

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:oracleoradatarac1, D:oracleoradataorcl
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:oracleoradatarac1, D:oracleoradataorcl
service_names           string      ORCL

6.Rman备份目标数据库

C:Documents and SettingsAdministrator>set ORACLE_SID=rac1
D:oracleproduct11.2.0dbhome_1database>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:ORACLEFLASH_RECOVERY_AREARAC1BACKUPSET2011_10_07O1_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:ORACLEORADATARAC1SYSTEM01.DBF
输入数据文件: 文件号=00002 名称=D:ORACLEORADATARAC1SYSAUX01.DBF
输入数据文件: 文件号=00003 名称=D:ORACLEORADATARAC1UNDOTBS01.DBF
输入数据文件: 文件号=00004 名称=D:ORACLEORADATARAC1USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 07-10月-11
通道 ORA_DISK_1: 已完成段 1 于 07-10月-11
段句柄=D:ORACLEFLASH_RECOVERY_AREARAC1BACKUPSET2011_10_07O1_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:ORACLEFLASH_RECOVERY_AREARAC1BACKUPSET2011_10_07O1_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:ORACLEFLASH_RECOVERY_AREARAC1BACKUPSET2011_10_07O1_MF_ANNNN_TAG20
111007T203300_78XWCWHL_.BKP 标记=TAG20111007T203300 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 07-10月-11

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

ORA-19505: 无法识别文件"D:ORACLEFLASH_RECOVERY_AREARAC1BACKUPSET2011_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:oracleproduct11.2.0dbhome_1database>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 为RAC1,db_unique_name为ORCL,然后重新启动辅助实例到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:ORACLEFLASH_RECOVERY_AREARAC1BACKUPS
ET2011_10_07O1_MF_NCSNF_TAG20111007T203051_78XWCTFM_.BKP
通道 ORA_AUX_DISK_1: 段句柄 = D:ORACLEFLASH_RECOVERY_AREARAC1BACKUPSET2011_
10_07O1_MF_NCSNF_TAG20111007T203051_78XWCTFM_.BKP 标记 = TAG20111007T203051
通道 ORA_AUX_DISK_1: 已还原备份片段 1
通道 ORA_AUX_DISK_1: 还原完成, 用时: 00:00:03
输出文件名=D:ORACLEORADATAORCLCONTROL01.CTL
输出文件名=D:ORACLEFLASH_RECOVERY_AREAORCLCONTROL02.CTL
完成 restore 于 07-10月-11
数据库已装载

以上日志为restore控制文件

内存脚本的内容:
{
   set until scn  799964;
   set newname for datafile  1 to
 "D:ORACLEORADATARAC1SYSTEM01.DBF";
   set newname for datafile  2 to
 "D:ORACLEORADATARAC1SYSAUX01.DBF";
   set newname for datafile  3 to
 "D:ORACLEORADATARAC1UNDOTBS01.DBF";
   set newname for datafile  4 to
 "D:ORACLEORADATARAC1USERS01.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:ORACLEORADATAORCLSYSTEM01.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00002 还原到 D:ORACLEORADATAORCLSYSAUX01.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00003 还原到 D:ORACLEORADATAORCLUNDOTBS01.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00004 还原到 D:ORACLEORADATAORCLUSERS01.DBF
通道 ORA_AUX_DISK_1: 正在读取备份片段 D:ORACLEFLASH_RECOVERY_AREARAC1BACKUPS
ET2011_10_07O1_MF_NNNDF_TAG20111007T203051_78XW7W1K_.BKP
通道 ORA_AUX_DISK_1: 段句柄 = D:ORACLEFLASH_RECOVERY_AREARAC1BACKUPSET2011_
10_07O1_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:ORACLEORADATAORCLSYSTEM01.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 RECID=6 STAMP=763937148 文件名=D:ORACLEORADATAORCLSYSAUX01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 RECID=7 STAMP=763937148 文件名=D:ORACLEORADATAORCLUNDOTBS01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 RECID=8 STAMP=763937148 文件名=D:ORACLEORADATAORCLUSERS01.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:ORACLEFLASH_RECOVERY_AREARAC1ARCHIVELO
G2011_10_07O1_MF_1_57_78XWCVRC_.ARC 存在于磁盘上
归档日志文件名=D:ORACLEFLASH_RECOVERY_AREARAC1ARCHIVELOG2011_10_07O1_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:ORACLEORADATAORCLREDO01.LOG' ) SIZE 50 M  REUSE,
  GROUP  2 ( 'D:ORACLEORADATAORCLREDO02.LOG' ) SIZE 50 M  REUSE,
  GROUP  3 ( 'D:ORACLEORADATAORCLREDO03.LOG' ) SIZE 50 M  REUSE
 DATAFILE
  'D:ORACLEORADATAORCLSYSTEM01.DBF'
 CHARACTER SET ZHS16GBK
内存脚本的内容:
{
   set newname for tempfile  1 to
 "D:ORACLEORADATAORCLTEMP01.DBF";
   switch clone tempfile all;
   catalog clone datafilecopy  "D:ORACLEORADATAORCLSYSAUX01.DBF",
 "D:ORACLEORADATAORCLUNDOTBS01.DBF",
 "D:ORACLEORADATAORCLUSERS01.DBF";
   switch clone datafile all;
}
正在执行内存脚本
正在执行命令: SET NEWNAME
临时文件 1 在控制文件中已重命名为 D:ORACLEORADATAORCLTEMP01.DBF
已将数据文件副本列入目录
数据文件副本文件名=D:ORACLEORADATAORCLSYSAUX01.DBF RECID=1 STAMP=763937171
已将数据文件副本列入目录
数据文件副本文件名=D:ORACLEORADATAORCLUNDOTBS01.DBF RECID=2 STAMP=763937171
已将数据文件副本列入目录
数据文件副本文件名=D:ORACLEORADATAORCLUSERS01.DBF RECID=3 STAMP=763937172
数据文件 2 已转换成数据文件副本
输入数据文件副本 RECID=1 STAMP=763937171 文件名=D:ORACLEORADATAORCLSYSAUX01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 RECID=2 STAMP=763937171 文件名=D:ORACLEORADATAORCLUNDOTBS01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 RECID=3 STAMP=763937172 文件名=D:ORACLEORADATAORCLUSERS01.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:oracleoradatarac1, D:oracleoradataorcl
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:oracleoradatarac1, D:oracleoradataorcl
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:ORACLEORADATAORCLSYSTEM01.DBF
D:ORACLEORADATAORCLSYSAUX01.DBF
D:ORACLEORADATAORCLUNDOTBS01.DBF
D:ORACLEORADATAORCLUSERS01.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数据库已产生新的DBID(Standby数据库不会产生新的DBID)

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

      DBID    NAME         OPEN_MODE
----------    ---------    --------------------
1291717905    ORCL         READ WRITE

本文固定链接: http://www.dbdream.com.cn/2011/10/%e5%88%9b%e5%bb%ba%e6%9c%ac%e5%9c%b0duplicate%e6%95%b0%e6%8d%ae%e5%ba%93/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2011年10月08日发表在 Oracle, oracle 10g, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 创建本地Duplicate数据库 | 信春哥,系统稳,闭眼上线不回滚!
关键字:

创建本地Duplicate数据库:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter