Oracle系統架構基本概念課件_第1頁
Oracle系統架構基本概念課件_第2頁
Oracle系統架構基本概念課件_第3頁
Oracle系統架構基本概念課件_第4頁
Oracle系統架構基本概念課件_第5頁
已閱讀5頁,還剩139頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Oracle系統架構基本概念1Oracle系統架構基本概念1Outline

Oracle系統架構概觀Overview

OracleInstanceOracleDatabaseOtherProcesses漫談OracleInstance記憶體結構BackgroundProcesses

漫談OracleDatabaseStructuresPhysicalDatabaseStructuresLogicalDatabaseStructures2OutlineOracle系統架構概觀2Oracle系統架構概觀關於Oracle系統架構,是非常重要的基礎觀念,正所謂「君子務本,本立而道生」,有了踏實的基礎觀念之後,才能在往後學習Oracle的路上,無往不利3Oracle系統架構概觀3電腦系統OverviewOracleServer主要是由OracleInstance與Database所組成,透過ServerProcess與UserProcess之間的交互運作,藉以達成使用者交付執行的工作。

OracleServerOracleInstanceDatabaseUserProcessesServerProcessesPGA

Query4電腦系統OverviewOracleServer主要例如,使用者可能想要在OracleServer上查詢一筆人事資料,使用者將相關的SQL敘述輸入系統中,此時系統會產生相對應的UserProcess與ServerProcess,由ServerProcess負責向OracleServer溝通,並將符合使用者所需的資料,從OracleServer送至UserProcess,以完成該使用者下達的request。5例如,使用者可能想要在OracleServer上查詢一筆人OracleInstance(Oracle資料庫引擎)Oracle資料庫中的任何動作都和它有關,是OracleDB的心臟地帶。OracleInstance主要包含:

backgroundprocess(背景處理程序)是一群常駐的服務常式(serviceroutine),執行I/OProcess與非OracleProcess的監控管理,針對目前的使用者所提出的request執行一些一般性的工作。每一個Process專責於一至兩項的工作SystemGlobalArea(SGA;系統全域區)用來存放資料庫系統相關資訊的一塊共享記憶體資料區域,讓backgroundprocess得以利用這些系統資訊,以提供適當的服務,處理外部的userrequest。6OracleInstance(Oracle資料庫引擎)O由於OracleInstance掌控著處理OracleDatabase所有運作的相關資訊。因此,當要存取或操作OracleDatabase裏的資料時,必須先啟動OracleInstance,才能對OracleDatabase的內容加以處理。

當OracleInstance啟動時,電腦系統會先配置一塊記憶體空間給SGA(SystemGlobalArea),並且載入相關的backgroundprocess。

7由於OracleInstance掌控著處理OracleDOracleDatabaseOracleDatabase可分為兩個部份來說明:實體結構邏輯結構

8OracleDatabaseOracleDatabas實體結構OracleDatabase的實體結構部份是由一個個的檔案所組合,主要的檔案包括Datafiles(資料檔)RedoLogfiles(重置日誌檔)-onlineControlfiles(控制檔)另外尚有:Passwordfile(密碼檔)Parameterfile(起始參數檔)ArchivedRedoLogfiles(重置日誌封存檔)-offline9實體結構OracleDatabase的實體結構部份是由一個ControlfilesDatafilesArchivedlogfilesParameterfilePasswordfileRedologfilesDatabase10ControlfilesDatafilesArchiv邏輯結構OracleDatabase的邏輯結構部份,主要有Tablespace(表格空間)Segment(區段)Extent(延伸區塊)Block(區塊)11邏輯結構OracleDatabase的邏輯結構部份,主要有OtherProcesses不屬於OracleInstance內的Process皆稱為OtherProcess。是User和應用程式要連接OracleDBServer的重要橋樑。如UserProcess、ServerProcess等主要是反應使用者下達的request(即SQL敘述),將其轉化為OracleServer能看得懂的相關指令,從OracleDatabase裏抓取資料,以反映使用者需求的資料。在ServerProcess中還有一個相當重要的資料結構-PGA(ProgramGlobalArea):PGA是一個memorybuffer,存放相關ServerProcess的資料與控制資訊。當ServerProcess被呼叫啟動後,OracleServer會為其建立一個所屬的PGA,使用者下達的SQL敘述,就是存放在這裏的。

12OtherProcesses不屬於OracleInst漫談OracleInstance13漫談OracleInstance13第一部份我們曾談到所謂的OracleInstance可分為:SGA(SystemGlobalArea)Background

Processes兩部份,並做了概略的說明。現在就分別針對SGA與BackgroundProcesses做更完整深入的說明。

