?
第一部分基礎(chǔ)2之術(shù)語再了解大概? 2007.11.29
?
?
??? 同一個Data Guard 配置包含一個Primary 數(shù)據(jù)庫和最多九個Standby 數(shù)據(jù)庫。Primary 的創(chuàng)建就不說了,Standby 數(shù)據(jù)庫初始可以通過primary 數(shù)據(jù)庫的備份創(chuàng)建。一旦創(chuàng)建并配置成standby 后,dg 負責(zé)傳輸primary數(shù)據(jù)庫redo data 到standby 數(shù)據(jù)庫,standby 數(shù)據(jù)庫通過應(yīng)用接收到的redo data 保持與primary 數(shù)據(jù)庫的事務(wù)一致。
?
一、Standby數(shù)據(jù)庫類型
?
??? 前章我們簡單介紹了Standby 數(shù)據(jù)庫,并且也知道其通常分為兩類:物理standby 和邏輯standby,同時也簡短的描述了其各自的特點,下面我們就相關(guān)方面進行一些稍深入的了解:
?
1.物理standby
?
??? 我們知道物理standby 與primary 數(shù)據(jù)庫完全一模一樣(默認情況下,當然也可以不一樣,事無絕對嘛),Dg 通過redo 應(yīng)用維護物理standby 數(shù)據(jù)庫。通常在不應(yīng)用恢復(fù)的時候,可以以read-only 模式打開,如果數(shù)據(jù)庫指定了flashback area 的話,也可以被臨時性的置為read-write 模式。
?
??? ● Redo 應(yīng)用
??? 物理standby 通過應(yīng)用歸檔文件或直接從standby 系統(tǒng)中通過oracle 恢復(fù)機制應(yīng)用redo 文件。恢復(fù)操作屬于塊對塊的應(yīng)用(不理解?那就理解成塊復(fù)制,將redo 中發(fā)生了變化的塊復(fù)制到standby)。如果正在應(yīng)用redo,數(shù)據(jù)庫不能被open。
?
???
Redo 應(yīng)用是物理standby 的核心,務(wù)必要搞清楚其概念和原理,后續(xù)將有專門章節(jié)介紹。
?
??? ● Read-only 模式
??? 以read-only 模式打開后,你可以在standby 數(shù)據(jù)庫執(zhí)行查詢,或者備份等操作(變相減輕primary數(shù)據(jù)庫壓力)。此時standby 數(shù)據(jù)庫仍然可以繼續(xù)接收redo 數(shù)據(jù),不過并不會觸發(fā)操作,直到數(shù)據(jù)庫恢復(fù)redo 應(yīng)用。也就是說read-only 模式時不能執(zhí)行redo 應(yīng)用,redo 應(yīng)用時數(shù)據(jù)庫肯定處于未打開狀態(tài)。如果需要的話,你可以在兩種狀態(tài)間轉(zhuǎn)換,比如先應(yīng)用redo,然后read-only,然后切換數(shù)據(jù)庫狀態(tài)再應(yīng)用redo,呵呵,人生就是循環(huán),數(shù)據(jù)庫也是一樣。
?
??? ● Read-write 模式
?
??? 如果以read-write 模式打開,則standby 數(shù)據(jù)庫將暫停從primary 數(shù)據(jù)庫接收redo 數(shù)據(jù),并且暫時失去災(zāi)難保護的功能。當然,以read-write 模式打開也并非一無是處,比如你可能需要臨時調(diào)試一些數(shù)據(jù),但是又不方便在正式庫操作,那就可以臨時將standby 數(shù)據(jù)庫置為read-write 模式,操作完之后將數(shù)據(jù)庫閃回到操作前的狀態(tài)(閃回之后,Data Guard 會自動同步,不需要重建standby)。
?
??? ● 物理standby 特點
?
????? →
災(zāi)難恢復(fù)及高可用性
??????物理standby 提供了一個健全而且極高效的災(zāi)難恢復(fù)及高可用性的解決方案。更加易于管理的switchover/failover 角色轉(zhuǎn)換及最更短的計劃內(nèi)或計劃外停機時間。
?????
→ 數(shù)據(jù)保護
????? 應(yīng)用物理standby 數(shù)據(jù)庫,Dg 能夠確保即使面對無法預(yù)料的災(zāi)害也能夠不丟失數(shù)據(jù)。前面也提到物理standby 是基于塊對塊的復(fù)制,因此對象、語句統(tǒng)統(tǒng)無關(guān),primary 數(shù)據(jù)庫上有什么,物理standby 也會有什么。
?????
→ 分擔(dān)primary 數(shù)據(jù)庫壓力
????? 通過將一些備份任務(wù)、僅查詢的需求轉(zhuǎn)移到物理standby,可以有效節(jié)省primary 數(shù)據(jù)庫的cpu以及i/o 資源。
?????
→ 提升性能
????? 物理standby 所使用的redo 應(yīng)用技術(shù)使用最底層的恢復(fù)機制,這種機制能夠繞過sql 級代碼層,因此效率最高。
?
2.邏輯standby
??? 邏輯standby 是邏輯上與primary 數(shù)據(jù)庫相同,結(jié)構(gòu)可以不一致。邏輯standby 通過sql 應(yīng)用與primary數(shù)據(jù)庫保持一致,也正因如此,邏輯standby 可以以read-write 模式打開,你可以在任何時候訪問邏輯standby數(shù)據(jù)庫。同樣有利也有弊,邏輯standby 對于某些數(shù)據(jù)類型以及一些ddl,dml 會有操作上的限制。
?
??? ● 邏輯standby 的特點:
?
??? 除了上述物理standby 中提到的類似災(zāi)難恢復(fù),高可用性及數(shù)據(jù)保護等之外,還有下列一些特點:
?????
→ 有效的利用standby 的硬件資源
????? 除災(zāi)難恢復(fù)外,邏輯standby 數(shù)據(jù)庫還可用于其它業(yè)務(wù)需求。比如通過在standby 數(shù)據(jù)庫創(chuàng)建額外的索引、物化視圖等提高查詢性能并滿足特定業(yè)務(wù)需要。又比如創(chuàng)建新的schema(primary 數(shù)據(jù)庫并不存在)然后在這些schema 中執(zhí)行ddl 或者dml 操作等。
?????
→ 分擔(dān)primary 數(shù)據(jù)庫壓力
????? 邏輯standby 數(shù)據(jù)庫可以在更新表的時候仍然保持打開狀態(tài),此時這些表可同時用于只讀訪問。這使得邏輯standby 數(shù)據(jù)庫能夠同時用于數(shù)據(jù)保護和報表操作,從而將主數(shù)據(jù)庫從那些報表和查詢?nèi)蝿?wù)中解脫出來,節(jié)約寶貴的CPU 和I/O 資源。
?????
→ 平滑升級
????? 比如跨版本升級啦,打小補丁啦等等,應(yīng)該說應(yīng)用的空間很大,而帶來的風(fēng)險卻很小(前提是如果你擁有足夠的技術(shù)實力。另外雖然物理standby 也能夠?qū)崿F(xiàn)一些升級操作,但如果跨平臺的話恐怕就力不從心,所以此項就不做為物理standby 的特點列出了),我個人認為這是一種值的推薦的在線的滾動的平滑的升級方式。
?
?
二、DataGuard操作界面(方式)
?
??? 做為oracle 環(huán)境中一項非常重要的特性,oracle 提供了多種方式搭建、操作、管理、維護Data Guard 配置,比如:
?
??? ● OEM(Oracle Enterprise Manager)
??? Orcale EM 提供了一個窗口化的管理方式,基本上你只需要點點鼠標就能完全dg 的配置管理維護等操作(當然三思仍然堅持一步一步學(xué)rman 中的觀點,在可能的情況下,盡可能不依賴視窗化的功能,所以這
種操作方式不做詳細介紹),其實質(zhì)是調(diào)用oracle 為dg 專門提供的一個管理器:Data Guard Broker 來實施管理操作。
?
??? ● Sqlplus 命令行方式
??? 命令行方式的管理,本系列文章中主要采用的方式。不要一聽到命令行就被嚇倒,data guard 的管理命令并不多,你只需要在腦袋瓜里稍微挪出那么一小點地方用來記憶就可以了。
?
??? ● DGMGRL(Data Guard broker 命令行方式)
??? 就是Data Guard Broker,不過是命令行方式的操作。
?
??? ● 初始化參數(shù)文件
??? 我感覺不能把參數(shù)化參數(shù)視為一種操作方式,應(yīng)該說,在這里,通過初始化參數(shù),更多是提供更靈活的Data Guard 配置。
?
?
三、DataGuard的軟硬件需求
1、硬件及操作系統(tǒng)需求
?
??? ● 同一個Data Gurid 配置中的所有oracle 數(shù)據(jù)庫必須運行于相同的平臺。比如inter 架構(gòu)下的32 位linux 系統(tǒng)可以與inter 架構(gòu)下的32 位linux 系統(tǒng)組成一組Data Guard。另外,如果服務(wù)器都運行于32 位的話,64 位HP-UX 也可以與32 位HP-UX 組成一組Data Guard。
??? ● 不同服務(wù)器的硬件配置可以不同,比如cpu 啦,內(nèi)存啦,存儲設(shè)備啦,但是必須確保standby 數(shù)據(jù)庫服務(wù)器有足夠的磁盤空間用來接收及應(yīng)用redo 數(shù)據(jù)。
??? ● primary 數(shù)據(jù)庫和standby 數(shù)據(jù)庫的操作系統(tǒng)必須一致,不過操作系統(tǒng)版本可以略有差異,比如(linuxas4&linux as5),primary 數(shù)據(jù)庫和standby 數(shù)據(jù)庫的目錄路徑也可以不同。
?
2、軟件需求
?
??? ● Data Guard 是Oracle 企業(yè)版的一個特性,明白了吧,標準版是不支持地。
??? ● 通過Data Guard 的SQL 應(yīng)用,可以實現(xiàn)滾動升級服務(wù)器數(shù)據(jù)庫版本(要求升級前數(shù)據(jù)庫版本不低于10.1.0.3)。
??? ● 同一個Data Guard 配置中所有數(shù)據(jù)庫初始化參數(shù):COMPATIBLE 的值必須相同。
??? ● Primary 數(shù)據(jù)庫必須運行于歸檔模式,并且務(wù)必確保在primary 數(shù)據(jù)庫上打開FORCE LOGGING,以避免用戶通過nologging 等方式避免寫redo 造成對應(yīng)的操作無法傳輸?shù)絪tandby 數(shù)據(jù)庫。
??? ● Primary 和standby 數(shù)據(jù)庫均可應(yīng)用于單實例或RAC 架構(gòu)下,并且同一個data guard 配置可以混合使用邏輯standby 和物理standby。
??? ● Primary 和standby 數(shù)據(jù)庫可以在同一臺服務(wù)器,但需要注意各自的數(shù)據(jù)文件存放目錄,避免重寫或覆蓋。
??? ● 使用具有sysdba 系統(tǒng)權(quán)限的用戶管理primary 和standby 數(shù)據(jù)庫。
??? ● 建議數(shù)據(jù)庫必須采用相同的存儲架構(gòu)。比如存儲采用ASM/OMF 的話,那不分primarty 或是standby也都需要采用ASM/OMF。
?
??? 另外還有很重要一點,注意各服務(wù)器的時間設(shè)置,不要因為時區(qū)/時間設(shè)置的不一置造成同步上的。
?
四、分清某某REDOLOGS(OnlineRedoLogs,ArchivedRedoLogs,StandbyRedoLogs)
?
??? 黑多黑多的redo,想必諸位早已暈頭并吐過多次了吧。哎,說實話我描述的時候也很痛苦。這塊涉及到中英文之間的意會。我又不能過度白話,不然看完我這篇文章再看其它相關(guān)文檔的相關(guān)概念恐怕您都不知道人家在說什么,這種誤人子弟的事情咱不能干(也許干過,但主觀意愿上肯定是不想的),更何況咱也是看各亂雜七雜八文檔被誤過XXXXXXXXXXXXXXXXX 次(X=9),深受其害,堅決不能再讓跟俺一樣受盡苦楚,歷經(jīng)磨難的DDMM 們因為看俺的文檔被再次一百遍啊一百遍。
??? 但是已到關(guān)鍵時刻,此處不把redo 混清楚,后頭就得被redo 混了,所以這里我要用盡我全部的口水+目前為止我所有已成體系的認識再給大家淺顯的白話一回。注:基礎(chǔ)概念僅一筆帶過,水太大了也不好,要響應(yīng)胡書記號召,書寫節(jié)約型筆記。
?
??? REDO:中文直譯是重做,與UNDO 對應(yīng)(天哪又扯出個概念,你看不見我看不見我看不見我)。重做什么?為什么要重做呢?首先重做是oracle 對操作的處理機制,我們操作數(shù)據(jù)(增冊改)并非直接反映到數(shù)據(jù)文件,而是先被記錄(就是online redo log 嘍),等時機合適的時候,再由相應(yīng)的進程操作提交到數(shù)據(jù)文件(詳細可見:數(shù)據(jù)寫過程中各項觸發(fā)條件及邏輯)。你是不是想說如果把所有的online redo logs 都保存下來,不就相當于擁有了數(shù)據(jù)庫做過的所有操作了嗎?en,我可以非常負責(zé)任的告訴你,你說的對,oracle 跟你想到一塊去了并且也將其實現(xiàn)了,這就是archived redo logs,簡稱archive log 即歸檔日志。我們再回來看Data Guard,由于standby 數(shù)據(jù)庫的數(shù)據(jù)通常都來自于primary 數(shù)據(jù)庫,怎么來的呢,通過RFS 進程接收primary 數(shù)據(jù)庫的redo,保存在本地,就是Standby redo logs 嘍(arch 模式的話不寫standby redo,直接保存歸檔),然后standby 數(shù)據(jù)庫的相關(guān)進程讀取接收到的redo 數(shù)據(jù),再將其寫入standby 數(shù)據(jù)庫。保存之后數(shù)據(jù)又是怎么生成的呢,兩種方式,物理standby 通過redo 應(yīng)用,邏輯standby 通過sql 應(yīng)用,不管是哪種應(yīng)用,應(yīng)用的是什么呢?是redo log 中的內(nèi)容(默認情況下應(yīng)用archived redo logs,如果打開了實時應(yīng)用,則直接從standby redo logs 中讀取),至于如何應(yīng)用,那就是redo應(yīng)用和sql 應(yīng)用機制的事情了(也許后頭我們會深入聊一聊這個話題,很復(fù)雜也很有趣)。
?
??? 針對上述內(nèi)容我們試著總結(jié)一下,看看能否得出一些結(jié)論:
??? 對于primary 數(shù)據(jù)庫和邏輯standby 數(shù)據(jù)庫,online redo log 文件肯定是必須的,而對于物理standby 是否還需要redo log 呢?畢竟物理standby 通常不會有寫操作,所以物理standby 應(yīng)該不會生成有redo 數(shù)據(jù)。為保證數(shù)據(jù)庫的事務(wù)一致性必然需要有歸檔,也就是說不管primary 或standby 都必須運行于歸檔模式。
??? standby redo logs 是standby 數(shù)據(jù)庫特有的文件(如果配置了的話),就本身的特點比如文件存儲特性,配置特性等等都與online redo logs 非常類似,不過它存儲的是接收自primary 數(shù)據(jù)庫的redo 數(shù)據(jù),而online redo logs中記錄的是本機中的操作記錄。
?
??? 上面的描述大家盡可能意會,能夠理解最好,理解不了也沒關(guān)系,我始終認為,只要堅定不移的學(xué)習(xí)下去,總會水到渠成。下面進入實戰(zhàn)章節(jié),先來個簡單的,創(chuàng)建物理standby。
?
?
-The End-