Oracle RAC培訓(xùn)學(xué)習(xí)心得
OracleRAC培訓(xùn)學(xué)習(xí)心得
上周參加了OracleRAC培訓(xùn)課程,課程介紹了RAC在數(shù)據(jù)庫中的概念,以及如何在LINUX系統(tǒng)下配置和管理使用RAC的數(shù)據(jù)庫,同時還介紹了如何在RAC環(huán)境中配置和使用自動存儲管理(ASM),節(jié)點的添加和刪除,RAC數(shù)據(jù)庫的備份和恢復(fù)。
OracleRAC是Oracle數(shù)據(jù)庫實現(xiàn)高可用的一項重要技術(shù),OracleRAC的實施配置并不困難,只要按照文檔一步步操作下去就可以了。然而,我認為Oracle培訓(xùn)更大的意義在于對RAC技術(shù)原理、實現(xiàn)方式在理論上的講解。對于一項技術(shù)的深入掌握,理論和實踐缺一不可。理論指導(dǎo)實踐,尤其在進行故障診斷的時候,理論知識的掌握就會起到巨大的作用,另一方面,實踐能更好地幫助理論的理解,進而完全的掌握這項技術(shù)。Oracle和其他技術(shù)的學(xué)習(xí)都應(yīng)該是一個由實踐到理論,再由理論回到實踐的不斷交替的過程。
OracleRAC的優(yōu)勢在于利用多個節(jié)點(實例)組成一個數(shù)據(jù)庫,這樣在保證了數(shù)據(jù)庫高可用性的情況下更充分的利用了多個主機的性能,而且可以通過增加節(jié)點進行性能的擴展。實現(xiàn)OracleRAC需要解決的關(guān)鍵問題就是多節(jié)點進行數(shù)據(jù)訪問時如何保證數(shù)據(jù)的一致性,Oracle是通過各節(jié)點間的私有連接進行內(nèi)存融合(cachefusion)來保證各節(jié)點數(shù)據(jù)訪問的一致性。用一個例子來解釋一下內(nèi)存融合的過程,在存在A、B兩個節(jié)點的RAC環(huán)境中,當(dāng)A節(jié)點使用DML語句(如Update)對一個數(shù)據(jù)塊中的數(shù)據(jù)進行修改時,A節(jié)點實例會到GRD(GlobalResourceDirectory)中查找該數(shù)據(jù)塊的信息,這些信息包括該數(shù)據(jù)塊的Master(第一次讀這個數(shù)據(jù)塊的節(jié)點),Owner(當(dāng)前擁有這個數(shù)據(jù)塊的節(jié)點),以及數(shù)據(jù)塊在各個節(jié)點間的傳遞記錄。A節(jié)點如果發(fā)現(xiàn)GRD中沒有需要讀取的數(shù)據(jù)塊的信息,說明該數(shù)據(jù)塊是一個干凈的數(shù)據(jù)塊,A節(jié)點從磁盤或BufferCache中獲得該數(shù)據(jù)塊,然后對需要修改的行加鎖,進行相應(yīng)的修改,當(dāng)然SCN會隨之增加。在A完成修改而沒有提交或回滾的情況下,如果B節(jié)點也需要訪問這個數(shù)據(jù)塊修改某些行(假設(shè)不同于A修改的行),B同樣去到GRD中查找該數(shù)據(jù)塊的信息,當(dāng)然B發(fā)現(xiàn)該數(shù)據(jù)塊的Master為A,Owner也為A,為了保證A的修改不丟失,B需要發(fā)信息給A,讓A將需要修改的數(shù)據(jù)塊通過私有連接直接從內(nèi)存中傳給B,當(dāng)然該數(shù)據(jù)塊中包含A的鎖信息,這樣A節(jié)點與B節(jié)點間的一次內(nèi)存的數(shù)據(jù)傳遞就是內(nèi)存融合。OracleRAC的內(nèi)存融合也面臨一些問題,繼續(xù)剛剛的例子,如果A又再次請求對該數(shù)據(jù)塊修改或者結(jié)束事務(wù)(提交或回滾)的時候,又需要從B節(jié)點內(nèi)存中取得數(shù)據(jù)塊,又要發(fā)生內(nèi)存融合,這樣在兩個節(jié)點業(yè)務(wù)沒有合理分割的情況下,數(shù)據(jù)庫繁忙時,大量的內(nèi)存融合會對數(shù)據(jù)庫性能造成嚴重的影響。通過對OracleRAC技術(shù)的理解,在實現(xiàn)OracleRAC架構(gòu)時的業(yè)務(wù)分割就成為了保證系統(tǒng)性能的重要手段,業(yè)務(wù)分割的根本在于使不同的實例不能訪問相同的數(shù)據(jù)塊,這樣業(yè)務(wù)分割規(guī)則可以小到表的級別(通常不同的表共享一個數(shù)據(jù)塊的幾率不大),大到表空間、Schema的級別。這些理論知識的理解對于OracleRAC架構(gòu)的實施有著巨大的指導(dǎo)意義。另外,我對在OracleRAC培訓(xùn)中講到的一個擴展的RAC磁盤鏡像架構(gòu)印象很深,傳統(tǒng)的OracleRAC架構(gòu)中,存儲仍然是一個單點故障,在這個擴展的RAC磁盤鏡像架構(gòu)中,解決了傳統(tǒng)架構(gòu)中的存儲單點故障風(fēng)險,該架構(gòu)如下圖:
該架構(gòu)中分為A、B兩個Site,兩個Site可以存在數(shù)公里的距離,整體上兩個Site的4個節(jié)點共同構(gòu)成一個RAC集群,兩個Site間通過DarkFiber(暗光纖)作為私有連接鏈路,保證各個節(jié)點間的內(nèi)存融合的進行,每個節(jié)點的寫操作都能同時無延遲的寫到2個存儲上,兩個存儲的同步寫可以通過第三方軟件或ASM實現(xiàn)。不過其中很大的成本在于兩個Site間的DarkFiber(暗光纖)架設(shè)成本。
在講解這部分內(nèi)容時,關(guān)于這個架構(gòu)是一個RAC還是兩個RAC實現(xiàn)的,我們有過一些爭論,我認為是一個RAC實現(xiàn)的,而另外一名學(xué)員和講師說是兩個RAC實現(xiàn),最后針對這個問題,請教了一位更資深的Oracle講師,這位Oracle講師通過對RAC原理的分析,如果認為是兩個RAC實現(xiàn)的話,兩個Site無法進行內(nèi)存融合,就沒有辦法保證Oracle數(shù)據(jù)庫的數(shù)據(jù)一致性,因此采用兩個RAC是無法實現(xiàn)這個架構(gòu)的。這樣大家都認同了這個架構(gòu)是一個RAC實現(xiàn)的,可見理論知識的理解對解決問題的幫助還是很大的。
擴展閱讀:Oracle培訓(xùn)心得
OracleConcept
StevenCheng
主講:賈代平著有《OracleDBA核心技術(shù)解析》
一.OracleDatabase
database=instance(inmemory)+database(indisk)callscallscalls
1instancecorrespondsto1database.二.Session
Oneusercanopenseveralsessions(對話期間)withOracleserver,thelifeofasessionexistsonlyduringthetimewhenitiscreated.三.Oracle優(yōu)于傳統(tǒng)檔案者,在于它能保障一筆資料(transaction)散置
在相關(guān)個表(table)中數(shù)據(jù)的完整性,記錄則完全記錄,刪除則完全刪除。因為它將《重做日志》完整保存,其記錄過程如下:
commitwritewritewrite。因此Oracle所儲存的資料可以倒回(rollback)。如果insert,update或delete,沒有commit或rollback,該記錄會被鎖住。四.StartUp/ShutDown
Oracle在不同階段,依序啟動各個files(i.e.Controlfile,etc.):
五.Oracle的框架
i.
ii.
物理結(jié)構(gòu)
1.控制檔(ControlFile):包含維護和驗證數(shù)據(jù)庫完整性的必要信息。例如:《控制檔》指示《數(shù)據(jù)檔》和《重做日志檔》的儲存位置,一個數(shù)據(jù)庫至少需要一個《控制檔》。2.數(shù)據(jù)檔(DataFile):儲存數(shù)據(jù)。
3.重做日志檔(RedoLogFile):儲存對數(shù)據(jù)庫所做的更改記錄。這樣萬一出現(xiàn)故障可以啟動數(shù)據(jù)恢復(fù)(recovery)。一個數(shù)據(jù)庫至少需要兩個《重做日志檔》。
4.參數(shù)檔(ParameterFile):定義Oracleinstance的特性。例如:它包含SGA中一些內(nèi)存區(qū)大小的參數(shù)。
5.歸檔檔(ArchiveFile):是《重做日志檔》的off-linecopy,儲存較早的資料,目的和《重做日志檔》一樣,都是用于recovery。
6.密碼檔(PasswordFile):儲存哪些用戶有權(quán)啟動和關(guān)閉Oracleinstance。
數(shù)據(jù)檔(DataFile)邏輯結(jié)構(gòu)
想象一個裝滿東西的柜子,數(shù)據(jù)庫(e.g.ShippingDatabase)就是柜子,柜中的抽屜是表空間,抽屜中的文件夾是數(shù)據(jù)檔,文件夾中的紙是表,寫在紙上的信息就是數(shù)據(jù),表空間是組織數(shù)據(jù)的一種方法。
1.表空間(Tablespaces):是數(shù)據(jù)庫中的基本邏輯結(jié)構(gòu),包含該數(shù)據(jù)庫中所有的表,以及相關(guān)的程序、程式,由段組成。每個數(shù)據(jù)庫包含至少一個系統(tǒng)表空間,以及其他數(shù)個檔案:系統(tǒng)表空間(systemtablespace):是必備的部分,存放表空間名稱,所包含數(shù)據(jù)檔等信息。臨時表空間(temptablespace):儲存所有臨時表。工具表空間(toolstablespace):儲存工具軟件。用戶表空間(userstablespace):儲存用戶的私有信息,數(shù)據(jù)檔通常存放在此。索引表空間(indextablespace):用來迅速找出存放的數(shù)據(jù)。
回滾表空間(rollbacktablespace):儲存回滾段。2.段(Segment):長度(numberofbytes)可由用戶自定,由區(qū)組成。段可以包含數(shù)據(jù)段、索引段、回滾段、臨時段等。3.區(qū)(Extent):長度由用戶自定,由塊組成。
4.塊(Block):Oracle最基本的存儲單位,在建立數(shù)據(jù)服務(wù)器的時候指定,大小一般可以在2~64k之間。
2內(nèi)存分配
1.SystemGlobalArea:儲存數(shù)據(jù)庫信息的內(nèi)存區(qū),該信息為數(shù)據(jù)庫各種進程所共享。它包含Oracle服務(wù)器的數(shù)據(jù)和控制信息,它是在Oracle服務(wù)器所駐留的計算機的實際內(nèi)存中得以分配,如果實際內(nèi)存不夠再往虛擬內(nèi)存中寫。
2.ProgramGlobalArea:儲存單個服務(wù)器/后臺進程的數(shù)據(jù)和控制信息,PGA在創(chuàng)建進程時分配,在終止進程時回收。
iv.后臺進程
1.寫數(shù)據(jù)進程(Database-WriteProcess):負責(zé)將更改的數(shù)據(jù)從數(shù)據(jù)庫高速緩存區(qū)寫入數(shù)據(jù)檔。
2.寫日志進程(Log-WriteProcess):負責(zé)將重做日志緩沖區(qū)中的更改寫入在線重做日志檔。
3.系統(tǒng)監(jiān)控(SystemMonitor):負責(zé)檢查數(shù)據(jù)庫的一致性,如有必要,還會在數(shù)據(jù)庫打開時,啟動數(shù)據(jù)庫的恢復(fù)。
4.進程監(jiān)控(ProcessMonitor):負責(zé)在一個Oracle進程失敗時清理資源。
5.檢查點進程(CheckpointProcess):負責(zé)將每次緩沖區(qū)高速緩存的更改,永久地記錄在數(shù)據(jù)庫中,更新控制檔和數(shù)據(jù)檔中的數(shù)據(jù)庫狀態(tài)信息。當(dāng)檢查點進程(CheckpointProcess)向數(shù)據(jù)庫發(fā)出檢查點時,Oracle必須更新所有數(shù)據(jù)文件的文件頭,以記錄檢查點的詳細信息。檢查點進程(CheckpointProcess)有助于減少實例恢復(fù)的時間,因為它可以引起數(shù)據(jù)庫寫進程(DatabaseWriter)把自上一個檢查點以來所有被修改過的數(shù)據(jù)塊寫到數(shù)據(jù)文件中。
6.歸檔進程(ArchiveProcess):負責(zé)在每次日志切換時,把已滿的日志組進行備份或歸檔。
7.服務(wù)進程(ServerProcess):負責(zé)在服務(wù)器端,執(zhí)行用戶進程的命令。
8.用戶進程(Userprocess):負責(zé)在客戶端,將用戶的SQL語句傳遞給服務(wù)進程,并從服務(wù)器段拿回查詢數(shù)據(jù)。
六.數(shù)據(jù)庫體系各部份之間的聯(lián)系
iii.
友情提示:本文中關(guān)于《Oracle RAC培訓(xùn)學(xué)習(xí)心得》給出的范例僅供您參考拓展思維使用,Oracle RAC培訓(xùn)學(xué)習(xí)心得:該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。