在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>DUPLICATETARGETDATABASETODave
2>FROMACTIVEDATABASE
3>NOFILENAMECHECK
4>PASSWORDFILE
5>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>conn/assysdba;
Connectedtoanidleinstance.
SQL>startupnomountpfile=?/dbs/initorcl.ora
ORACLEinstancestarted.
TotalSystemGlobalArea146472960bytes
FixedSize1335080bytes
VariableSize92274904bytes
DatabaseBuffers50331648bytes
RedoBuffers2531328bytes
SQL>
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>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>
複制結束。查詢:
Target庫:
SQL>selectname,dbidfromv$database;
NAMEDBID
-------------------
ORCL1272955137
Auxiliary庫:
ORCL1272984602
本文轉自東方之子736651CTO部落格,原文連結:http://blog.51cto.com/ecloud/1323025 ,如需轉載請自行聯系原作者