14第一部份我們曾談到所謂的OracleInstance可分為記憶體結構SGA是OracleServer在系統上所建立的一塊記憶體區塊,OracleServer利用這塊記憶體結構,協同Oracle的各種Processes來完成使用者所交付的工作。SGA主要是由幾種不同的資料區塊所組成-DatabaseBufferCacheRedoLogBufferSharedPoolLargePoolJavaPool其它(如:Cursors…等)SGADatabaseBufferCacheRedoLogBufferSharedPoolLargePoolJavaPoolOthers15記憶體結構SGA是OracleServer在系統上所建DatabaseBufferCache(資料庫緩衝快取區)資料庫系統擷取資料時的一個快取空間,其用途在於有效減少存取資料時造成的磁碟讀寫動作。(到硬碟從事I/O是很耗時的工作!!)我們可以透過設定DB_BLOCK_BUFFERS這個參數值來設定DatabaseBufferCache的大小。在Oracle的DatabaseBufferCache中,尚有一些sub-caches:DB_CACHE_SIZEDB_KEEP_CACHE_SIZEDB_RECYCLE_CACHE_SIZE我們可以透過DB_CACHE_ADVICE這個參數,藉由statistics的方式來對不同的cachesize做預設。指令:Altersystemsetdb_cache_advice=on16DatabaseBufferCache(資料庫緩衝快取Oracle用所謂的LRU(LeastRecentlyUsed)演算法來管理這塊記憶體空間。LRU:當這塊記憶體空間滿載時,OracleServer將只保留最近有被使用過的資料,最不常用的資料則寫回磁碟中,並將該資料所佔用的記憶體空間釋放出來。由於DatabaseBufferCache關係著OracleServer的I/O動作頻繁與否,因此如何管理及設定DatabaseBufferCache的大小,對於OracleServer的效能調校,是相當重要的一項課題。17Oracle用所謂的LRU(LeastRecentlyRedoLogBuffer(重置日誌緩衝區)當資料庫的內容有所異動時,RedoLogBuffer會記錄其相關異動的情形:做了什麼改變改變後的舊資料與新資料經過一定的時間週期或者是RedoLogBuffer滿載時,OracleServer會將RedoLogBuffer的內容寫到RedoLogFile裏,以追蹤整個資料庫的使用情形。當OracleServer不幸當掉的話,就能利用這些記錄下來的資訊,進行資料庫的復原(Recovery)。有關RedoLogBuffer的大小設定,可以透過設定參數LOG_BUFFER,改變RedoLogBuffer的大小。

18RedoLogBuffer(重置日誌緩衝區)當資料庫的SharedPool(共享區)當使用者將SQL、PL/SQL等操作指令送至Oracle資料庫後,系統會先解析(Parse)語法是否正確。解析時,下列兩項資料將會放入SharedPool中:解析時所需要用到的相關資訊解析後的結果當有不同的使用者執行相同的SQL指令,就可以共用SharedPool中解析好的結果,以加速SQL指令執行的速度。SharedPool內包含數種不同的區域,主要有下列兩類:DataDictionaryCache–存放解析時所需要的相關資訊,以供查詢之用LibraryCache–存放各類指令解析後的結果,以供重覆使用SharedPool亦是採LRU的記憶體管理演算法。SharedPool的大小設定,是由SHARED_POOL_SIZE這個參數來控制

19SharedPool(共享區)當使用者將SQL、PL/SLargePool(大型區)

LargePool是Oracle針對一些需要大量記憶體空間的資料庫處理與運算工作所提供的一個額外選項,它可以讓SGA配置一個較大的記憶體空間,提供給處理Oracle的backup/restore、I/O、執行Oracle復原管理程式RMAN、…等。透過指定LARGE_POOL_SIZE這個參數,設定LargePool的大小。

20LargePool(大型區)LargePool是OrJavaPool(Java區)當使用者有使用Java時,OracleServer利用這塊記憶體空間,存放及Parse所使用的JavaCode,藉以提供Oracle與Internet更高的整合性。透過指定JAVA_POOL_SIZE這個參數,來改變JavaPool的大小。21JavaPool(Java區)當使用者有使用Java時,BackgroundProcessesOracleServer所提供的Processes可分為兩類:ServerProcesses

用以服務ClientProcesses,根據ClientProcesses的需求,由OracleServer動態配置所產生的,用以服務ClientProcesses的需求不被包含在OracleInstance裏在ServerProcesses裏,尚包含另一個重要的記憶體結構-PGA(ProgramGlobalArea),存放著ClientProcesses與ServerProcesses間的重要資訊BackgroundProcesses用來管理OracleServer所需的一些系統常式,諸如資料庫的I/O、OracleProcesses的管理等包含於OracleInstance中22BackgroundProcessesOracle主要的BackgroundProcesses共有五個,只要有這五個BackgroundProcesses,OracleServer就可以正常地運作了,分別是:DatabaseWriter(DBWR)LogWriter(LGWR)SystemMonitor(SMON)ProcessMonitor(PMON)CheckpointProcess(CKPT)其它尚有Archiver(ARCH)、Recoverer(RECO)、Dispatcher(Dnnn)、Lock(LCKn)、JobQueue(SNPn)及QueueMonitor(QMNn)等BackgroundProcesses,它們主要是提供OracleServer更進階的管理。如ARCH,它可以提供比LGWR更強的資料庫回復能力。

23主要的BackgroundProcesses共有五個,只要DatabaseWriter(DBWR)DBWR主要是負責管理DatabaseBufferCache,將DatabaseBufferCache中修改過的資料,整批寫入DataFile裏,透過系統整批寫入的方式,可以提高整個系統的執行效率。當使用者執行DML指令修改相關資料欄位,並執行commit指令時,Oracle本身並不是直接將修改過的資料直接寫入DataFile裏,而是當DatabaseBufferCache的內容即將滿載或是經過一定的時間區隔(檢查點Checkpoint;CKPT),才將資料寫入DataFile中。藉由減少相關的I/O動作,以提高系統執行效能。使用write-ahead

的技術

24DatabaseWriter(DBWR)DBWR主要InstanceSGADatabasebuffer

cacheDBWnControlfilesDatafiles

RedologfilesDatabase25InstanceSGADatabaseDBWnControl由於在大型線上交易(OLTP)系統,其資料庫異動情況可能十分頻繁。因此:一個OracleServer可以有一個以上的DBWRBackgroundProcesses,可以依實際系統硬體與作業系統的特性,設定DB_WRITER_PROCESSES參數值,以獲得整個資料庫系統的最佳執行效能。當設定DB_WRITER_PROCESSES的內容值後,系統上有關DBWR的名稱將會變為DBWn,n可為0~9,如DBW0、DBW1、DBW2等。(系統預設只會啟動一個DBWn,即DBW0)。然而,在單一處理器的伺服器系統,配置額外的DBWn並無太多的實質幫助。26由於在大型線上交易(OLTP)系統,其資料庫異動情況可能LogWriter(LGWR)LGWR主要是負責將RedoLogBuffer的內容值,寫入online的RedoLogFile中。它與DBWR的運作方式不同點在於:DBWR在DatabaseBufferCache即將滿載或是經過一定的時間區隔,才會將資料寫入DataFile中,且是在有需要的時候才會對相關檔案做存取的動作LGWR是在資料庫的內容有異動且已被確認(commit)時,如insert、update、delete等,就會被觸發,將異動的情形記錄到onlineRedoLogFile中。因此,當資料庫crash時,就可以根據onlineRedoLogFile內容,對資料庫進行還原的動作。LGWR一樣可以透過設定LGWR_IO_SLAVES這個參數值,提供非同步I/O模式的功能。

27LogWriter(LGWR)LGWR主要是負責將RedLGWR之動作時機:當使用者確認(commit)某交易時,LGWR會遵循Write-aheadProtocol(先期寫入協定),將Redologbutter內的資料異動記錄寫入。下列幾種情況:自動週期性地動作,如:間隔時間為3秒(Checkpoint;CKPT)重置日誌緩衝區之剩餘空間不到2/3當DBWn回寫資料檔時,必要的時候LGWR也會動作(Write-aheadProtocol)28LGWR之動作時機:28InstanceSGADBWnRedologbufferControlfilesDatafiles

RedologfilesLGWRDatabase29InstanceSGADBWnRedologControl何謂Write-ahead?在DBWn回寫資料至DataFile之前,RedoLogBuffer內相關資料都必須完成寫入動作(即寫入RedoLogFile)。若DBWn發現某些重置紀錄尚未寫入RedoLogFile時,它會通知LGWR前來處理。等到LGWR將RedoLogBuffer的紀錄寫入完畢時,DBWn才會開始寫入資料檔。30何謂Write-ahead?30為何要把RedoLogFile稱為onlineRedoLogFile?因為Oracle把RedoLogFile分為兩部份:onlineRedoLogFilearchiveRedoLogFile這兩個都是負責記錄、追蹤整個資料庫的異動情形。不同的是,archiveRedoLogFile是onlineRedoLogFile的備份資料檔,由另一個BackgroundProcess-Archiver(ARCH)負責管理。在預設的情況下,ARCH是不會啟動的,而是由LGWR記錄資料庫的異動情形,將這些記錄資料寫到onlineRedoLogFile裏。如果OracleServer不幸掛了,此時的資料庫僅能復原onlineRedoLogFile裏有記錄的資料。可是,其他的呢?這時候就要靠ARCH將onlineRedoLogFile備份出來。31為何要把RedoLogFile稱為onlineRedSystemMonitor(SMON)如果是因為停電或是其它因素導致Oracle資料庫不正常被關閉,下一次啟動資料庫時將由SMON進行必要的資料庫修復動作。主要的工作有:執行一些資料庫必要的修復工作(如果有需要的話,SMON會使用onlineRedoLogFile的內容)。定時清除資料庫系統中一些不必要的殘餘物件,例如上次系統交易進行一半的資料或暫時性區間。執行整個系統儲存空間的管理,對於Tablespace上破碎的Extent,它會將這些較小的Extents予以合併,整理出一個較大的空間,以供系統日後的使用。32SystemMonitor(SMON)如果是因為停電或InstanceSGASMONControlfilesDatafiles

RedologfilesInstanceSGASMONDatabase33InstanceSGASMONControlfilesDaProcessMonitor(PMON)當某個UserProcess異常中止時,PMON會執行程序修復(ProcessRecovery)的動作,就是把已經失效的UserProcesses給趕出記憶體,並釋放該記憶體空間,留待系統日後使用釋放該Process之前使用的系統資源,避免Deadlock發生。

PMON和SMON一樣,都是由Oracle資料庫系統週期性自動執行,檢查整個資料庫系統的運作情形。34ProcessMonitor(PMON)當某個UserInstanceSGAPMONPGAarea35InstanceSGAPMON35Checkpoint(CKPT)在一個指定的時間區間裏,DBWR會對所有在DatabaseBufferCache所做的異動,將其結果寫入到相關的DataFiles以及RedoLogFiles、ControlFiles,這樣的動作,就稱為產生(設定)一個checkpoint事件。CKPTBackgroundProcess就是扮演著一個通知者的角色,經過一定的時間後,負責通知DBWR執行Checkpoint的動作。CKPT會在適常時候產生一個Checkpoint事件,其意義為:確保DatabaseBufferCache內經常被異動的資料也能夠定期被寫入硬碟的DataFile。(∵LRU演算法)萬一Oracle需要進行InstanceRecovery時,就不需要Checkpoint之前的Redorecord,可縮短資料庫動新啟動的時間。36Checkpoint(CKPT)在一個指定的時間區間裏,DInstanceSGADWW0RedoLogBufferLGWRInstanceSGADBWnLGWRCKPTControlfilesDatafiles

Redologfiles37InstanceSGADWW0RedoLogLGWRIns執行Checkpoint的時間區間,可以透過設定LOG_CHECKPOINT_INTERVAL這個參數,改變checkpoint的區間。然而,在設定LOG_CHECKPOINT_INTERVAL時,要注意的是:這個值設得太小的話,會造成系統額外I/O的負擔設得太大,超過onlineRedoLogFileswap的時間時,LOG_CHECKPOINT_INTERVAL的值又會變得沒有意義因為Oracle會在swaponlineRedoLogFile時,做一次checkpoint的動作。

38執行Checkpoint的時間區間,可以透過設定LOG_CHSummary縱觀以上的說明,現在我們可以勾勒出整個OracleInstance的整個架構圖:系統記憶體大致上的配置情形有DatabaseBufferCache、RedoLogBuffer、SharedPool、LargePool、JavaPool…等。在BackgroundProcesses部份,計有DBWR、LGWR、SMON、PMON、CKPT…等。BackgroundstructuresMemorystructuresSGARedolog

bufferDatabase

buffercacheSharedpoolDBWRSMONPMONCKPTLGWROthersDataDictionary

cacheLibrarycacheInstance39Summary縱觀以上的說明,現在我們可以勾勒出整個OrInstanceSGARedolog

buffercacheSharedpoolDataDict.

cacheLibrarycacheDBWRSMONPMONCKPTLGWROthersUser

processServer

processPGAControlfilesDatafiles

ArchivedlogfilesParameterfilePasswordfileRedologfilesDatabaseDatabase

buffercache40InstanceSGARedolog

buffercac漫談OracleDatabaseStructures41漫談41第一部份曾談到所謂的OracleDatabase可分為:邏輯結構實體結構兩部份,並做了概略的說明。如果您有心成為一個頂尖的OracleDBA,那麼不僅要對以上兩結構內的各個項目如數家珍般熟悉,還要瞭解其內部運作與相互關係才行。現在就分別針對這兩部份做深入的說明。42第一部份曾談到所謂的OracleDatabase可分為:4邏輯結構(LogicalDatabaseStructures)邏輯資料庫結構是Oracle所提供的一種抽象化的資料庫管理概念,透過一個「Mapping」的機制,管理OraclePhysicalDatabaseStructures。由外至內,我們可以看到:整個Database是由一個以上的Tablespace(表空間)組成;每個Tablespace存在著許多的Segment(區段);每個Segment內含許多的Extent(延伸區塊);最後,則是構成整個OracleDatabase的最小邏輯單位-block(區塊)。

43邏輯結構(LogicalDatabaseStruc4444Tablespace(表空間)

Oracle資料庫允許DBA自行規劃各種用途的資料表空間(Tablespace),以便存放不同型態的資料與資料庫物件。例如:存放Oracle系統資訊的「資料辭典」(datadictionary)可放在SYSTEM表空間;使用者所存放的相關資料可存放在USER表空間;所有資料表的索引(Index)則可單獨存放在INDX表空間。SYSTEM為Oracle資料庫預設的表空間;USER與INDX則是由DBA自行規劃建置的。45Tablespace(表空間)Oracle資料庫允許D一般來說,Oracle資料庫至少應規劃出五個以上的資料表空間,如下圖所示:46一般來說,Oracle資料庫至少應規劃出五個以上的資料表空間OracleServer其他相關的邏輯結構,均是經由Tablespace做統一集中的管理。Tablespace依其可存取的狀態,分為兩種狀態:on-line(在線)off-line(離線)再以其可存取的模式區分,可分為兩種式read-only(唯讀)read-write(讀寫)透過其存取狀態的控制以及存取模式的切換,將可使整個資料庫的管理更為方便。47OracleServer其他相關的邏輯結構,均是經由TabTablespace的特性OracleDatabase是由數個Tablespace所構成。一個Tablespace在同一時間點上,僅能類歸於一個Database。即,Database與Tablespace之間的關係,是呈現一對多的關係。除了SYSTEMTablespace與存在作用中(active)的RollbackSegment的Tablespace外,其餘的Tablespace均可在Database尚在執行的時候,將其選擇性的off-line或on-line,以利資料庫的管理。Tablespace能夠隨意切換其存取模式-read-only及read-write模式。48Tablespace的特性48Block(區塊)OracleDatabase邏輯空間概念中最小的邏輯空間單位,有關OracleServer對儲存空間所執行的配置(allocate)、讀取(read)及寫入(write),均是以此為單位,進行資料庫的種種操作。且在新建Oracle資料庫時就必須明確地定義。Oracle的區塊大小通常是數倍於“作業系統的磁碟讀寫區塊”(O.S.blocks)表示,Oracle在存取資料時是以自身的block為最小讀取單位,而不是以O.S.block為單位。它的參數設定透過參數DB_BLOCK_SIZE設定之。必須將DB_BLOCK_SIZE設定為O.S.blocks的整數倍。49Block(區塊)OracleDatabase邏輯空間概Extent(延伸區塊)雖然資料區塊是Oracle最小的資料讀寫單位,但值得注意的是:Oracle在“配置”儲存空間時,並不是以資料區塊為單位,而是改採「延伸區塊」的方式來配置空間。它是由許多連續的blocks所組成。一個Extent的相關資訊,僅能存在於同一個Datafile中。50Extent(延伸區塊)雖然資料區塊是Oracle最小的資好處:減少資料庫空間配置的動作假定您準備在Oracle資料庫內存放80KB的資料:當執行DDL指令建立資料庫物件時(例如:CREATETABLE…),Oracle會先配置出一連串的Blocks(即:Extent),其大小可為單一Block(假設8KB)的5倍。當這些資料區塊全部存滿資料後,視實際需要再配置第二個Extent(大小還是40KB)。只要兩次的空間配置動作就可以存放80KB的資料。反例如果Oracle每次只配置8KB的Block讓您存放資料,總共需要10次空間配置動作才能放滿80KB的資料,比較沒有效率由此可見,Extent的確有其存在的必要性。51好處:減少資料庫空間配置的動作51Segment(區段)Segment是僅次於Tablespace的邏輯空間單位。依照不同的資料處理性質,您可能需要在表空間內劃分出不同Segment,以存放不同資料。依其儲存、管理資料型態的不同,可大致分為:Datasegment(資料區段)Indexsegment(索引區段)Temporarysegment(暫時性區段)Rollbacksegment(退回區段)52Segment(區段)Segment是僅次於Tables從Oracle資料庫的「邏輯層面」來看,我們知道:資料是存放在每個Block內,資料讀寫動作也將以Block為單位。空間配置的動作則是引用Extent的概念。一個Extent由一連串的Blocks所構成。依實際資料量多寡,資料(或資料庫物件)由多個Extent所組成。Tablespace內可劃分不同的Segment;而每個Segment內又包含許多Extents。在每個Oracle資料庫內可規劃不同的Tablespace,用以存放不同型態的資料。53從Oracle資料庫的「邏輯層面」來看,我們知道:53實體結構(PhysicalDatabaseStructures)OracleServer實體結構概觀圖如下:整個OracleDatabase的實體結構,主要由三大部份所組成:ControlfilesDatafilesRedologfiles其它Passwordfile、Parameterfile則是關於OracleServerSecurity及資料庫啟動設定檔Archivedlogfiles則與DatabaseRecovery息息相關ControlfilesDatafiles

ArchivedlogfilesParameterfilePasswordfileRedologfilesOracleDatabase54實體結構(PhysicalDatabaseStru資料庫的啟動順序如下:55資料庫的啟動順序如下:55Passwordfile(密碼檔)

PasswordFile是由DBA建立的,儲存那些可以管理Oracle的登入密碼。可以用一個叫做ORAPWD的工具建立它。ORAPWD需要輸入三個參數:FILE-這是PasswordFile的儲存地方。PASSWORD-密碼,留意這個密碼也會同時成為SYS的密碼,如果之後您用SYS登入,發出ALTERUSER的變更密碼指令,那就會同時變更PasswordFile和SYS的密碼。ENTRIES-設定PasswordFile有多少個用戶,即該資料庫最多可擁有多少個Administrators。如果之後要增加這個數目,就要先把PasswordFile刪除,然後再建立,這個動作是有風險的。56Passwordfile(密碼檔)PasswordFParameterfile(參數檔)啟動OracleServer時,OracleServer會先配置一塊記憶體空間,供OracleInstance及Backgroundprocesses使用。在這之前,OracleServer會先讀取Parameterfile內的相關設定,做為配置記憶體空間與Backgroundprocesses時的設定值。Parameterfile是一個文字檔,一般均是使用文字編輯器編輯該檔,修改OracleInstance的設定值。前兩部份提及的許多參數,如:DB_BLOCK_BUFFERS、LOG_BUFFER、SHARED_POOL_SIZE等,均可以在Parameterfile中設定。參數名稱沒有大小寫之分,只是一般而言,均是以小寫字母為主。在改變Parameterfile的相關設定時,要重新啟動Oracle的相關服務,所做的改變才能反映在系統中。57Parameterfile(參數檔)啟動Oracle有關Parameterfile的Initializationparameters,依其使用時機、方式,大致可歸納成以下幾類:指定檔案所在位址及名稱,如CONTROL_FILES指定DatabaseControlFile的相關資訊。設定區間限制,如LOG_CHECKPOINT_INTERVAL設定DatabaseCheckpoint的時間間隔。指定有效的容量大小,如DB_BLOCK_BUFFERS設定DatabaseBufferCache記憶空間的大小。這類參數又稱為VariableParameter。58有關Parameterfile的Initializatio起始參數檔包含以下主要內容:SGA相關的組態設定其他各起始參數之名稱與設定值ControlFile的名稱與存放路徑RedoLogFile之相關設定59起始參數檔包含以下主要內容:59Controlfile(控制檔)

一個OracleDatabase至少要有一個Controlfile,記載著用來對整個OracleDatabase實體結構maintain與verify的相關資訊,如:Databasename。Datafiles、Redologfiles的名稱與所在位置。Database建立的Timestamp。每當資料庫被啟動時,Oracle會在Instance啟動後立刻讀取ControlFile內容,待所有資料庫實體組成檔案之所在資訊都收集完畢,資料庫才會被開啟。60Controlfile(控制檔)一個OracleDaControlfile掌控著所有OracleDatabase實體檔案結構的相關資訊,新增、刪除、修改Datafiles或Redologfiles,OracleServer均會自動維護Controlfile的內容資訊。為了避免控制檔毀損導致資料庫系統停擺,建議在實務應用上至少配置兩個ControlFile,存放在不同實體硬碟,並以mirror(映射)的方式,提供資料庫備援的機制。61Controlfile掌控著所有OracleDatabaParameterfile也有類似的系統資訊-DB_NAME。Parameterfile主要是給OracleInstance看的,透過CONTROL_FILES的指定,讓Instance(記憶體)與Database(實體的檔案結構)能夠彼此結合,提供資料庫的相關服務。因此,Parameterfile必須要搭配適當的Controlfile,否則將造成系統不可預期的錯誤。62Parameterfile也有類似的系統資訊-DB_NAMDatafile(資料檔)

DataFiles包含在資料庫中的實際資料(ActualData)。一個OracleDatabase至少會有一個以上的Datafile來存放資料。資料庫的資料大致上可以分為兩類:資料庫邏輯結構資訊(資料字典)資料字典包含資料庫邏輯結構的配置資訊,諸如Tables、Columns、Indexes、Tablespaces等。使用者資料63Datafile(資料檔)DataFiles包含在資一般說來,Datafile有以下幾個特點:一個Datafile僅能對應一個Tablespace。Datafile有其屬性設定的集合如Auto-extend的設定:當Datafile的容量不足時,OracleServer會自動配置一額外的空間供其使用。一個Tablespace可包含一或多個Datafile

一個Segment只能存在於同一個Tablespace中;而一個Tablespace可能包含一個以上的Datafile,因此,Segment是得以展延(Span)在其Tablespace所屬的Datafile內。64一般說來,Datafile有以下幾個特點:646565Datafile雖然是OracleServer用來存放大量資料的實體檔案結構,但它並不是以直接存取Datafile的模式,達成資料存取的目的,它是以類似Buffer的機制,間接存取Datafile,以提高系統的整體運作效能。讀取資料時,它會先將Datafile的資料載入至Databasebuffercache,使用者實際上是經由Databasebuffercache中讀取資料的。寫入資料時,也是先對Databasebuffercache做寫入的動作,再經由DBWRn在適當的時機下,寫回至Datafile。66Datafile雖然是OracleServer用來存放大Redologfile(重置日誌檔)

Redologfile也就是大家俗稱的交易日誌(Transactionlog)。負責記錄資料庫內任何資料處理的情況(即所有的異動情形,如:新增、修改、刪除,查詢動作除外)。當資料被異動時,所有異動紀錄會先保留在記憶體的Redologbuffer,並在適當時機由LGWR這個Backgroundprocess寫入至硬碟上的Redologfile。它主要的功能是當資料庫毀損時,提供資料庫回復的相關資訊,這個動作又稱為RollForward。67Redologfile(重置日誌檔)Redolog與Controlfile不同的是,Controlfile記錄的是資料庫實體檔案結構,而Redologfile則是記錄著每一筆資料庫的異動資訊。由二個以上的Redologfile交替使用,當其中一個Redologfile的空間被使用完後,OracleServer會自動swap到另一個Redologfile,此動作稱為日誌切換(logswap)。在一個大型線上交易(OLTP)系統下,如果資料交易量十分頻繁,建議不妨配置五個以上重置日誌檔。68與Controlfile不同的是,Controlfile需特別注意的是,所有的Redologfile均是交替使用的。因此,假設系統上有二個Redologfile:當第一個Redologfile的儲存空間已滿時,OracleServer會自動swap到第二個Redologfile。當第二個Redologfile也滿了,OracleServer會自動再swap到第一個Redologfile,先前記錄在第一個Redologfile的異動記錄就會被覆蓋掉。以cycle的方式重覆使用。這時,就會發生系統回復的盲點:先前的異動記錄被覆蓋掉了。關於這點,OracleServer提供另外一個機制-Archivedlogfiles,相對於Onlineredologfile,Offline

archivedlogfiles可以提供更好的資料庫回復機制。69需特別注意的是,所有的Redologfile均是交替使用Archivedlogfile(封存日誌檔)

又稱Archivedredologfile(封存重置日誌檔)

Archivedlogfile對OracleDatabase而言,是屬於Optional(非必要)的選項,主要是提供資料庫Backup及Recovery的機制。OracleDatabase提供兩種控制Redologfile的模式如下:ARCHIVELOG:Redologfile在被重覆使用之前,會先存放至Archivedlogfiles。NOARCHIVELOG:Redologfile不會有任何Archive的額外動作。70Archivedlogfile(封存日誌檔)又稱ArSummaryOracleDatabase中實體資料庫結構與邏輯資料庫結構之間的關係:71SummaryOracleDatabase中實體資料庫事實上,OracleDatabase中的邏輯資料庫結構與其實體資料庫結構中的Datafile存在著較大的依存關係,因為:除了Datafile與資料庫中的資料物件有較大的關係外,其他諸如Passwordfile、Controlfile、Redologfile、Archivedredologfile等,均是用以提供資料庫系統的安全性、一致性以及回復性的應用上。

72事實上,OracleDatabase中的邏輯資料庫結構與其Oracle系統架構基本概念73Oracle系統架構基本概念1Outline

Oracle系統架構概觀Overview

OracleInstanceOracleDatabaseOtherProcesses漫談OracleInstance記憶體結構BackgroundProcesses

漫談OracleDatabaseStructuresPhysicalDatabaseStructuresLogicalDatabaseStructures74OutlineOracle系統架構概觀2Oracle系統架構概觀關於Oracle系統架構,是非常重要的基礎觀念,正所謂「君子務本,本立而道生」,有了踏實的基礎觀念之後,才能在往後學習Oracle的路上,無往不利75Oracle系統架構概觀3電腦系統OverviewOracleServer主要是由OracleInstance與Database所組成,透過ServerProcess與UserProcess之間的交互運作,藉以達成使用者交付執行的工作。

OracleServerOracleInstanceDatabaseUserProcessesServerProcessesPGA

Query76電腦系統OverviewOracleServer主要例如,使用者可能想要在OracleServer上查詢一筆人事資料,使用者將相關的SQL敘述輸入系統中,此時系統會產生相對應的UserProcess與ServerProcess,由ServerProcess負責向OracleServer溝通,並將符合使用者所需的資料,從OracleServer送至UserProcess,以完成該使用者下達的request。77例如,使用者可能想要在OracleServer上查詢一筆人OracleInstance(Oracle資料庫引擎)Oracle資料庫中的任何動作都和它有關,是OracleDB的心臟地帶。OracleInstance主要包含:

backgroundprocess(背景處理程序)是一群常駐的服務常式(serviceroutine),執行I/OProcess與非OracleProcess的監控管理,針對目前的使用者所提出的request執行一些一般性的工作。每一個Process專責於一至兩項的工作SystemGlobalArea(SGA;系統全域區)用來存放資料庫系統相關資訊的一塊共享記憶體資料區域,讓backgroundprocess得以利用這些系統資訊,以提供適當的服務,處理外部的userrequest。78OracleInstance(Oracle資料庫引擎)O由於OracleInstance掌控著處理OracleDatabase所有運作的相關資訊。因此,當要存取或操作OracleDatabase裏的資料時,必須先啟動OracleInstance,才能對OracleDatabase的內容加以處理。

當OracleInstance啟動時,電腦系統會先配置一塊記憶體空間給SGA(SystemGlobalArea),並且載入相關的backgroundprocess。

79由於OracleInstance掌控著處理OracleDOracleDatabaseOracleDatabase可分為兩個部份來說明:實體結構邏輯結構

80OracleDatabaseOracleDatabas實體結構OracleDatabase的實體結構部份是由一個個的檔案所組合,主要的檔案包括Datafiles(資料檔)RedoLogfiles(重置日誌檔)-onlineControlfiles(控制檔)另外尚有:Passwordfile(密碼檔)Parameterfile(起始參數檔)ArchivedRedoLogfiles(重置日誌封存檔)-offline81實體結構OracleDatabase的實體結構部份是由一個ControlfilesDatafilesArchivedlogfilesParameterfilePasswordfileRedologfilesDatabase82ControlfilesDatafilesArchiv邏輯結構OracleDatabase的邏輯結構部份,主要有Tablespace(表格空間)Segment(區段)Extent(延伸區塊)Block(區塊)83邏輯結構OracleDatabase的邏輯結構部份,主要有OtherProcesses不屬於OracleInstance內的Process皆稱為OtherProcess。是User和應用程式要連接OracleDBServer的重要橋樑。如UserProcess、ServerProcess等主要是反應使用者下達的request(即SQL敘述),將其轉化為OracleServer能看得懂的相關指令,從OracleDatabase裏抓取資料,以反映使用者需求的資料。在ServerProcess中還有一個相當重要的資料結構-PGA(ProgramGlobalArea):PGA是一個memorybuffer,存放相關ServerProcess的資料與控制資訊。當ServerProcess被呼叫啟動後,OracleServer會為其建立一個所屬的PGA,使用者下達的SQL敘述,就是存放在這裏的。

84OtherProcesses不屬於OracleInst漫談OracleInstance85漫談OracleInstance13第一部份我們曾談到所謂的OracleInstance可分為:SGA(SystemGlobalArea)Background

Processes兩部份,並做了概略的說明。現在就分別針對SGA與BackgroundProcesses做更完整深入的說明。

86第一部份我們曾談到所謂的OracleInstance可分為記憶體結構SGA是OracleServer在系統上所建立的一塊記憶體區塊,OracleServer利用這塊記憶體結構,協同Oracle的各種Processes來完成使用者所交付的工作。SGA主要是由幾種不同的資料區塊所組成-DatabaseBufferCacheRedoLogBufferSharedPoolLargePoolJavaPool其它(如:Cursors…等)SGADatabaseBufferCacheRedoLogBufferSharedPoolLargePoolJavaPoolOthers87記憶體結構SGA是OracleServer在系統上所建DatabaseBufferCache(資料庫緩衝快取區)資料庫系統擷取資料時的一個快取空間,其用途在於有效減少存取資料時造成的磁碟讀寫動作。(到硬碟從事I/O是很耗時的工作!!)我們可以透過設定DB_BLOCK_BUFFERS這個參數值來設定DatabaseBufferCache的大小。在Oracle的DatabaseBufferCache中,尚有一些sub-caches:DB_CACHE_SIZEDB_KEEP_CACHE_SIZEDB_RECYCLE_CACHE_SIZE我們可以透過DB_CACHE_ADVICE這個參數,藉由statistics的方式來對不同的cachesize做預設。指令:Altersystemsetdb_cache_advice=on88DatabaseBufferCache(資料庫緩衝快取Oracle用所謂的LRU(LeastRecentlyUsed)演算法來管理這塊記憶體空間。LRU:當這塊記憶體空間滿載時,OracleServer將只保留最近有被使用過的資料,最不常用的資料則寫回磁碟中,並將該資料所佔用的記憶體空間釋放出來。由於DatabaseBufferCache關係著OracleServer的I/O動作頻繁與否,因此如何管理及設定DatabaseBufferCache的大小,對於OracleServer的效能調校,是相當重要的一項課題。89Oracle用所謂的LRU(LeastRecentlyRedoLogBuffer(重置日誌緩衝區)當資料庫的內容有所異動時,RedoLogBuffer會記錄其相關異動的情形:做了什麼改變改變後的舊資料與新資料經過一定的時間週期或者是RedoLogBuffer滿載時,OracleServer會將RedoLogBuffer的內容寫到RedoLogFile裏,以追蹤整個資料庫的使用情形。當OracleServer不幸當掉的話,就能利用這些記錄下來的資訊,進行資料庫的復原(Recovery)。有關RedoLogBuffer的大小設定,可以透過設定參數LOG_BUFFER,改變RedoLogBuffer的大小。

90RedoLogBuffer(重置日誌緩衝區)當資料庫的SharedPool(共享區)當使用者將SQL、PL/SQL等操作指令送至Oracle資料庫後,系統會先解析(Parse)語法是否正確。解析時,下列兩項資料將會放入SharedPool中:解析時所需要用到的相關資訊解析後的結果當有不同的使用者執行相同的SQL指令,就可以共用SharedPool中解析好的結果,以加速SQL指令執行的速度。SharedPool內包含數種不同的區域,主要有下列兩類:DataDictionaryCache–存放解析時所需要的相關資訊,以供查詢之用LibraryCache–存放各類指令解析後的結果,以供重覆使用SharedPool亦是採LRU的記憶體管理演算法。SharedPool的大小設定,是由SHARED_POOL_SIZE這個參數來控制

91SharedPool(共享區)當使用者將SQL、PL/SLargePool(大型區)

LargePool是Oracle針對一些需要大量記憶體空間的資料庫處理與運算工作所提供的一個額外選項,它可以讓SGA配置一個較大的記憶體空間,提供給處理Oracle的backup/restore、I/O、執行Oracle復原管理程式RMAN、…等。透過指定LARGE_POOL_SIZE這個參數,設定LargePool的大小。

92LargePool(大型區)LargePool是OrJavaPool(Java區)當使用者有使用Java時,OracleServer利用這塊記憶體空間,存放及Parse所使用的JavaCode,藉以提供Oracle與Internet更高的整合性。透過指定JAVA_POOL_SIZE這個參數,來改變JavaPool的大小。93JavaPool(Java區)當使用者有使用Java時,BackgroundProcessesOracleServer所提供的Processes可分為兩類:ServerProcesses

用以服務ClientProcesses,根據ClientProcesses的需求,由OracleServer動態配置所產生的,用以服務ClientProcesses的需求不被包含在OracleInstance裏在ServerProcesses裏,尚包含另一個重要的記憶體結構-PGA(ProgramGlobalArea),存放著ClientProcesses與ServerProcesses間的重要資訊BackgroundProcesses用來管理OracleServer所需的一些系統常式,諸如資料庫的I/O、OracleProcesses的管理等包含於OracleInstance中94BackgroundProcessesOracle主要的BackgroundProcesses共有五個,只要有這五個BackgroundProcesses,OracleServer就可以正常地運作了,分別是:DatabaseWriter(DBWR)LogWriter(LGWR)SystemMonitor(SMON)ProcessMonitor(PMON)CheckpointProcess(CKPT)其它尚有Archiver(ARCH)、Recoverer(RECO)、Dispatcher(Dnnn)、Lock(LCKn)、JobQueue(SNPn)及QueueMonitor(QMNn)等BackgroundProcesses,它們主要是提供OracleServer更進階的管理。如ARCH,它可以提供比LGWR更強的資料庫回復能力。

95主要的BackgroundProcesses共有五個,只要DatabaseWriter(DBWR)DBWR主要是負責管理DatabaseBufferCache,將DatabaseBufferCache中修改過的資料,整批寫入DataFile裏,透過系統整批寫入的方式,可以提高整個系統的執行效率。當使用者執行DML指令修改相關資料欄位,並執行commit指令時,Oracle本身並不是直接將修改過的資料直接寫入DataFile裏,而是當DatabaseBufferCache的內容即將滿載或是經過一定的時間區隔(檢查點Checkpoint;CKPT),才將資料寫入DataFile中。藉由減少相關的I/O動作,以提高系統執行效能。使用write-ahead

的技術

96DatabaseWriter(DBWR)DBWR主要InstanceSGADatabasebuffer

cacheDBWnControlfilesDatafiles

RedologfilesDatabase97InstanceSGADatabaseDBWnControl由於在大型線上交易(OLTP)系統,其資料庫異動情況可能十分頻繁。因此:一個OracleServer可以有一個以上的DBWRBackgroundProcesses,可以依實際系統硬體與作業系統的特性,設定DB_WRITER_PROCESSES參數值,以獲得整個資料庫系統的最佳執行效能。當設定DB_WRITER_PROCESSES的內容值後,系統上有關DBWR的名稱將會變為DBWn,n可為0~9,如DBW0、DBW1、DBW2等。(系統預設只會啟動一個DBWn,即DBW0)。然而,在單一處理器的伺服器系統,配置額外的DBWn並無太多的實質幫助。98由於在大型線上交易(OLTP)系統,其資料庫異動情況可能LogWriter(LGWR)LGWR主要是負責將RedoLogBuffer的內容值,寫入online的RedoLogFile中。它與DBWR的運作方式不同點在於:DBWR在DatabaseBufferCache即將滿載或是經過一定的時間區隔,才會將資料寫入DataFile中,且是在有需要的時候才會對相關檔案做存取的動作LGWR是在資料庫的內容有異動且已被確認(commit)時,如insert、update、delete等,就會被觸發,將異動的情形記錄到onlineRedoLogFile中。因此,當資料庫crash時,就可以根據onlineRedoLogFile內容,對資料庫進行還原的動作。LGWR一樣可以透過設定LGWR_IO_SLAVES這個參數值,提供非同步I/O模式的功能。

99LogWriter(LGWR)LGWR主要是負責將RedLGWR之動作時機:當使用者確認(commit)某交易時,LGWR會遵循Write-aheadProtocol(先期寫入協定),將Redologbutter內的資料異動記錄寫入。下列幾種情況:自動週期性地動作,如:間隔時間為3秒(Checkpoint;CKPT)重置日誌緩衝區之剩餘空間不到2/3當DBWn回寫資料檔時,必要的時候LGWR也會動作(Write-aheadProtocol)100LGWR之動作時機:28InstanceSGADBWnRedologbufferControlfilesDatafiles

RedologfilesLGWRDatabase101InstanceSGADBWnRedologControl何謂Write-ahead?在DBWn回寫資料至DataFile之前,RedoLogBuffer內相關資料都必須完成寫入動作(即寫入RedoLogFile)。若DBWn發現某些重置紀錄尚未寫入RedoLogFile時,它會通知LGWR前來處理。等到LGWR將RedoLogBuffer的紀錄寫入完畢時,DBWn才會開始寫入資料檔。102何謂Write-ahead?30為何要把RedoLogFile稱為onlineRedoLogFile?因為Oracle把RedoLogFile分為兩部份:onlineRedoLogFilearchiveRedoLogFile這兩個都是負責記錄、追蹤整個資料庫的異動情形。不同的是,archiveRedoLogFile是onlineRedoLogFile的備份資料檔,由另一個BackgroundProcess-Archiver(ARCH)負責管理。在預設的情況下,ARCH是不會啟動的,而是由LGWR記錄資料庫的異動情形,將這些記錄資料寫到onlineRedoLogFile裏。如果OracleServer不幸掛了,此時的資料庫僅能復原onlineRedoLogFile裏有記錄的資料。可是,其他的呢?這時候就要靠ARCH將onlineRedoLogFile備份出來。103為何要把RedoLogFile稱為onlineRedSystemMonitor(SMON)如果是因為停電或是其它因素導致Oracle資料庫不正常被關閉,下一次啟動資料庫時將由SMON進行必要的資料庫修復動作。主要的工作有:執行一些資料庫必要的修復工作(如果有需要的話,SMON會使用onlineRedoLogFile的內容)。定時清除資料庫系統中一些不必要的殘餘物件,例如上次系統交易進行一半的資料或暫時性區間。執行整個系統儲存空間的管理,對於Tablespace上破碎的Extent,它會將這些較小的Extents予以合併,整理出一個較大的空間,以供系統日後的使用。104SystemMonitor(SMON)如果是因為停電或InstanceSGASMONControlfilesDatafiles

RedologfilesInstanceSGASMONDatabase105InstanceSGASMONControlfilesDaProcessMonitor(PMON)當某個UserProcess異常中止時,PMON會執行程序修復(ProcessRecovery)的動作,就是把已經失效的UserProcesses給趕出記憶體,並釋放該記憶體空間,留待系統日後使用釋放該Process之前使用的系統資源,避免Deadlock發生。

PMON和SMON一樣,都是由Oracle資料庫系統週期性自動執行,檢查整個資料庫系統的運作情形

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論