创建本地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 UNUSEDDuplicate数据库已产生新的DBID(Standby数据库不会产生新的DBID)
SQL> select dbid,name,open_mode from v$database;
DBID NAME OPEN_MODE
---------- --------- --------------------
1291717905 ORCL READ WRITE