主要操作步骤:
1. 创建auxiliary instance的口令文件
2. 配置auxiliary instance的监听和tnsnames.ora
3. 创建auxiliary instance的参数文件
4. 启动auxiliary instance到nomount状态
5. target database open or mount
6. 保证备份文件和归档文件可用
7. 在RMAN中执行DUPLICATE命令
环境:
Windows xp
Oracle 10.2.0.1
同一台机器做duplicate
1. 创建auxiliary instance的口令文件
先创建aux实例:
C:\>oradim -NEW -SID aux
实例已创建。
创建口令文件:
C:\>orapwd file=D:\oracle\product\10.2.0\db_1\database\PWDaux.ora password=sys
2. 配置auxiliary instance的监听和tnsnames.ora
listener.ora中增加:
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = aux)
)
tnsnames.ora中增加:
aux =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = aux)
)
)
使用tnsping验证:
C:\>tnsping aux
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 22-4月 -2009 09:47:35
Copyright (c) 1997, 2005, Oracle. All rights reserved.
已使用的参数文件:
D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
已使用 TNSNAMES 适配器来解析别名
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = aux))) OK (10 毫秒)
3. 创建auxiliary instance的参数文件
创建参数文件d:\initaux.ora,内容如下:
compatible='10.2.0.1.0'
db_name='aux'
db_block_size=8192
SHARED_POOL_SIZE=50M
CONTROL_FILES='D:\oracle\product\10.2.0\oradata\auxi\control01.ctl'
DB_FILE_NAME_CONVERT='D:\oracle\product\10.2.0\oradata\orcl','D:\oracle\product\10.2.0\oradata\auxi'
LOG_FILE_NAME_CONVERT='D:\oracle\product\10.2.0\oradata\orcl','D:\oracle\product\10.2.0\oradata\auxi'
还必须创建D:\oracle\product\10.2.0\oradata\auxi目录
4. 启动auxiliary instance到nomount状态
C:\>set oracle_sid=aux
C:\>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 4月 22 09:35:00 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到空闲例程。
SQL> startup nomount pfile=d:\initaux.ora
ORACLE 例程已经启动。
Total System Global Area 117440512 bytes
Fixed Size 1247588 bytes
Variable Size 58721948 bytes
Database Buffers 50331648 bytes
Redo Buffers 7139328 bytes
SQL> create spfile from pfile='d:\initaux.ora';
文件已创建。
再用spfile重启auxiliary instance,并exit
SQL> shutdown immediate
ORA-01507: ??????
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 138412032 bytes
Fixed Size 1247708 bytes
Variable Size 79693348 bytes
Database Buffers 50331648 bytes
Redo Buffers 7139328 bytes
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 断开
5. target database open or mount
确认target database状态为open 或mount
6. 保证备份文件和归档文件可用
备份target database:
C:\>rman target /
RMAN> backup as compressed backupset database format='d:\full_%U.ora' plus archivelog;
RMAN> exit
由于是在同一台机器做duplicate,备份文件和归档日志不用复制。
7. 在RMAN中执行DUPLICATE命令
C:\>rman target / auxiliary sys/sys@aux
恢复管理器: Release 10.2.0.1.0 - Production on 星期三 4月 22 11:40:03 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: ORCL (DBID=1212147403)
已连接到辅助数据库: AUX (未装载)
RMAN> duplicate target database to aux;
启动 Duplicate Db 于 22-4月 -09
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=36 devtype=DISK
内存脚本的内容:
{
set until scn 771578;
set newname for datafile 1 to
"D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF";
set newname for datafile 2 to
"D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF";
set newname for datafile 3 to
"D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF";
set newname for datafile 4 to
"D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF";
set newname for datafile 5 to
"D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF";
restore
check readonly
clone database
;
}
正在执行内存脚本
正在执行命令: SET until clause
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 restore 于 22-4月 -09
使用通道 ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF
正将数据文件00002恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF
正将数据文件00003恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF
正将数据文件00004恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF
正将数据文件00005恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF
通道 ORA_AUX_DISK_1: 正在读取备份段 D:\FULL_0EKD3RRO_1_1.ORA
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:\FULL_0EKD3RRO_1_1.ORA 标记 = TAG20090422T111608
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:46
完成 restore 于 22-4月 -09
sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "AUX" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO01.LOG' ) SIZE 50 M REUSE,
GROUP 2 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO02.LOG' ) SIZE 50 M REUSE,
GROUP 3 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO03.LOG' ) SIZE 50 M REUSE
DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF'
CHARACTER SET ZHS16GBK
内存脚本的内容:
{
switch clone datafile all;
}
正在执行内存脚本
释放的通道: ORA_AUX_DISK_1
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=1 stamp=684848459 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=2 stamp=684848459 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 recid=3 stamp=684848459 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 recid=4 stamp=684848459 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF
内存脚本的内容:
{
set until scn 771578;
recover
clone database
delete archivelog
;
}
正在执行内存脚本
正在执行命令: SET until clause
启动 recover 于 22-4月 -09
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=36 devtype=DISK
正在开始介质的恢复
存档日志线程 1 序列 16 已作为文件 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_04_22\O1_MF_1_16_4YX3191Y_.ARC 存在于磁盘上
存档日志线程 1 序列 17 已作为文件 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_04_22\O1_MF_1_17_4YX34WH4_.ARC 存在于磁盘上
存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_04_22\O1_MF_1_16_4YX3191Y_.ARC 线程 =1 序列 =16
存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_04_22\O1_MF_1_17_4YX34WH4_.ARC 线程 =1 序列 =17
介质恢复完成, 用时: 00:00:02
完成 recover 于 22-4月 -09
内存脚本的内容:
{
shutdown clone;
startup clone nomount ;
}
正在执行内存脚本
数据库已卸载
Oracle 实例已关闭
已连接到辅助数据库 (未启动)
Oracle 实例已启动
系统全局区域总计 138412032 字节
Fixed Size 1247708 字节
Variable Size 79693348 字节
Database Buffers 50331648 字节
Redo Buffers 7139328 字节
sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "AUX" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO01.LOG' ) SIZE 50 M REUSE,
GROUP 2 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO02.LOG' ) SIZE 50 M REUSE,
GROUP 3 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO03.LOG' ) SIZE 50 M REUSE
DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF'
CHARACTER SET ZHS16GBK
内存脚本的内容:
{
set newname for tempfile 1 to
"D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\TEMP01.DBF";
switch clone tempfile all;
catalog clone datafilecopy "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF";
catalog clone datafilecopy "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF";
catalog clone datafilecopy "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF";
catalog clone datafilecopy "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF";
switch clone datafile all;
}
正在执行内存脚本
正在执行命令: SET NEWNAME
临时文件 1 在控制文件中已重命名为 D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\TEMP01.DBF
已将数据文件副本列入目录
数据文件副本 filename=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF recid=1 stamp=684848472
已将数据文件副本列入目录
数据文件副本 filename=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF recid=2 stamp=684848473
已将数据文件副本列入目录
数据文件副本 filename=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF recid=3 stamp=684848473
已将数据文件副本列入目录
数据文件副本 filename=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF recid=4 stamp=684848473
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=1 stamp=684848472 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=2 stamp=684848473 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 recid=3 stamp=684848473 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 recid=4 stamp=684848473 文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF
内存脚本的内容:
{
Alter clone database open resetlogs;
}
正在执行内存脚本
数据库已打开
完成 Duplicate Db 于 22-4月 -09
这个过程中可能会出现如下报错:
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: Duplicate Db 命令 (在 04/22/2009 10:41:16 上) 失败
RMAN-03015: 在存储的脚本Memory Script中出现错误
RMAN-06026: 有些目标没有找到 - 终止恢复
RMAN-06023: 没有找到数据文件5的副本来恢复
RMAN-06023: 没有找到数据文件4的副本来恢复
RMAN-06023: 没有找到数据文件3的副本来恢复
RMAN-06023: 没有找到数据文件2的副本来恢复
RMAN-06023: 没有找到数据文件1的副本来恢复
错误指出的是无法找到相关备份文件,可通过
RMAN> restore validate database;
检查备份的有效性,如不是备份问题,则说明需要通过切换一个归档解决
RMAN> sql 'alter system switch logfile';
此错误在metalink中的描述如下:
Doc ID: Note:108883.1
Subject: RMAN-06023 when Duplicating a Database
Solution Description
--------------------
You must issue a log switch and backup the archivelogs as well. This error is indicating that all pieces required to perform. the duplication are not present.When you issue a backup script. which backs up all of the archivelogs (after a log switch), the duplicate database script. completes successfully.
Explanation
-----------
You must also back up the archivelogs in order to perform. a duplicate from a hot backup.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17997/viewspace-591401/ ,如需转载,请注明出处,否则将追究法律责任。