4. 使用RMAN DUPLICATE复制数据库
在Target Database上登录RMAN并连接Auxiliary Database:
[oracle@rhel ~]$ rman target / auxiliary sys/orcl@duptest
Recovery Manager: Release 10.2.0.1.0 - Production on Tue Dec 30 05:56:05 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: OLDYANG (DBID=1658465560)
connected to auxiliary database: DUPTEST (not mounted)
此时Auxiliary Database尚未建立,所以DBID为空。接下来就可以使用DUPLICATE命令进行复制了,由于模拟环境是远程主机+不同文件路径,在这边我们使用了db_file_name_convert和logfile两个选项(关于其它的路径转换方法,请参考Oracle说明文档):
RMAN> run{
2> allocate auxiliary channel aux1 device type disk;
3> duplicate target database to duptest
4> db_file_name_convert=('/opt/ora10g/oradata/oldyang','/opt/ora10g/oradata/duptest')
5> logfile
6> '/opt/ora10g/oradata/duptest/redo01.log' size 50m,
7> '/opt/ora10g/oradata/duptest/redo02.log' size 50m,
8> '/opt/ora10g/oradata/duptest/redo03.log' size 50m;
9> }using target database control file instead of recovery catalog
allocated channel: aux1
channel aux1: sid=36 devtype=DISKStarting Duplicate Db at 30-DEC-08
contents of Memory Script:
{
set until scn 918362;
set newname for datafile 1 to
"/opt/ora10g/oradata/duptest/system01.dbf";
set newname for datafile 2 to
"/opt/ora10g/oradata/duptest/undotbs01.dbf";
set newname for datafile 3 to
"/opt/ora10g/oradata/duptest/sysaux01.dbf";
set newname for datafile 4 to
"/opt/ora10g/oradata/duptest/users01.dbf";
set newname for datafile 5 to
"/opt/ora10g/oradata/duptest/oldyang.dbf";
restore
check readonly
clone database
;
}
executing Memory Scriptexecuting command: SET until clause
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 30-DEC-08
channel aux1: starting datafile backupset restore
channel aux1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /opt/ora10g/oradata/duptest/system01.dbf
restoring datafile 00002 to /opt/ora10g/oradata/duptest/undotbs01.dbf
restoring datafile 00003 to /opt/ora10g/oradata/duptest/sysaux01.dbf
restoring datafile 00004 to /opt/ora10g/oradata/duptest/users01.dbf
restoring datafile 00005 to /opt/ora10g/oradata/duptest/oldyang.dbf
channel aux1: reading from backup piece
/opt/ora10g/flash_recovery_area/OLDYANG/backupset/2008_12_30/o1_mf_nnndf_TAG20081230T04212
8_4oldb94g_.bkp
channel aux1: restored backup piece 1
piece
handle=/opt/ora10g/flash_recovery_area/OLDYANG/backupset/2008_12_30/o1_mf_nnndf_TAG2008123
0T042128_4oldb94g_.bkp tag=TAG20081230T042128
channel aux1: restore complete, elapsed time: 00:00:59
Finished restore at 30-DEC-08
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "DUPTEST" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/opt/ora10g/oradata/duptest/redo01.log' SIZE 50 M ,
GROUP 2 '/opt/ora10g/oradata/duptest/redo02.log' SIZE 50 M ,
GROUP 3 '/opt/ora10g/oradata/duptest/redo03.log' SIZE 50 M
DATAFILE
'/opt/ora10g/oradata/duptest/system01.dbf'
CHARACTER SET AL32UTF8contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Scriptdatafile 2 switched to datafile copy
input datafile copy recid=1 stamp=674797938
filename=/opt/ora10g/oradata/duptest/undotbs01.dbf
datafile 3 switched to datafile copy
input datafile copy recid=2 stamp=674797938
filename=/opt/ora10g/oradata/duptest/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy recid=3 stamp=674797938 filename=/opt/ora10g/oradata/duptest/users01.dbf
datafile 5 switched to datafile copy
input datafile copy recid=4 stamp=674797938 filename=/opt/ora10g/oradata/duptest/oldyang.dbfcontents of Memory Script:
{
set until scn 918362;
recover
clone database
delete archivelog
;
}
executing Memory Scriptexecuting command: SET until clause
Starting recover at 30-DEC-08
starting media recovery
channel aux1: starting archive log restore to default destination
channel aux1: restoring archive log
archive log thread=1 sequence=28
channel aux1: reading from backup piece
/opt/ora10g/flash_recovery_area/OLDYANG/backupset/2008_12_30/o1_mf_annnn_TAG20081230T04234
8_4oldgoqn_.bkp
channel aux1: restored backup piece 1
piece
handle=/opt/ora10g/flash_recovery_area/OLDYANG/backupset/2008_12_30/o1_mf_annnn_TAG2008123
0T042348_4oldgoqn_.bkp tag=TAG20081230T042348
channel aux1: restore complete, elapsed time: 00:00:02
archive log filename=/opt/ora10g/logarchive/duptest/ARC0000000028_0671032283.0001 thread=1
sequence=28
channel clone_default: deleting archive log(s)
archive log filename=/opt/ora10g/logarchive/duptest/ARC0000000028_0671032283.0001 recid=1
stamp=674797940
media recovery complete, elapsed time: 00:00:01
Finished recover at 30-DEC-08contents of Memory Script:
{
shutdown clone;
startup clone nomount ;
}
executing Memory Scriptdatabase dismounted
Oracle instance shut downconnected to auxiliary database (not started)
Oracle instance startedTotal System Global Area 205520896 bytes
Fixed Size 1218532 bytes
Variable Size 71305244 bytes
Database Buffers 130023424 bytes
Redo Buffers 2973696 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "DUPTEST" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/opt/ora10g/oradata/duptest/redo01.log' SIZE 50 M ,
GROUP 2 '/opt/ora10g/oradata/duptest/redo02.log' SIZE 50 M ,
GROUP 3 '/opt/ora10g/oradata/duptest/redo03.log' SIZE 50 M
DATAFILE
'/opt/ora10g/oradata/duptest/system01.dbf'
CHARACTER SET AL32UTF8contents of Memory Script:
{
set newname for tempfile 1 to
"/opt/ora10g/oradata/duptest/temp01.dbf";
switch clone tempfile all;
catalog clone datafilecopy "/opt/ora10g/oradata/duptest/undotbs01.dbf";
catalog clone datafilecopy "/opt/ora10g/oradata/duptest/sysaux01.dbf";
catalog clone datafilecopy "/opt/ora10g/oradata/duptest/users01.dbf";
catalog clone datafilecopy "/opt/ora10g/oradata/duptest/oldyang.dbf";
switch clone datafile all;
}
executing Memory Scriptexecuting command: SET NEWNAME
renamed temporary file 1 to /opt/ora10g/oradata/duptest/temp01.dbf in control file
cataloged datafile copy
datafile copy filename=/opt/ora10g/oradata/duptest/undotbs01.dbf recid=1 stamp=674797950cataloged datafile copy
datafile copy filename=/opt/ora10g/oradata/duptest/sysaux01.dbf recid=2 stamp=674797950cataloged datafile copy
datafile copy filename=/opt/ora10g/oradata/duptest/users01.dbf recid=3 stamp=674797950cataloged datafile copy
datafile copy filename=/opt/ora10g/oradata/duptest/oldyang.dbf recid=4 stamp=674797950datafile 2 switched to datafile copy
input datafile copy recid=1 stamp=674797950
filename=/opt/ora10g/oradata/duptest/undotbs01.dbf
datafile 3 switched to datafile copy
input datafile copy recid=2 stamp=674797950
filename=/opt/ora10g/oradata/duptest/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy recid=3 stamp=674797950 filename=/opt/ora10g/oradata/duptest/users01.dbf
datafile 5 switched to datafile copy
input datafile copy recid=4 stamp=674797950 filename=/opt/ora10g/oradata/duptest/oldyang.dbfcontents of Memory Script:
{
Alter clone database open resetlogs;
}
executing Memory Scriptdatabase opened
Finished Duplicate Db at 30-DEC-08
复制完成,登录Auxiliary Database并核对数据:
[oracle@rhel ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Dec 30 03:54:13 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining optionsSQL> select instance_name, status from v$instance;
INSTANCE_NAME STATUS
-------------- -------
duptest OPENSQL> select dbid from v$database;
DBID
----------
608220667SQL> select count(*) from oldyang.eempb;
COUNT(*)
--------
71
可以看到,Auxiliary Database生成了新的DBID,对eempb表的查询结果与之前的Target Database保持一致。
经此前一战,臣闻:一鼓作气,一而再,再而三,趁着神智尚清,精神恍惚之际,赶紧留下遗言:陛下此文堪称:杨家之绝唱,无韵之离骚,可谓:究天人之际,通古今之变,成一家之言。话毕:只见微臣,嘴唇发干,手心出汗,大腿发嘛,竟用去五成功力,明显体力不支,微臣告退。。。
人间美丽 —— 2008年12月30日@20:32
。。。。。。
老杨 —— 2008年12月30日@21:05
测试插件
老杨 —— 2009年01月07日@13:37
很久没来进谏了
rain —— 2009年01月24日@15:21
来拜年啦,
祝靓仔牛年牛运亨通,牛气十足!
Aaron —— 2009年01月25日@11:59
happy牛year,留个MARK,祝老杨年后子弹不在卡镗用力往前射!
洲际弹道导弹 —— 2009年01月25日@19:11
我直接昏迷。。。来不及YD。。。
老杨 —— 2009年01月26日@01:58
找不到地方留言,就这啦~· 高声清唱一句“我恭喜发财,恭喜你精彩,不好的请走开……”
small5 —— 2009年01月26日@11:01
哈哈,新年快乐。。。
我永远看不懂你在写些虾米东西
蓝酶郡少年 —— 2009年01月31日@11:31
诸位爱卿新年快乐!看到大家都在为了社稷殚精竭虑。。。鄙人灰常滴感动。。。
老杨 —— 2009年01月31日@16:51