通過使用Database Backup,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資料庫的每個資料檔案指定一個新的檔案名稱(或位置)。這樣,當將目標Database Backup還原到複製資料庫位置時,每個資料檔案以被重新命名,日誌文
件可以指定為附加到DUPLICATE TARGER DATABASE命令,在以上的樣本中,每個資料檔案都被重新命名,並且記錄檔也被重新定義大小、重新命名和鏡像,對單數的資料文
件重新命名而對偶數的資料檔案輔助命名。