天天看點

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 ,如需轉載請自行聯系原作者