天天看点

Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库

在Oracle10g下,我们可以使用RMANduplicate命令创建一个具有不同DBID的复制库。到了Oracle11gR2,RMAN的duplicate有2种方法实现:

1.Activedatabaseduplication

2.Backup-basedduplication

Activedatabaseduplication通过网络,直接copytarget库到auxiliary库,然后创建复制库。这种方法就不需要先用RMAN备份数据库,然后将备份文件发送到auxiliary端。

这个功能的作用是非常大的。尤其是对T级别的库。因为对这样的库进行备份,然后将备份集发送到备库,在进行duplicate的代价是非常大的。一备份要占用时间,二要占用备份空间,三在网络传送的时候,还需要占用带宽和时间。所以Activedatabaseduplicate很好的解决了以上的问题。它对大库的迁移非常有用。

如果是从RACduplicate到单实例,操作是一样的。如果是从单实例duplicate到RAC。那么先duplicate到单实例。然后将单实例转换成RAC。

<a href="http://blog.csdn.net/tianlesoftware/archive/2010/07/20/5749932.aspx" target="_blank"></a>

下面我们看一下11gR2下,ActiveDatabaseDuplicate的步骤如下:

1.创建Auxiliary库的InitializationParameter:

如果使用spfile,那么在pfile文件里只需要设置一个DB_NAME参数,其他参数会在duplicate命令中自己设置。

如果使用pfile,那么需要设置如下参数:

DB_NAME

CONTROL_FILES

DB_BLOCK_SIZE

DB_FILE_NAME_CONVERT

LOG_FILE_NAME_CONVERT

DB_RECOVERY_FILE_DEST

2.在Auxiliary库创建PasswordFile文件

对于Backup-basedduplication,PasswordFile不是必须的,但是对于ActiveDatabaseDuplication,PasswordFile是必须的。因为ActiveDatabaseDuplication使用相同的SYSDBA密码直接连接到auxiliary库。所以,确保target和Auxiliary库的SYSDBA密码一样很重要。

当然,我们也可以在duplicate命令中加上PASSWORDFILE选项(也是默认值),这样RMAN在copy的时候也会从target库把密码文件copy过来,如果auxiliary库上已经存在了Passwordfile,那么该操作会重写那个文件。

如:

RMAN&gt;DUPLICATETARGETDATABASETODave

2&gt;FROMACTIVEDATABASE

3&gt;NOFILENAMECHECK

4&gt;PASSWORDFILE

5&gt;SPFILE;

3.如果是windows平台,还需要创建Databaseservice:

%setORACLE_SID=DAVE

%setORACLE_HOME=E:/oracle/product/11.1.0/db_1

%oradim-NEW-SIDDAVE

4.配置oraclenet,修改listener.ora和thetnsnames.ora文件:

在Target库和Auxiliary都要修改。这个也可以使用netca和netmgr命令配置。

Listener.ora

[oracle@qs-dmm-rh1admin]$catlistener.ora

LISTENER=

(DESCRIPTION_LIST=

(DESCRIPTION=

(ADDRESS=(PROTOCOL=TCP)(HOST=localhost6.localdomain6)(PORT=1521))

)

ADR_BASE_LISTENER=/u01/app/oracle

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(GLOBAL_DBNAME=orcl)

(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

(SID_NAME=orcl)

tnsname.ora

[oracle@qs-dmm-rh1admin]$cattnsnames.ora

ORCL_ST=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.43)(PORT=1521))

(CONNECT_DATA=

(SERVICE_NAME=orcl)

ORCL_PD=

(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.42)(PORT=1521))

5.用第一步创建的pfile文件,将Auxiliary启动到nomout状态。然后进行ActiveDatabaseduplicate。

我们看一个完整的复制示例:

TargetDB:

IP:192.168.2.42

SID:orcl

Auxiliary:

IP:192.168.2.43

SID:orcl

我这里复制的目录相同。如果不同的话需要在pfile里面加入db_file_name_convert和log_file_name_convert.

1.在Auxiliary创建pfile参数文件:

[oracle@qs-dmm-rh2dbs]$pwd

/u01/app/oracle/product/11.2.0/dbhome_1/dbs

[oracle@qs-dmm-rh2dbs]$catinitorcl.ora

DB_NAME=orcl

只有一个参数:DB_NAME

2.在Auxiliary库上创建口令文件

[oracle@qs-dmm-rh2admin]$orapwdfile=?/dbs/orapworclpassword=oracle

3.在Auxiliary库创建相关的目录结构:

[oracle@qs-dmm-rh2trace]$mkdir-p/u01/app/oracle/oradata/orcl

不然在duplicate时会报如下错误:

ORA-19505:failedtoidentifyfile"/u01/app/oracle/oradata/orcl/users01.dbf"

ORA-27040:filecreateerror,unabletocreatefile

4.启动Auxiliary到nomout状态:

[oracle@qs-dmm-rh2admin]$sqlplus/nolog

