RMAN高階應用之Duplicate複製資料庫(5)補充

junsansi發表於2007-12-07

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

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

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

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

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


一、跳過表空間(Skipping Tablespaces in RMAN DUPLICATE DATABASE)

有時候,並非資料庫的所有表空間都需要備份,比如你在建立副本資料庫時,想跳過那些read-only或OFFLINE的表空間,這個簡單,來來來,跟我一起做,左三圈右三圈脖子扭扭屁股扭扭,不是跳舞,是放鬆放鬆,你已經連續盯著螢幕這麼久,而且都是看些蝌蚪兒字,要注意保護眼睛啊,黑黑~~~~

要跳過只讀表空間,在執行duplicate命令時指定SKIP READONLY子句即可。而對於離線表空間,在執行duplicate命令之前將其置為OFFLINE NORMAL狀態即可,RMAN複製時會跳過只讀或離線表空間的資料檔案。如果某個表空間即不是readonly也並非offline,但你就是不想複製,表急,duplicate還有殺手鐗。在執行duplicate命令時通過SKIP TABLESPACE XXX子句指定你要跳過的表空間,想跳多少就跳多少,多個表空間的話,中間以,(逗號)分隔即是。

當複製完成之後,通過查詢副本資料庫的v$datafile或DBA_DATA_FILES、DBA_TABLESPACES可以獲取表空間以及資料檔案的狀態。

例如:

SQL> select status,enabled,name from v$datafile;

STATUS ENABLED NAME

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

SYSTEM READ WRITE F:ORACLEORADATAJSSDUPSYSTEM01.DBF

ONLINE READ WRITE F:ORACLEORADATAJSSDUPUNDOTBS01.DBF

ONLINE READ WRITE F:ORACLEORADATAJSSDUPSYSAUX01.DBF

ONLINE READ WRITE F:ORACLEORADATAJSSDUPJSSWEB.DBF

ONLINE READ WRITE F:ORACLEORADATAJSSDUPUSERS01.DBF

對於readonly表空間,v$datafile中STATUS列會顯示為OFFLINE,ENABLE列會顯示為READ ONLY Name列會顯示為MISSING xxx。

對於offline表空間,v$datafile中STATUS列會顯示為OFFLINE,ENABLE列會顯示為DISABLED Name列會顯示為MISSING xxx。

二、重新命名副本資料庫檔案(Renaming Database Files in RMAN Duplicate Database)

1、建立過程中重新命名控制檔案

建立控制檔案的語法與sql語句中的建立方法一致。如果手工選擇控制檔名稱的話,務必確認輔助例項的初始化引數中引數設定正確。

2、建立過程中重新命名線上日誌檔案

有多種方式可以重新命名線上日誌檔案,見下列諸條:

1). 執行duplicate命名時指定LOGFILE子句設定redo logs檔名。

2). 輔助例項初始化引數檔案中設定LOG_FILE_NAME_CONVERT引數。該引數語法如下:

LOG_FILE_NAME_CONVERT = 'string1' , 'string2' , 'string3' , 'string4' , ...

將string1替換為string2,string3替換為string4,幾乎無限組對。

3). 輔助例項中設定其它的初始化引數:DB_CREATE_FILE_DEST, DB_CREATE_ONLINE_DEST_n, or DB_RECOVERY_FILE_DEST這些引數的作用類似於SQL語句:ALTER DATABASE ADD LOGFILE.

4). 如果副本資料庫與目標庫不同一臺機器上,並且副本資料庫的線上日誌檔案路徑與目標庫相同,則執行duplicate命令時必須指定NOFILENAMECHECK引數以避免衝突提示。暈了吧,異機操作路徑相同還必需指定NOFILENAMECHECK。此處oracle表現的很傻,它不知道你要恢復的路徑是在另一臺機器上,它只是認為要恢復到的路徑怎麼跟目標資料庫表現的一樣呢?會不會是要覆蓋目標資料庫啊,為了避免這種情形,於是它就報錯所以一旦異機恢復,並且路徑相同,那麼你必須通過指定NOFILENAMECHECK來避免oracle的自動識別。

