RMAN高階應用之Duplicate複製資料庫(4)實戰

junsansi發表於2007-12-06

使用rman的duplicate命令複製資料庫系列,本系列可以視為一步一步學RMAN的姊妹篇~~~~

RMAN高階應用之Duplicate複製資料庫(1)概述

RMAN高階應用之Duplicate複製資料庫(2)輔助例項

RMAN高階應用之Duplicate複製資料庫(3)複製流程


  前面的準備工作,大展拳腳的時刻終於來臨了。在正在建立複製之前,我們先來描述一下需求,一個明確的、清晰的、可實現的需求更加有助於我們操作的實施,所以語言描述能力也是一項非常高超的技巧,下面大家看我舉例,一個清晰的需求描述:NOCATALOG模式本地完整複製目標庫JSSWEB到副本資料庫JSSDUP。

  看看,都學著點吧,什麼叫言簡意賅,言簡意賅就是NOCATALOG模式本地完整複製目標庫JSSWEB到副本資料庫JSSDUP。

  我們假設例項已建立(輔助例項的建立過程見第2章)。

1、連線並啟動目標資料庫(至少要啟動到mount狀態);

F:oracle>set oracle_sid=jssweb

F:oracle>sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 22 16:13:04 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

已連線到空閒例程。

SQL> startup

ORACLE 例程已經啟動。

Total System Global Area 113246208 bytes

Fixed Size 1247564 bytes

Variable Size 83887796 bytes

Database Buffers 20971520 bytes

Redo Buffers 7139328 bytes

資料庫裝載完畢。

資料庫已經開啟。

SQL>

2、連線並啟動輔助例項到nomount狀態;

F:oracle>set oracle_sid=jssdup

F:oracle>sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 22 16:11:28 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

已連線到空閒例程。

SQL> startup nomount

ORACLE 例程已經啟動。

Total System Global Area 285212672 bytes

Fixed Size 1248552 bytes

Variable Size 226493144 bytes

Database Buffers 50331648 bytes

Redo Buffers 7139328 bytes

SQL>

3、RMAN連線到目標資料庫和輔助例項。

F:oracle>set oracle_sid=jssweb

###目標資料庫使用作業系統認證,所以首先設定SID

F:oracle>rman target / auxiliary sys/verysafe:)@jssdup

恢復管理器: Release 10.2.0.1.0 - Production on 星期五 10月 19 15:03:10 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

連線到目標資料庫: JSSWEB (DBID=3402005373)

已連線到輔助資料庫: JSSDUP (未裝載)

RMAN>

4、首先確認目標庫存在可用備份。

RMAN> list backup;

使用目標資料庫控制檔案替代恢復目錄

備份集列表

===================

BS 關鍵字 型別 LV 大小 裝置型別 經過時間 完成時間

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

3 Full 443.16M DISK 00:00:51 19-10月-07

BP 關鍵字: 3 狀態: AVAILABLE 已壓縮: NO 標記: TAG20071022T161927

段名:D:BACKUP6IV54CF_1_1

備份集 3 中的資料檔案列表

檔案 LV 型別 Ckp SCN Ckp 時間 名稱

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

1 Full 1326175 19-10月-07 F:ORACLEORADATAJSSWEBSYSTEM01.DBF

2 Full 1326175 19-10月-07 F:ORACLEORADATAJSSWEBUNDOTBS01.DBF

3 Full 1326175 19-10月-07 F:ORACLEORADATAJSSWEBSYSAUX01.DBF

4 Full 1326175 19-10月-07 F:ORACLEORADATAJSSWEBJSSWEB.DBF

5 Full 1326175 19-10月-07 F:ORACLEORADATAJSSWEBUSERS01.DBF

BS 關鍵字 型別 LV 大小 裝置型別 經過時間 完成時間

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

4 Full 6.80M DISK 00:00:01 19-10月-07

BP 關鍵字: 4 狀態: AVAILABLE 已壓縮: NO 標記: TAG20071022T162023

段名:D:BACKUPC-3402005373-20071022-00

包括的控制檔案: Ckp SCN: 1326175 Ckp 時間: 19-10月-07

包含的 SPFILE: 修改時間: 24-9月 -07

RMAN>

5、萬事俱備,只欠Duplicate執行;

RMAN> duplicate target database to jssdup; ####只需要執行這一行

啟動 Duplicate Db 於 22-10月-07

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: sid=39 devtype=DISK

記憶體指令碼的內容:

{

set newname for datafile 1 to

"F:ORACLEORADATAJSSDUPSYSTEM01.DBF";

set newname for datafile 2 to

"F:ORACLEORADATAJSSDUPUNDOTBS01.DBF";

set newname for datafile 3 to

"F:ORACLEORADATAJSSDUPSYSAUX01.DBF";

set newname for datafile 4 to

"F:ORACLEORADATAJSSDUPJSSWEB.DBF";

set newname for datafile 5 to

"F:ORACLEORADATAJSSDUPUSERS01.DBF";

restore

check readonly

clone database

;

}

正在執行記憶體指令碼

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

啟動 restore 於 22-10月-07

使用通道 ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: 正在開始恢復資料檔案備份集

通道 ORA_AUX_DISK_1: 正在指定從備份集恢復的資料檔案

正將資料檔案00001恢復到F:ORACLEORADATAJSSDUPSYSTEM01.DBF

正將資料檔案00002恢復到F:ORACLEORADATAJSSDUPUNDOTBS01.DBF

正將資料檔案00003恢復到F:ORACLEORADATAJSSDUPSYSAUX01.DBF

正將資料檔案00004恢復到F:ORACLEORADATAJSSDUPJSSWEB.DBF

正將資料檔案00005恢復到F:ORACLEORADATAJSSDUPUSERS01.DBF

通道 ORA_AUX_DISK_1: 正在讀取備份段 D:BACKUP6IV54CF_1_1

通道 ORA_AUX_DISK_1: 已恢復備份段 1

段控制程式碼 = D:BACKUP6IV54CF_1_1 標記 = TAG20071022T161927

通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:01:06

完成 restore 於 22-10月-07

sql 語句: CREATE CONTROLFILE REUSE SET DATABASE "JSSDUP" RESETLOGS NOARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 ( 'F:ORACLEORADATAJSSDUPREDO01.LOG' ) SIZE 20 M REUSE,

GROUP 2 ( 'F:ORACLEORADATAJSSDUPREDO02.LOG' ) SIZE 20 M REUSE,

GROUP 3 ( 'F:ORACLEORADATAJSSDUPREDO03.LOG' ) SIZE 20 M REUSE

DATAFILE

'F:ORACLEORADATAJSSDUPSYSTEM01.DBF'

CHARACTER SET ZHS16GBK

記憶體指令碼的內容:

{

switch clone datafile all;

}

正在執行記憶體指令碼

釋放的通道: ORA_AUX_DISK_1

資料檔案 2 已轉換成資料檔案副本

輸入資料檔案副本 recid=1 stamp=636654235 檔名=F:ORACLEORADATAJSSDUPUNDOTBS01.DBF

資料檔案 3 已轉換成資料檔案副本

輸入資料檔案副本 recid=2 stamp=636654235 檔名=F:ORACLEORADATAJSSDUPSYSAUX01.DBF

資料檔案 4 已轉換成資料檔案副本

輸入資料檔案副本 recid=3 stamp=636654235 檔名=F:ORACLEORADATAJSSDUPJSSWEB.DBF

資料檔案 5 已轉換成資料檔案副本

輸入資料檔案副本 recid=4 stamp=636654235 檔名=F:ORACLEORADATAJSSDUPUSERS01.DBF

記憶體指令碼的內容:

{

recover

clone database

noredo

,

delete archivelog

;

}

正在執行記憶體指令碼

啟動 recover 於 22-10月-07

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: sid=39 devtype=DISK

完成 recover 於 22-10月-07

記憶體指令碼的內容:

{

shutdown clone;

startup clone nomount ;

}

正在執行記憶體指令碼

資料庫已解除安裝

Oracle 例項已關閉

已連線到輔助資料庫 (未啟動)

Oracle 例項已啟動

系統全域性區域總計 285212672 位元組

Fixed Size 1248552 位元組

Variable Size 226493144 位元組

Database Buffers 50331648 位元組

Redo Buffers 7139328 位元組

sql 語句: CREATE CONTROLFILE REUSE SET DATABASE "JSSDUP" RESETLOGS NOARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 ( 'F:ORACLEORADATAJSSDUPREDO01.LOG' ) SIZE 20 M REUSE,

GROUP 2 ( 'F:ORACLEORADATAJSSDUPREDO02.LOG' ) SIZE 20 M REUSE,

GROUP 3 ( 'F:ORACLEORADATAJSSDUPREDO03.LOG' ) SIZE 20 M REUSE

DATAFILE

'F:ORACLEORADATAJSSDUPSYSTEM01.DBF'

CHARACTER SET ZHS16GBK

記憶體指令碼的內容:

{

set newname for tempfile 1 to

"F:ORACLEORADATAJSSDUPTEMP01.DBF";

switch clone tempfile all;

catalog clone datafilecopy "F:ORACLEORADATAJSSDUPUNDOTBS01.DBF";

catalog clone datafilecopy "F:ORACLEORADATAJSSDUPSYSAUX01.DBF";

catalog clone datafilecopy "F:ORACLEORADATAJSSDUPJSSWEB.DBF";

catalog clone datafilecopy "F:ORACLEORADATAJSSDUPUSERS01.DBF";

switch clone datafile all;

}

