本文作者:
junsansi????
轉載網址:
http://www.5ienet.com/index.shtml
?
?
第四部分附章(1)RMAN備份來創建? 2008.01.22
??? 如果你看過三思之前的幾個筆記系列,那么對于rman 想必已經非常熟悉,操作這個必然也不成問題,如果你還沒有看過,建議你先回去看看,然后再回來操作必然也沒有問題,如果你一定不準備看,沒關系,只要你嚴格按照實踐部分的步驟操作,我相信你一定也可以創建成功,操作應該也沒有問題,不過如果這樣你也覺著沒有問題,那么我要告訴你,可能就這是最大的問題:不知道做過什么,不知道該做什么,不知道為什么要做,一旦需求稍變,你甚至什么都不敢做。
?
??? 你什么都不用說,我知道,你還有問題,下面,我們先來看你下意識的第一個問題,為什么要用rman 創建物理standby?Oracle 告訴我們,有三點:
?
??? ● RMAN 創建standby 是通過primary 的備份,因此不會對primary 有任何的影響
??? ● RMAN 自動重命名OMF 的文件及路徑結構。
??? ● RMAN 修復歸檔日志文件并執行恢復以盡可能保證standby 與primary 數據一致相同。
?
??? 當然,我們也應該知道,上述這些都是形容詞,它只是為了強化意識,說到這里再多白話幾句,第一條呢還說的過去(雖然你不用rman 備份,使用其它方式的備份創建standby 也不會對primary 造成影響),第二條第三條就完全不靠譜了,并不是說它實現不了,恰恰相反,是它描述的太基礎了,形容手法有問題,我舉個例子,比如你在魚缸里看到一條魚,你會不會形容說哇這條魚能夠在水里游耶(死魚才不會在水里游呢)~~所以鑒別能力很重要,雖然這點我做的還很不夠,但是請首長們放心,我一定會努力的,我一定會加強的,我一定會堅持的!?。?br />
?
??? 回到這個問題上來,為什么要用rman 來創建物理standby 呢,在我看來如果說有優勢那么就一點:簡單!
??? 另外在這里三思更明確的指出,使用RMAN 的duplicate 命令只能直接創建物理standby,幸還是不幸?
?
?
一、準備工作
?
??? 注意,在做任何操作之前,需要確認以下幾點:
?
??? ● 擁有至少一份通過rman 創建的備份;
??? ● 已經在primary 數據庫設置了所有相關的初始化參數;
??? ● 已經創建了standby 的初始化參數文件并配置了所有相關的初始化參數;
??? ● 已經配置了實例,NetService,Listener 等;
??? ● 啟動standby 實例到nomount 狀態;
?
??? 然后:
?
1、通過rman 創建standby 的控制文件
?
??? 創建standby 的控制文件前面我們提到通過sql 命令,使用非常簡單,使用rman 命令創建與之同理,并且有兩種方式創建演示如下:
??? 1).RMAN> backup current controlfile for standby;
??? 2).RMAN> copy current controlfile for standby to 'e:\ora10g\oradata\jssrman\JSSRMAN01.CTL';
?
2、定制standby 數據(日志)文件重命名策略
?
??? 為什么oracle 要提供重命名策略呢?因為dg 配置非常靈活,standby 甚至可以與primary 在同一個數據庫。
?
??? 什么時候需要應用重命名策略呢?如果standby 與primary 在同一臺服務器,或雖然不在同一臺服務器,但standby 的目錄結構與primary 不同,這兩種情況下,都必須應用重命名策略。如果standby 與primary
不在同一臺服務器,并且目錄結構相同,那就不需要應用重命名策略。
?
??? 如何應用重命名策略呢? 多種方式, 比如我們的老朋友初始化參數:db_file_name_convert,log_file_name_convert。還有rman 命令SET NEWNAME 或CONFIGURE AUXNAME
等等,這些相關參數、命令的應用我們都在"Duplicate 復制數據庫"系列中介紹并應用過,后面還會再次提及。
?
?
二、大致流程
??? 通常情況下,rman 創建完standby 之后不會自動執行recover。
?
??? 如果你執行duplicate 命令時沒有指定dorecover 參數,則rman 自動按照下面的步驟操作:
??? 1、RMAN 連接standby 與primary,及catalog(如果使用了的話);
??? 2、檢索catalog(nocatalog 的話是primary 數據庫的控制文件),確定primary 的備份以及standby 控制文件;
??? 3、如果使用介質恢復,RMAN 需要連接介質管理器以獲取所需備份數據;
??? 4、恢復standby 控制文件到standby 服務器;
??? 5、恢復primary 數據庫備份集中相應數據文件到standby 服務器;
??? 6、rman 自動將standby 數據庫打開到mount 狀態,不過不會自動打開redo 應用。
?
??? 如果執行duplicate 命令時指定了dorecover 參數,則rman 會在執行完第5 步后,接著執行下列的操作:
??? 7、在所有數據都restored 之后,rman 自動執行recovery,如果recovery 過程需要歸檔文件,但是這些文件又不在本地盤,則rman 會嘗試從備份中獲取。
??? 8、rman 執行recovery 之前,你可以通過指定time,scn,logfile sequence 來確定recovery 的內容,如果什么都不指定,則rman 一直recover 到最后一個歸檔文件。
??? 9、rman 自動將standby 數據庫打開到mount 狀態,同樣也不會自動打開redo 應用。
?
?
三、方法及步驟
??? 基本上,可以分成二類:
?
1、相同目錄結構的創建
??? duplicate 不同服務器相同目錄結構創建standby 的操作極為簡單, 你即不需要動用DB_FILE_NAME_CONVER/LOG_FILE_NAME_CONVERT之類參數,也不需要通過set newname之類命令,基本步驟如下:
?
??? 1) 確保已設置standby 服務器中所有相關的初始化參數。
??? 2) 確認備份集中文件scn 大于或等于控制文件中的scn。
??? 3) 如果需要,可以通過set 命令指定time,scn 或log 序號以執行不完全恢復。
??????? 例如:set until scn 152;
??????? 提示:注意如果有set,則set 與duplicate 必須在同一個run 命令塊中。
??? 4) 如果沒有配置自動分配通道的話,需要手工指定至少一條輔助通道。
??? 5) 務必指定nofilenamecheck 參數,我們之前"duplicate 復制數據庫"系列中就曾提到過,異機操作路徑相同還必需指定NOFILENAMECHECK。因為此處oracle 表現的很傻,它不知道你要恢復的路徑是在另一臺機器上,它只是認為要恢復到的路徑怎么跟目標數據庫表現的一樣呢?會不會是要覆蓋目標數據庫啊,為了避免這種情形,于是它就報錯。所以一旦異機恢復,并且路徑相同,那么你必須通過指定NOFILENAMECHECK 來避免oracle 的自動識別。
?
??? 例如腳本如下:
??? sql> duplicate target database for standby nofilenamecheck dorecover;
??? 注意,dorecover 并非是必須參數,如果你不指定的話,則duplicate 修復數據文件到服務器,并自動將standby 啟動到mount 狀態,不過并不會執行恢復操作。
?
2、不同目錄結構的創建
??? 對于不同目錄結構創建standby(與是否同一臺服務器就基本無關了),你需要對數據文件和日志文件路徑重新定義,那你的選擇可就多多了喲:
?
??? a. 使用初始化參數重定義數據文件及日志文件
?
??? 關于db_file_name_convert 和log_file_name_convert 兩個初始化參數的本領和套路大家已經都很熟悉了,所以呢這里就不多做介紹。duplicate 命令在此處執行的時候與相同目錄結構執行也沒什么不同,所以,你可以認為,這是不同路徑下創建standby 中,最簡單的方式。
?
??
b. SET NEWNAME 命令重定義數據文件
?
??? 步驟如下:
??? ● 確保已設置standby 服務器中所有相關的初始化參數。
??? ● 確認備份集中文件scn 大于或等于控制文件中的scn。
??? ● 如果需要,可以通過set 命令指定time,scn 或log 序號以執行不完全恢復。
??? ● 如果沒有配置自動分配通道的話,需要手工指定至少一條輔助通道。
??? ● 通過set newname 命令為standby 數據文件指定新路徑
??? ● 執行duplicate 命令。
?
??? 例如,腳本如下:
??? RUN
??? {
??? # Set new file names for the datafiles
??? SET NEWNAME FOR DATAFILE 1 TO '?/dbs/standby_data_01.f';
??? SET NEWNAME FOR DATAFILE 2 TO '?/dbs/standby_data_02.f';
??? . . .
??? DUPLICATE TARGET DATABASE FOR STANDBY DORECOVER;
??? }
?
? ?
c. CONFIGURE AUXNAME 命令重定義數據文件
?
??? 操作步驟皆與上同,不再詳述,不過需要注意的是CONFIGURE AUXNAME 命令的格式,并且configure 命令不能在run 塊中執行,例如腳本如下:
??? # set auxiliary names for the datafiles
??? CONFIGURE AUXNAME FOR DATAFILE 1 TO '/oracle/auxfiles/aux_1.f';
??? CONFIGURE AUXNAME FOR DATAFILE 2 TO '/oracle/auxfiles/aux_2.f';
??? . . .
??? CONFIGURE AUXNAME FOR DATAFILE n TO '/oracle/auxfiles/aux_n.f';
??? DUPLICATE TARGET DATABASE FOR STANDBY;
?
??? 最后,務必注意,configure auxname 命令執行是一直生效的,因此duplicate 執行完之后,推薦清除CONFIGURE AUXNAME。這樣就不會對未來的類似操作造成影響。
?
??? 例如:
??? CONFIGURE AUXNAME FOR DATAFILE 1 CLEAR;
??? CONFIGURE AUXNAME FOR DATAFILE 2 CLEAR;
??? . . .
??? CONFIGURE AUXNAME FOR DATAFILE n CLEAR;
?
?
??? 步驟和方法介紹完了,下面實際操作一把~~~~~~~~~~~~~
?
?
?