提示:上述各方式是有優先順序的,按照順序序號最小的最先執行。如果你在操作過程中統統指定,則oracle會自動判斷並以優先順序最高的設定為準。

3建立過程中重新命名資料檔案

這個方法也比較多:第三章第2節"不同路徑結構的複製"時已經耗費了不少筆墨(o,是按鍵次數)並輔以各種指令碼例項說明,什麼,沒看明白,拖出去關小黑屋反覆殺死100遍

4跳過檔名檢測NOFILENAMECHECK

這項操作主要是為了避免oracle錯誤的領會你的操作意圖。

例如:

a庫有兩個資料檔案:檔案號1的檔案f:oracleoradatafile1.dbf和檔案號2的檔案f:oracleoradatafile2.dbf,當你將其複製到另一臺伺服器的b庫時:

RUN

{

SET NEWNAME FOR DATAFILE 1 TO f:oracleoradatafile2.dbf;

SET NEWNAME FOR DATAFILE 2 TO f:oracleoradatafile1.dbf;

DUPLICATE TARGET DATABASE TO newdb;

}

執行上面的指令碼oracle會報錯。雖然你通過set newname命令已經將資料檔案重新命名,不會有檔名重複的問題,但是由於此項操作是異機的同路徑複製,oracle會以為file1.dbf和file2.dbf仍在使用(目標庫的確在使用,但oracle分不清你當前操作的已經不是同一臺伺服器)。於是oracle會提示報錯資訊,針對這種情況,你必須DUPLICATE TARGET DATABASE TO newdb NOFILENAMECHECK避免oracle的理解。

再與第2項中的第4小項結合理解,你就能完全掌握NOFILENAMECHECK的奧妙所在:)

5建立過程中重新命名臨時檔案

與重新命名資料檔案極其相似,不過如果希望通過SET NAME方式重新命名臨時檔案路徑的話,需要指明:SET NEWNAME FOR TEMPFILE,其它皆與之同,不詳述。

三、同步副本資料庫(Using DUPLICATE DATABASE to Resynchronize a Duplicate Database)

實質上對於非standby方式的duplicate沒有同步的操作,所謂同步不過就是再執行一次建立罷了。當然它跟初次執行還是有黑大區別地,比如,你不需要再配置輔助例項,這可是省了很多功夫啊。

例如,刪除目標庫中jss*命名的表,然後執行同步:

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

恢復管理器: Release 10.2.0.1.0 - Production on 星期二 10月 23 16:54:43 2007

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

已連線到目標資料庫: JSSWEB (DBID=3402005373, 未開啟)

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

RMAN> DUPLICATE TARGET DATABASE TO jssdup;

啟動 Duplicate Db 於 23-10月-07

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

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: sid=38 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 於 23-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:BACKUP8IV7NJE_1_1

通道 ORA_AUX_DISK_1: 已恢復備份段 1

段控制程式碼 = D:BACKUP8IV7NJE_1_1 標記 = TAG20071023T155942

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

完成 restore 於 23-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=636742551 檔名=F:ORACLEORADATAJSSDUPUNDOTBS01.DBF

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

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

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

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

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

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

記憶體指令碼的內容:

{

recover

clone database

noredo

,

delete archivelog

;

}

正在執行記憶體指令碼

啟動 recover 於 23-10月-07

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: sid=38 devtype=DISK

完成 recover 於 23-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=636742564

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

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

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

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

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

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

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

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

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

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

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

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

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

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

記憶體指令碼的內容:

{

Alter clone database open resetlogs;

}

正在執行記憶體指令碼

資料庫已開啟

完成 Duplicate Db 於 23-10月-07

RMAN>

連線到副本資料庫驗證一下資料:

F:oracle>set oracle_sid=jssdup

F:oracle>sqlplus jss/jss

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 10月 23 16:56:32 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;

未選定行

SQL>

同步成功鳥:)

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

相關文章