创建本地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