ORACLE在数据库拷贝和数据库克隆之间惟一不同的是拷贝的数据库不能更改名称。使用RMAN的复制数据库特性,可以从RMAN备份创建一个
通过使用数据库备份,DBA可以在同一服务器或其它服务器上建立副本数据库。这个副本数据库可以和主数据库有相同的名称(拷贝)或与主数据库名称不同(克隆)。
Oracle在数据库拷贝和数据库克隆之间惟一不同的是拷贝的数据库不能更改名称。使用RMAN的复制数据库特性,可以从RMAN备份创建一个新的数据库,并为这个副本数据库保留已有的数据库名称或者赋予新的名称。
RMAN术语和命令:
A. 辅助数据库(Auxiliary database):RMAN将目标数据库复制到该数据库实例。要创建该数据库的参数文件、路径和口令文件。必须在RMAN数据库复制之前以非加载(NOMOUNT)模式启动辅助数据库实例。
B. 复制(Duplicate):从其它数据库的RMAN备份创建一个新的数据库。要在RMAN执行复制的位置配置数据库并启动Oracle的实例。从RMAN的角度来看,目标数据库被复制到副本数据库。
C. 设置新名称(Set newname):在一个RMAN运行块内为数据文件设置新的名称,提供给该参数的文件名称覆盖任何该数据文件的辅助数据库名(用SET AUXNAME)或者辅助数据库参数(DB_FILE_NAME_CONVERT)。这个新名称的值只在运行块内有效。
D. 设置辅助名称(Set auxname):为数据文件设置辅助名称,这个辅助名称将在RMAN会话之间存在。如果不希望以后的RMAN命令中使用这个设置的名称,则必须将该名称设置为NULL。
E. 日志文件(log file):可以在Duplicate命令中作用这个关键词,以指定副本数据库创建的联机重做日志文件。如果没有特别指定这个关键词,则RMAN将在辅助参数文件中的LOG_FILE_NAME_CONVERT参数决定的路径中生成日志文件。如果没有这个RMAN关键词,而且也没有设置辅助参数,则RMAN将在目标数据库同样的位置创建日志
(假设已指定了NOCHECKFILENAME选项)。
F. 不检查文件名(Nocheckfilename):默认情况下,RMAN将检查在副本主机上被恢复到主目标数据文件路径下的数据文件,以确保不会被错误地覆盖。使用该选项可以覆盖这个默认的操作。这样就需要手工确保RMAN没有覆盖任何已存在的数据文件。应当谨慎使用这个命令,以防止覆盖数据文件。
在Duplicate命令执行的过程中,RMAN执行了一系列工作。当连接到目标、辅助和或选的目录数据库后,RMAN将进行以下操作:
1) 根据最近发生的或者是提供的恢复停止点来决定复制操作将使用哪个基本的备份。
2) 根据辅助数据库参数或RMAN设置的命令和选项来决定将数据文件保存在辅助数据库实例的什么位置。
3) 为辅助数据库读出备份片或映像拷贝并恢复数据文件。这个RMAN的功能与执行正常的数据库还原是一样的。
4) 根据恢复停止点将任何增量备份应用于还原数据文件。这个增量方式的应用与用RMAN发布恢复数据库命令的任务是一样的。
5) 根据恢复停止点从磁盘或备份将所有归档日志文件应用于还原数据文件。
6) 为辅助数据库创建新的控制文件。
7) 当重新设置联机重做日志文件时,打开副本数据库。新的联机重做日志文件将根据RMAN复制数据库命令中指定的或者根据转换的辅助参数文件进行创建。
创建副本数据库的步骤:
1) 准备副本数据库参数文件:拷贝目标数据库的参数文件到$ORACLE_BASE/admin/clone/pfile位置。修改参数文件,替换所有目标数据库名为副本数据库名,同时增
加两个参数:db_file_name_cOnvert= (“primary”,”clone”)、log_file_name_cOnvert= (“primary”,”clone”),再在$ORACLE_HOME/dbs目录下增加
参数文件的LINUX符号连接,,或者%ORACLE_HOME%\database目录下增加windows参数文件。
2) 创建口令文件:
LINUX>orapwd file=$ORACLE_HOME/dbs/orapwCLONE password=clone entries=4
WINNT>orapwd file=%ORACLE_HOME%\database\PWDCLONE.ORA password=clone
3) 创建windows服务(linux不需要):
WINNT>oradim –new –sid clone –intpwd clone
4) 建立NET8连接
5) 启动辅助实例:在RMAN创建副本数据库以前,辅助实例需要以非加载模式启动
6) 加载或打开目标数据库
7) 创建副本数据库
C:\Documents and Settings\Administrator>rman
Recovery Manager: 版本 9.2.0.1.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation.All rights reserved.
RMAN> connect target sys/oracle@mydb ;
已联机到目标数据库: MYDB (DBID=2567199153)
RMAN> connect catalog rman/rman@standby
已联机至复原目录数据库
RMAN> connect auxiliary sys/clone;
联机至辅助数据库: clone (未挂载)
RMAN> run{
2> SET UNTIL logseq 3 THREAD 1;
3> ALLOCATE auxiliary channel d1 TYPE DISK;
4> duplicate target DATABASE TO "CLONE";
5> }
执行命令: SET until clause
已配置信道: d1
通道 d1: sid=14 devtype=DISK
开始 Duplicate Db, 于 07-5月 -08
打印储存的命令档: Memory Script
{
set until scn1077491;
set newname for datafile1 to"C:\ORACLE\ORADATA\CLONE\SYSTEM01.DBF";
set newname for datafile2 to"C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF";
set newname for datafile3 to"C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF";
set newname for datafile4 to"C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF";
set newname for datafile5 to"C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF";
set newname for datafile6 to"C:\ORACLE\ORADATA\CLONE\INDX1.DBF";
set newname for datafile7 to"C:\ORACLE\ORADATA\CLONE\ODM01.DBF";
set newname for datafile8 to"C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF";
set newname for datafile9 to"C:\ORACLE\ORADATA\CLONE\USERS01.DBF";
set newname for datafile10 to"C:\ORACLE\ORADATA\CLONE\XDB01.DBF";
set newname for datafile11 to"C:\ORACLE\ORADATA\CLONE\MYTS01.DBF";
restore
check readonly
clone database
;
}
执行命令档: Memory Script
执行命令: SET until clause
执行命令: SET NEWNAME
执行命令: SET NEWNAME
执行命令: SET NEWNAME
执行命令: SET NEWNAME
执行命令: SET NEWNAME
执行命令: SET NEWNAME
执行命令: SET NEWNAME
执行命令: SET NEWNAME
执行命令: SET NEWNAME
执行命令: SET NEWNAME
执行命令: SET NEWNAME
开始 restore, 于 07-5月 -08
通道 d1: 启动数据文件备份集的还原
通道 d1: 正在设定要从备份集还原的数据文件
正在将资料文件 00001 还原为 C:\ORACLE\ORADATA\CLONE\SYSTEM01.DBF
正在将资料文件 00002 还原为 C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF
正在将资料文件 00003 还原为 C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF
正在将资料文件 00004 还原为 C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF
正在将资料文件 00005 还原为 C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF
正在将资料文件 00006 还原为 C:\ORACLE\ORADATA\CLONE\INDX1.DBF
正在将资料文件 00007 还原为 C:\ORACLE\ORADATA\CLONE\ODM01.DBF
正在将资料文件 00008 还原为 C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF
正在将资料文件 00009 还原为 C:\ORACLE\ORADATA\CLONE\USERS01.DBF
正在将资料文件 00010 还原为 C:\ORACLE\ORADATA\CLONE\XDB01.DBF
正在将资料文件 00011 还原为 C:\ORACLE\ORADATA\CLONE\MYTS01.DBF
通道 d1: 还原备份片 1
处理片=D:\ORACLEBAK\DBMYDB_10_1_653973100 标志=WHOLE_INC0 参数=NULL
通道 d1: 还原完成
完成 restore, 于 07-5月 -08
sql 叙述句: CREATE CONTROLFILE REUSE SET DATABASE "CLONE" RESETLOGS ARCHIVELOG
MAXLOGFILES 50
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 226
LOGFILE
GROUP1 ( 'C:\ORACLE\ORADATA\CLONE\REDO01.LOG' ) SIZE104857600REUSE,
GROUP2 ( 'C:\ORACLE\ORADATA\CLONE\REDO02.LOG' ) SIZE104857600REUSE,
GROUP3 ( 'C:\ORACLE\ORADATA\CLONE\REDO03.LOG' ) SIZE104857600REUSE
DATAFILE
'C:\ORACLE\ORADATA\CLONE\SYSTEM01.DBF'
CHARACTER SET AL32UTF8
打印储存的命令档: Memory Script
{
switch clone datafile all;
}
执行命令档: Memory Script
数据文件 2 已切换至数据文件复制本
输入数据文件复本 recid=1 戳记=654059846 文件名称=C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF
数据文件 3 已切换至数据文件复制本
输入数据文件复本 recid=2 戳记=654059846 文件名称=C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF
数据文件 4 已切换至数据文件复制本
输入数据文件复本 recid=3 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF
数据文件 5 已切换至数据文件复制本
输入数据文件复本 recid=4 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF
数据文件 6 已切换至数据文件复制本
输入数据文件复本 recid=5 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\INDX1.DBF
数据文件 7 已切换至数据文件复制本
输入数据文件复本 recid=6 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\ODM01.DBF
数据文件 8 已切换至数据文件复制本
输入数据文件复本 recid=7 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF
数据文件 9 已切换至数据文件复制本
输入数据文件复本 recid=8 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\USERS01.DBF
数据文件 10 已切换至数据文件复制本
输入数据文件复本 recid=9 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\XDB01.DBF
数据文件 11 已切换至数据文件复制本
输入数据文件复本 recid=10 戳记=654059847 文件名称=C:\ORACLE\ORADATA\CLONE\MYTS01.DBF
打印储存的命令档: Memory Script
{
set until scn1077491;
recover
clone database
delete archivelog
;
}
执行命令档: Memory Script
执行命令: SET until clause
开始 recover, 于 07-5月 -08
启动媒体恢复
通道 d1: 启动存盘日志还原到预设目的
通道 d1: 还原存盘日志
存盘日志系线=1 顺序=1
通道 d1: 还原存盘日志
存盘日志系线=1 顺序=2
通道 d1: 还原备份片 1
处理片=D:\ORACLEBAK\ARCHMYDB_11_1_654043289 标志=TAG20080506T224129 参数=NULL
通道 d1: 还原完成
存盘日志文件名称=C:\ORACLE\ORADATA\CLONE\ARCHIVE1_1.DBF 系线=1 顺序=1
通道 clone_default: 删除存盘日志
存盘日志文件名称=C:\ORACLE\ORADATA\CLONE\ARCHIVE1_1.DBF recid=2 戳记=654059855
存盘日志文件名称=C:\ORACLE\ORADATA\CLONE\ARCHIVE1_2.DBF 系线=1 顺序=2
通道 clone_default: 删除存盘日志
存盘日志文件名称=C:\ORACLE\ORADATA\CLONE\ARCHIVE1_2.DBF recid=1 戳记=654059854
媒体恢复完成
完成 recover, 于 07-5月 -08
打印储存的命令档: Memory Script
{
shutdown clone;
startup clone nomount ;
}
执行命令档: Memory Script
已卸下数据库
已关闭 Oracle 执行处理
联机至辅助数据库 (未启动)
已启动 Oracle 执行处理
系统整体区域总共是 122755896 个字节
Fixed Size 453432 个字节
Variable Size 96468992 个字节
Database Buffers 25165824 个字节
Redo Buffers 667648 个字节
sql 叙述句: CREATE CONTROLFILE REUSE SET DATABASE \CLONE\ RESETLOGS ARCHIVELOG
MAXLOGFILES 50
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 226
LOGFILE
GROUP1 ( 'C:\ORACLE\ORADATA\CLONE\REDO01.LOG' ) SIZE104857600REUSE,
GROUP2 ( 'C:\ORACLE\ORADATA\CLONE\REDO02.LOG' ) SIZE104857600REUSE,
GROUP3 ( 'C:\ORACLE\ORADATA\CLONE\REDO03.LOG' ) SIZE104857600REUSE
DATAFILE
'C:\ORACLE\ORADATA\CLONE\SYSTEM01.DBF'
CHARACTER SET AL32UTF8
打印储存的命令档: Memory Script
{
catalog clone datafilecopy"C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF";
catalog clone datafilecopy"C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF";
catalog clone datafilecopy"C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF";
catalog clone datafilecopy"C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF";
catalog clone datafilecopy"C:\ORACLE\ORADATA\CLONE\INDX1.DBF";
catalog clone datafilecopy"C:\ORACLE\ORADATA\CLONE\ODM01.DBF";
catalog clone datafilecopy"C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF";
catalog clone datafilecopy"C:\ORACLE\ORADATA\CLONE\USERS01.DBF";
catalog clone datafilecopy"C:\ORACLE\ORADATA\CLONE\XDB01.DBF";
catalog clone datafilecopy"C:\ORACLE\ORADATA\CLONE\MYTS01.DBF";
switch clone datafile all;
}
执行命令档: Memory Script
数据文件备份已加入目录
数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF recid=1 戳记=654059903
数据文件备份已加入目录
数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF recid=2 戳记=654059903
数据文件备份已加入目录
数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF recid=3 戳记=654059903
数据文件备份已加入目录
数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF recid=4 戳记=654059904
数据文件备份已加入目录
数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\INDX1.DBF recid=5 戳记=654059904
数据文件备份已加入目录
数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\ODM01.DBF recid=6 戳记=654059904
数据文件备份已加入目录
数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF recid=7 戳记=654059904
数据文件备份已加入目录
数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\USERS01.DBF recid=8 戳记=654059905
数据文件备份已加入目录
数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\XDB01.DBF recid=9 戳记=654059905
数据文件备份已加入目录
数据文件备份文件名称=C:\ORACLE\ORADATA\CLONE\MYTS01.DBF recid=10 戳记=654059905
数据文件 2 已切换至数据文件复制本
输入数据文件复本 recid=1 戳记=654059903 文件名称=C:\ORACLE\ORADATA\CLONE\UNDOTBS01.DBF
数据文件 3 已切换至数据文件复制本
输入数据文件复本 recid=2 戳记=654059903 文件名称=C:\ORACLE\ORADATA\CLONE\CWMLITE01.DBF
数据文件 4 已切换至数据文件复制本
输入数据文件复本 recid=3 戳记=654059903 文件名称=C:\ORACLE\ORADATA\CLONE\DRSYS01.DBF
数据文件 5 已切换至数据文件复制本
输入数据文件复本 recid=4 戳记=654059904 文件名称=C:\ORACLE\ORADATA\CLONE\EXAMPLE01.DBF
数据文件 6 已切换至数据文件复制本
输入数据文件复本 recid=5 戳记=654059904 文件名称=C:\ORACLE\ORADATA\CLONE\INDX1.DBF
数据文件 7 已切换至数据文件复制本
输入数据文件复本 recid=6 戳记=654059904 文件名称=C:\ORACLE\ORADATA\CLONE\ODM01.DBF
数据文件 8 已切换至数据文件复制本
输入数据文件复本 recid=7 戳记=654059904 文件名称=C:\ORACLE\ORADATA\CLONE\TOOLS01.DBF
数据文件 9 已切换至数据文件复制本
输入数据文件复本 recid=8 戳记=654059905 文件名称=C:\ORACLE\ORADATA\CLONE\USERS01.DBF
数据文件 10 已切换至数据文件复制本
输入数据文件复本 recid=9 戳记=654059905 文件名称=C:\ORACLE\ORADATA\CLONE\XDB01.DBF
数据文件 11 已切换至数据文件复制本
输入数据文件复本 recid=10 戳记=654059905 文件名称=C:\ORACLE\ORADATA\CLONE\MYTS01.DBF
打印储存的命令档: Memory Script
{
Alter clone database open resetlogs;
}
执行命令档: Memory Script
已开启数据库
完成 Duplicate Db, 于 07-5月 -08
RMAN>
使用RMAN的关键词和命令来控制数据文件和日志文件的名称和位置
可以如下控制数据文件的位置并设置新名称或设置辅助名称
SET auxname FOR DATAFILE 2 TO 'c:\oracle\oradata\clone\auxname02.dbf';
#为数据文件设置辅助名称,这个辅助名称将在RMAN会话之间存在,如果不希望以后的RMAN使用这个设置的名称,则必须将该名称设置为NULL。
SET auxname FOR DATAFILE 2 TO 'c:\oracle\oradata\clone\auxname02.dbf';
#为数据文件设置辅助名称,这个辅助名称将在RMAN会话之间存在,如果不希望以后的RMAN使用这个设置的名称,则必须将该名称设置为NULL。
SET auxname FOR DATAFILE 4 TO 'c:\oracle\oradata\clone\auxname03.dbf';
SET auxname FOR DATAFILE 6 TO 'c:\oracle\oradata\clone\auxname04.dbf';
run{
ALLOCATE auxiliary channel d1 TYPE DISK;
SET UNTIL logseq 3 THREAD 1;
SET newname FOR DATAFILE 1 TO 'c:\oracle\oradata\clone\newname01.dbf'; #在RMAN运行块内为数据文件设置新的名称,这个新名称的值只在运行块内有效
SET newname FOR DATAFILE 3 TO 'c:\oracle\oradata\clone\newname03.dbf';
SET newname FOR DATAFILE 5 TO 'c:\oracle\oradata\clone\newname05.dbf';
SET newname FOR DATAFILE 7 TO 'c:\oracle\oradata\clone\newname07.dbf';
duplicate target DATABASE TO \CLONE\ LOGFILE
GROUP 1 ('c:\oracle\oradata\clone\redo1_1.log',
'c:\oracle\oradata\clone\redo1_2.log') SIZE 10M REUSE,
GROUP 2 ('c:\oracle\oradata\clone\redo2_1.log',
'c:\oracle\oradata\clone\redo2_2.log') SIZE 10M REUSE,
GROUP 3 ('c:\oracle\oradata\clone\redo3_1.log',
'c:\oracle\oradata\clone\redo3_2.log') SIZE 10M REUSE;
}
SET auxname FOR DATAFILE 2 TO NULL;
SET auxname FOR DATAFILE 4 TO NULL;
SET auxname FOR DATAFILE 6 TO NULL;
在复制期间为clone数据库的每个数据文件指定一个新的文件名(或位置)。这样,当将目标数据库备份还原到复制数据库位置时,每个数据文件以被重新命名,日志文
件可以指定为附加到DUPLICATE TARGER DATABASE命令,在以上的示例中,每个数据文件都被重命名,并且日志文件也被重新定义大小、重命名和镜像,对单数的数据文
件重命名而对偶数的数据文件辅助命名。