正在執行記憶體指令碼

正在執行命令: SET NEWNAME

臨時檔案 1 在控制檔案中已重新命名為 F:ORACLEORADATAJSSDUPTEMP01.DBF

已將資料檔案副本列入目錄

資料檔案副本 filename=F:ORACLEORADATAJSSDUPUNDOTBS01.DBF recid=1 stamp=636654246

已將資料檔案副本列入目錄

資料檔案副本 filename=F:ORACLEORADATAJSSDUPSYSAUX01.DBF recid=2 stamp=636654246

已將資料檔案副本列入目錄

資料檔案副本 filename=F:ORACLEORADATAJSSDUPJSSWEB.DBF recid=3 stamp=636654246

已將資料檔案副本列入目錄

資料檔案副本 filename=F:ORACLEORADATAJSSDUPUSERS01.DBF recid=4 stamp=636654247

資料檔案 2 已轉換成資料檔案副本

輸入資料檔案副本 recid=1 stamp=636654246 檔名=F:ORACLEORADATAJSSDUPUNDOTBS01.DBF

資料檔案 3 已轉換成資料檔案副本

輸入資料檔案副本 recid=2 stamp=636654246 檔名=F:ORACLEORADATAJSSDUPSYSAUX01.DBF

資料檔案 4 已轉換成資料檔案副本

輸入資料檔案副本 recid=3 stamp=636654246 檔名=F:ORACLEORADATAJSSDUPJSSWEB.DBF

資料檔案 5 已轉換成資料檔案副本

輸入資料檔案副本 recid=4 stamp=636654247 檔名=F:ORACLEORADATAJSSDUPUSERS01.DBF

記憶體指令碼的內容:

{

Alter clone database open resetlogs;

}

正在執行記憶體指令碼

資料庫已開啟

完成 Duplicate Db 於 22-10月-07

RMAN>

6、連線副本資料庫看看

RMAN> host;

Microsoft Windows [版本 5.2.3790]

(C) 版權所有 1985-2003 Microsoft Corp.

F:oracle>sqlplus jss/jss

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 22 16:35:07 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

連線到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL> select *from tab where tname like 'JSS%' and rownum<9;

TNAME TABTYPE CLUSTERID

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

JSSTMP_HC_ORC_BJ TABLE

JSSTMP_HC_ORD_PRODUCT_PACKAGE TABLE

JSSTMP_HC_ORD_PROD_PACK_ITEM TABLE

JSSTMP_HC_PRODUCT_BJ TABLE

JSSTMP_HC_PROJ_PROD_CLASS_BJ TABLE

SQL>

OK,資料都在。建立成功:)

整體來看,這是個非常簡單的示例,簡單是簡單在我們操作的步驟上,事實上duplicate就是一個具有強大功能的簡單命令,就像是一堆積木,通過各種各樣的靈活組合來實現各種各樣的需求,比如你可以在執行duplicate命令時通過指定UNTIL TIME 來限定恢復資料所在時間。又比如你可以通過指定PFILE引數從客戶端初始化引數檔案啟動輔助例項,取代在建立輔助例項裡建立spfile的操作。又或者通過Set Newname指定某個資料檔案的儲存位置等等。其它諸如異地恢復啦,複製到asm啦之類都是以duplicate命令和輔助例項為主,幾個相關命令和子句為輔的綜合應用,複製就是這麼簡單。

另外此章節中重點看看第5步,雖然我們只執行了duplicate一條命令,但你如果細細分析其執行日誌的話能夠得到的決不僅僅只是這些。比如執行日誌第3行就看出是自動分配的通道,日誌第5行開始則是將db_file_name_convert等引數轉換為SET NEWNAME 命令,再接著往下看,發現有restore、clone database之類命令,看過“一步一步學RMAN”的朋友肯定還記的在該系列最後二章節中我們曾經實踐過RMAN恢復備份到異機的操作。與本例對比的話操作方式有不少雷同,你完全可以把duplicate也看成是恢復操作,當然二者操作也有差異,比如duplicate命令更加簡單,而且duplicate建立的副本資料庫擁有獨立的DBID,而RMAN手工恢復到異機建立的是與源庫相同的DBID(當然duplicate也可以建立DBID與源庫相同,比如standby資料庫,這部分內容也許會出現在下下下下個系列中進行演示)。

命令執行完不代表操作就完了,多看看執行日誌,分析分析執行原理,綜合融會才能夠讓你的認識有更高提升。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-22302/,如需轉載,請註明出處,否則將追究法律責任。

相關文章