SQL*Plus:Release11.2.0.1.0ProductiononTueMar800:28:482011

Copyright(c)1982,2009,Oracle.Allrightsreserved.

SQL&gt;conn/assysdba;

Connectedtoanidleinstance.

SQL&gt;startupnomountpfile=?/dbs/initorcl.ora

ORACLEinstancestarted.

TotalSystemGlobalArea146472960bytes

FixedSize1335080bytes

VariableSize92274904bytes

DatabaseBuffers50331648bytes

RedoBuffers2531328bytes

SQL&gt;

5.在Target和Auxiliary都配置OracleNet(Listener.oraandtnsnames.ora):

6.开始RMANduplicatefromactivedatabase:

注意:如果target和Auxiliary库的目录结构相同,记得加上nofilenamecheck参数,不然会报如下错误:

RMAN-05001:auxiliaryfilename/u01/app/oracle/oradata/orcl/users01.dbfconflictswithafileusedbythetargetdatabase

如果目录不同,在pfile里加如下2个参数进行转换:

db_file_name_convert

log_file_name_convert.

[oracle@qs-dmm-rh2dbs]$rmantargetsys/oracle@orcl_pdauxiliarysys/oracle@orcl_st

RecoveryManager:Release11.2.0.1.0-ProductiononTueMar801:01:422011

Copyright(c)1982,2009,Oracleand/oritsaffiliates.Allrightsreserved.

connectedtotargetdatabase:ORCL(DBID=1272955137)

connectedtoauxiliarydatabase:ORCL(notmounted)

RMAN&gt;duplicatetargetdatabasetoorclfromactivedatabasenofilenamecheck;

StartingDuplicateDbat08-MAR-11

usingtargetdatabasecontrolfileinsteadofrecoverycatalog

allocatedchannel:ORA_AUX_DISK_1

channelORA_AUX_DISK_1:SID=20devicetype=DISK

contentsofMemoryScript:

{

sqlclone"createspfilefrommemory";

}

executingMemoryScript

sqlstatement:createspfilefrommemory

shutdowncloneimmediate;

startupclonenomount;

Oracleinstanceshutdown

connectedtoauxiliarydatabase(notstarted)

Oracleinstancestarted

sqlclone"altersystemsetdb_name=

''ORCL''comment=

''ModifiedbyRMANduplicate''scope=spfile";

sqlclone"altersystemsetdb_unique_name=

startupcloneforcenomount

backupascopycurrentcontrolfileauxiliaryformat'/u01/app/oracle/product/11.2.0/dbhome_1/dbs/cntrlorcl.dbf';

alterclonedatabasemount;

sqlstatement:altersystemsetdb_name=''ORCL''comment=''ModifiedbyRMANduplicate''scope=spfile

sqlstatement:altersystemsetdb_unique_name=''ORCL''comment=''ModifiedbyRMANduplicate''scope=spfile

Startingbackupat08-MAR-11

allocatedchannel:ORA_DISK_1

channelORA_DISK_1:SID=43devicetype=DISK

channelORA_DISK_1:startingdatafilecopy

copyingcurrentcontrolfile

outputfilename=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_orcl.ftag=TAG20110308T010214RECID=3STAMP=745203735

channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:01

Finishedbackupat08-MAR-11

databasemounted

setnewnamefordatafile1to

"/u01/app/oracle/oradata/orcl/system01.dbf";

setnewnamefordatafile2to

"/u01/app/oracle/oradata/orcl/sysaux01.dbf";

setnewnamefordatafile3to

"/u01/app/oracle/oradata/orcl/undotbs01.dbf";

setnewnamefordatafile4to

"/u01/app/oracle/oradata/orcl/users01.dbf";

backupascopyreuse

datafile1auxiliaryformat

"/u01/app/oracle/oradata/orcl/system01.dbf"datafile

2auxiliaryformat

"/u01/app/oracle/oradata/orcl/sysaux01.dbf"datafile

3auxiliaryformat

"/u01/app/oracle/oradata/orcl/undotbs01.dbf"datafile

4auxiliaryformat

sql'altersystemarchivelogcurrent';

executingcommand:SETNEWNAME

usingchannelORA_DISK_1

--在这里开始copy数据文件,比较慢。

inputdatafilefilenumber=00001name=/u01/app/oracle/oradata/orcl/system01.dbf

outputfilename=/u01/app/oracle/oradata/orcl/system01.dbftag=TAG20110308T010221

channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:45

inputdatafilefilenumber=00002name=/u01/app/oracle/oradata/orcl/sysaux01.dbf

outputfilename=/u01/app/oracle/oradata/orcl/sysaux01.dbftag=TAG20110308T010221

channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:35

inputdatafilefilenumber=00003name=/u01/app/oracle/oradata/orcl/undotbs01.dbf

outputfilename=/u01/app/oracle/oradata/orcl/undotbs01.dbftag=TAG20110308T010221

channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:15

inputdatafilefilenumber=00004name=/u01/app/oracle/oradata/orcl/users01.dbf

outputfilename=/u01/app/oracle/oradata/orcl/users01.dbftag=TAG20110308T010221

sqlstatement:altersystemarchivelogcurrent

archiveloglike"/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_03_08/o1_mf_1_7_6qb3zyoo_.arc"auxiliaryformat

"/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_7_745174404.dbf";

catalogclonearchivelog"/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_7_745174404.dbf";

switchclonedatafileall;

channelORA_DISK_1:startingarchivedlogcopy

inputarchivedlogthread=1sequence=7RECID=3STAMP=745203841

outputfilename=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_7_745174404.dbfRECID=0STAMP=0

channelORA_DISK_1:archivedlogcopycomplete,elapsedtime:00:00:07

catalogedarchivedlog

archivedlogfilename=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_7_745174404.dbfRECID=3STAMP=745203848

datafile1switchedtodatafilecopy

inputdatafilecopyRECID=3STAMP=745203849filename=/u01/app/oracle/oradata/orcl/system01.dbf

datafile2switchedtodatafilecopy

inputdatafilecopyRECID=4STAMP=745203849filename=/u01/app/oracle/oradata/orcl/sysaux01.dbf

datafile3switchedtodatafilecopy

inputdatafilecopyRECID=5STAMP=745203849filename=/u01/app/oracle/oradata/orcl/undotbs01.dbf

datafile4switchedtodatafilecopy

inputdatafilecopyRECID=6STAMP=745203849filename=/u01/app/oracle/oradata/orcl/users01.dbf

setuntilscn844147;

recover

clonedatabase

deletearchivelog

;

executingcommand:SETuntilclause

Startingrecoverat08-MAR-11

channelORA_AUX_DISK_1:SID=18devicetype=DISK

startingmediarecovery

archivedlogforthread1withsequence7isalreadyondiskasfile/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_7_745174404.dbf

archivedlogfilename=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_7_745174404.dbfthread=1sequence=7

mediarecoverycomplete,elapsedtime:00:00:01

Finishedrecoverat08-MAR-11

''ResettooriginalvaluebyRMAN''scope=spfile";

sqlclone"altersystemresetdb_unique_namescope=spfile";

databasedismounted

sqlstatement:altersystemsetdb_name=''ORCL''comment=''ResettooriginalvaluebyRMAN''scope=spfile

sqlstatement:altersystemresetdb_unique_namescope=spfile

sqlstatement:CREATECONTROLFILEREUSESETDATABASE"ORCL"RESETLOGSARCHIVELOG

MAXLOGFILES16

MAXLOGMEMBERS3

MAXDATAFILES100

MAXINSTANCES8

MAXLOGHISTORY292

LOGFILE

GROUP1('/u01/app/oracle/oradata/orcl/redo01.log')SIZE50MREUSE,

GROUP2('/u01/app/oracle/oradata/orcl/redo02.log')SIZE50MREUSE,

GROUP3('/u01/app/oracle/oradata/orcl/redo03.log')SIZE50MREUSE

DATAFILE

'/u01/app/oracle/oradata/orcl/system01.dbf'

CHARACTERSETZHS16GBK

setnewnamefortempfile1to

"/u01/app/oracle/oradata/orcl/temp01.dbf";

switchclonetempfileall;

catalogclonedatafilecopy"/u01/app/oracle/oradata/orcl/sysaux01.dbf",

"/u01/app/oracle/oradata/orcl/undotbs01.dbf",

renamedtempfile1to/u01/app/oracle/oradata/orcl/temp01.dbfincontrolfile

catalogeddatafilecopy

datafilecopyfilename=/u01/app/oracle/oradata/orcl/sysaux01.dbfRECID=1STAMP=745203867

datafilecopyfilename=/u01/app/oracle/oradata/orcl/undotbs01.dbfRECID=2STAMP=745203867

datafilecopyfilename=/u01/app/oracle/oradata/orcl/users01.dbfRECID=3STAMP=745203867

inputdatafilecopyRECID=1STAMP=745203867filename=/u01/app/oracle/oradata/orcl/sysaux01.dbf

inputdatafilecopyRECID=2STAMP=745203867filename=/u01/app/oracle/oradata/orcl/undotbs01.dbf

inputdatafilecopyRECID=3STAMP=745203867filename=/u01/app/oracle/oradata/orcl/users01.dbf

Alterclonedatabaseopenresetlogs;

databaseopened

FinishedDuplicateDbat08-MAR-11

RMAN&gt;

复制结束。查询:

Target库:

SQL&gt;selectname,dbidfromv$database;

NAMEDBID

-------------------

ORCL1272955137

Auxiliary库:

ORCL1272984602

本文转自东方之子736651CTO博客,原文链接:http://blog.51cto.com/ecloud/1323025 ,如需转载请自行联系原作者