Oracle體系結構 轉自: http://blog.csdn.net/truexf/archive/2006/07/05/881726.aspx

第一篇 Oracle架構總覽

先讓我們來看一張圖


 
這張就是Oracle 9i的架構全圖。看上去,很繁雜。是的,是這樣的。現在讓我們來梳理一下:
一、數據庫、表空間、數據文件
1.數據庫
數據庫
是數據集合。Oracle是一種數據庫管理系統,是一種關係型的數據庫管理系統。
通常情況了我們稱的“數據庫”,並不僅指物理的數據集合,他包含物理數據、數據庫管理系統。也即物理數據、內存、操作系統進程的組合體。

數據庫的數據存儲在表中。數據的關係由列來定義,即通常我們講的字段,每個列都有一個列名。數據以行(我們通常稱爲記錄)的方式存儲在表中。表之間可以相互關聯。以上就是關係模型數據庫的一個最簡單的描述。

當然,Oracle也是提供對面象對象型的結構數據庫的最強大支持,對象既可以與其它對象建立關係,也可以包含其它對象。關於OO型數據庫,以後利用專門的篇幅來討論。一般情況下我們的討論都基於關係模型。

2.表空間、文件
無論關係結構還是OO結構,Oracle數據庫都將其數據存儲在文件中。數據庫結構提供對數據文件的邏輯映射,允許不同類型的數據分開存儲。這些邏輯劃分稱作表空間。

表空間(tablespace)是數據庫的邏輯劃分,每個數據庫至少有一個表空間(稱作SYSTEM表空間)。爲了便於管理和提高運行效率,可以使用一些附加表空間來劃分用戶和應用程序。例如:USER表空間供一般用戶使用,RBS表空間供回滾段使用。一個表空間只能屬於一個數據庫

每個表空間由同一磁盤上的一個或多個文件組成,這些文件叫數據文件(datafile)。一個數據文件只能屬於一個表空間。在Oracle7.2以後,數據文件創建可以改變大小。創建新的表空間需要創建新的數據文件。

數據文件一旦加入到表空間中,就不能從這個表空間中移走,也不能與其它表空間發生聯繫。

如果數據庫存儲在多個表空間中,可以將它們各自的數據文件存放在不同磁盤上來對其進行物理分割。在規劃和協調數據庫I/O請求的方法中,上述的數據分割是一種很重要的方法。數據庫、表空間、文件之間的關係如下圖所示:
 

二、數據庫實例
爲了訪問數據庫中的數據,Oracle使用一組所有用戶共享的後臺進程。此外,還有一些存儲結構(統稱爲System Gloabl Area,即SGA),用來存儲最近從數據庫查詢的數據。數據塊緩存區和SQL共享池(Shared SQL Pool)是SGA的最大部分,一般佔SGA內存的95%以上。通過減少對數據文件的I/O次數,這些存儲區域可以改善數據庫的性能。

數據庫實例(instance)也稱作服務器(server),是用來訪問數據庫文件集的存儲結構及後臺進程的集合。一個數據庫可以被多個實例訪問(這是Oracle並行服務器選項)。實例與數據庫的關係如下圖所示:
 
決定實例大小及組成的參數存儲的init.ora文件中(在9i中是spfile)。實例啓動時需要讀這個文件,並且在運行時可以由數據庫管理員修改。對該文件的任何修改都只有在下一次啓動時才啓作用。實例的init.ora文件件通常包含實例的名字:如果一個實例名爲orcl,那麼init.ora文件通常被命名爲initorcl.ora。另一個配置文件config.ora用來存放在數據庫創建後就不再改變的變量值(如數據庫的塊大小)。實例的config.ora文件通常也包含該實例的名字:如果實例的名字爲orcl,則config.ora一般將被命名爲configorcl.ora。爲了便於使用config.ora文件的設置值,在實例的init.ora文件中,該文件必須通過IFILE參數作爲包含文件列出。
-----------------------------------------
注:關於初始化參數文件,再另起篇幅詳細介紹。
-----------------------------------------

通過以上對數據庫及實例的介紹,Oracle數據庫結構可分爲三個範疇:
數據庫內部結構(如表)
存儲區內部的結構(包括共享存儲區和進程)
數據庫的外部結構

三、數據庫的內部結構
即Oracle數據的邏輯表現層,也稱oracle schema,包括以下這些內容:
表、列、約束條件、數據類型(包括抽象數據類型)
分區與子分區
用戶與模式
索引、簇和散列簇
視圖
序列
過程、函數、軟件包和觸發器
同義詞
權限及角色
數據庫鏈接
段、盤區和塊
回滾段
快照與顯形圖
各部分的具體介紹以後將在Oralce schema欄目中討論。

四、Oracle內部存儲結構
包括內存緩衝池與後臺進程:
1.系統全局區(SGA),主要包括:
a. 數據塊緩存區
數據塊緩存區(data block buffer cache)是S G A中的一個高速緩存區域,用來存儲從數據庫中讀取數據段的數據塊(如表、索引和簇)。數據塊緩存區的大小由數據庫服務器i n i t . o r a文件中的DB_LOCK_BUFFERS參數決定(用數據庫塊的個數表示)。在調整和管理數據庫時,調整數據塊緩存區的大小是一個重要的部分。

因爲數據塊緩存區的大小固定,並且其大小通常小於數據庫段所使用的空間,所以它不能一次裝載下內存中所有的數據庫段。通常,數據塊緩存區只是數據庫大小的1 %~2 %,O r a c l e使用最近最少使用( L R U,least recently used)算法來管理可用空間。當存儲區需要自由空間時,最近最少使用塊將被移出,新數據塊將在存儲區代替它的位置。通過這種方法,將最頻繁使用的數據保存在存儲區中。

然而,如果S G A的大小不足以容納所有最常使用的數據,那麼,不同的對象將爭用數據塊緩存區中的空間。當多個應用程序共享同一個S G A時,很有可能發生這種情況。此時,每個應用的最近使用段都將與其他應用的最近使用段爭奪S G A中的空間。其結果是,對數據塊緩存區的數據請求將出現較低的命中率,導致系統性能下降。

b. 字典緩存區
數據庫對象的信息存儲在數據字典表中,這些信息包括用戶帳號數據、數據文件名、段名、盤區位置、表說明和權限,當數據庫需要這些信息(如檢查用戶查詢一個表的授權)時,將讀取數據字典表並且將返回的數據存儲在字典緩存區的S G A中。

數據字典緩存區通過最近最少使用(LRU) 算法來管理。字典緩存區的大小由數據庫內部管理。字典緩存區是S Q L共享池的一部分,共享池的大小由數據庫文件i n i t . o r a中的S H A R E D_PO O L_S I Z E參數來設置。

如果字典緩存區太小,數據庫就不得不反覆查詢數據字典表以訪問數據庫所需的信息,這些查詢稱爲循環調用(recuesive call),這時的查詢速度相對字典緩存區獨立完成查詢時要低。

c. 重做日誌緩衝區
重做項描述對數據庫進行的修改。它們寫到聯機重做日誌文件中,以便在數據庫恢復過程中用於向前滾動操作。然而,在被寫入聯機重做日誌文件之前,事務首先被記錄在稱作重做日誌緩衝區(redo log buff e r )的S G A中。數據庫可以週期地分批向聯機重做日誌文件中寫重做項的內容,從而優化這個操作。

重做日誌緩衝區的大小(以字節爲單位)由i n i t . o r a文件中的L O G _ B U F F E R參數決定。

d. SQL共享池
S Q L共享池存儲數據字典緩存區及庫緩存區(library cache),即對數據庫進行操作的語句信息。當數據塊緩衝區和字典緩存區能夠共享數據庫用戶間的結構及數據信息時,庫緩存區允許共享常用的S Q L語句。

S Q L共享池包括執行計劃及運行數據庫的S Q L語句的語法分析樹。在第二次運行(由任何用戶)相同的S Q L語句時,可以利用S Q L共享池中可用的語法分析信息來加快執行速度。

S Q L共享池通過L R U算法來管理。當S Q L共享池填滿時,將從庫緩存區中刪掉最近最少使用的執行路徑和語法分析樹,以便爲新的條目騰出空間。如果S Q L共享池太小,語句將被連續不斷地再裝入到庫緩存區,從而影響操作性能。

S Q L共享池的大小(以字節爲單位)由i n i t . o r a文件參數S H A R E D _ P O O L _ S I Z E決定。

e. 大池
大池( L a rge Pool)是一個可選內存區。如果使用線程服務器選項或頻繁執行備份/恢復操作,只要創建一個大池,就可以更有效地管理這些操作。大池將致力於支持S Q L大型命令。利用大池,就可以防止這些S Q L大型命令把條目重寫入S Q L共享池中,從而減少再裝入到庫緩存區中的語句數量。大池的大小(以字節爲單位)通過init. ora文件的L A R G E _ P O O L _ S I Z E參數設置,用戶可以使用i n i t . o r a文件的L A R G E _ P O O L _ M I N _ A L L O C參數設置大池中的最小位置。O r a c l e 8 i已不用這個參數。

作爲使用L a rge Pool 的一種選擇方案,可以用i n i t . o r a文件的S H A R E D _ P O O L _R E S E RV E D _ S I Z E參數爲S Q L大型語句保留一部分S Q L共享池。

f. Java 池
由其名字可知, Java 池爲J a v a命令提供語法分析。Java 池的大小(以字節爲單位)通過在O r a c l e 8 i引入的i n i t . o r a文件的J AVA _ P O O L _ S I Z E參數設置。i n i t . o r a文件的J AVA _ P O O L _ S I Z E參數缺省設置爲1 0 M B。

g. 多緩衝池
可以在S G A中創建多個緩衝池,能夠用多個緩衝池把大數據集與其他的應用程序分開,以減少它們爭奪數據塊緩存區內相同資源的可能性。對於創建的每一個緩衝池,都要規定其L R U鎖存器的大小和數量。緩衝區的數量必須至少比L R U鎖存器的數量多5 0倍。

創建緩衝池時,需要規定保存區(keep area)的大小和再循環區(recycle area)的大小。與S Q L共享池的保留區一樣,保存區保持條目,而再循環區則被頻繁地再循環使用。可以通過B U F F E R _ P O O L _ K E E P參數規定來保存區的大小。例如:
保存和再循環緩衝池的容量減少了數據塊緩衝存儲區中的可用空間(通過D B _ B L O C K _B U F F E R S參數設置)。對於使用一個新緩衝池的表,通過表的s t o r a g e子句中的b u ff e r _ p o o l參數來規定緩衝池的名字。例如,如果需要從內存中快速刪除一個表,就把它賦予R E C Y C L E池。缺省池叫作D E FA U LT,這樣就能在以後用alter table命令把一個錶轉移到D E FA U LT池。


2.程序全局區( P G A )。
程序全局區( P G A,Program Global Area)是存儲區中的一個區域,由一個O r a c l e用戶進程
所使用,P G A中的內存不能共享。


3.環境區

4.後臺進程
數據庫擁有多個後臺進程,其數量取決於數據庫的配置。這些進程由數據庫管理,它們只需要進行很少的管理。
每個後臺進程創建一個跟蹤文件。在實例操作期間保存跟蹤文件。後臺進程跟蹤文件的命名約定和位置隨操作系統和數據庫版本而不同。一般來說,跟蹤文件含有後臺進程名或後臺進程的操作系統進程ID。可以設置初始化參數文件的BACKGROUND_DUMP_DEST參數來規
定後臺進程跟蹤文件的位置,但是有些版本的O r a c l e忽略這種設置。排除數據庫故障時,跟蹤文件就顯得非常重要。影響後臺進程的嚴重問題通常記錄在數據庫的警告日誌上。
警告日誌通常位於BACKGROUND_DUMP_DEST目錄下。一般來說,這個目錄是
ORACLE_BASE目錄下的/ADMIN/INSTANCE_NAME/BDUMP目錄。

a. SMON
當啓動一個數據庫時, SMON(System Monitor,系統監控程序)進程執行所需的實例恢復
操作(使用聯機重做日誌文件),它也可以清除數據庫,取消系統不再需要的事務對象。
S M O N的另一個用途是:將鄰接的自由盤區組成一個較大的自由盤區。對於某些表空間,數據庫管理員必須手工執行自由空間合併;S M O N只合並表空間中的自由空間,這些表空間的缺省
p c t i n c r e a s e存儲值爲非零。

b. PMON
P M O N (進程監控程序)後臺進程清除失敗用戶的進程,釋放用戶當時正在使用的資源。當一個持有鎖的進程被取消時,其效果是顯而易見的, P M O N負責釋放鎖並使其可以被其他用戶使用。同S M O N一樣,P M O N週期性地喚醒檢測它是否需要被使用。

c. DBWR
D B W R (數據庫寫入程序)後臺進程負責管理數據塊緩存區及字典緩存區的內容。它以批方式把修改塊從S G A寫到數據文件中。

儘管每一個數據庫實例只有一個S M O N和一個P M O N進程在運行,但是根據平臺和操作系統的不同,用戶可以同時擁有多個D B W R進程。使用多個D B W R進程有助於在進行大的操作期間減少D B W R 中的衝突。所需D B W R 進程的數量由數據庫的i n i t . o r a 文件中的D B _ W R I T E R _ P R O C E S S E S參數決定。如果系統支持異步I / O,可以用多個DBWR I/O 從( s l a v e )進程創建一個D B W R進程。DBWR I/O 從進程的數量由i n i t . o r a文件的D B W R _ I / O _ S L AV E S參數設置。

如果創建多個D B W R進程,這些進程就不叫做D B W R,它們將有一個數字分量。例如,如果創建5個D B W R進程,進程的操作系統名就可能是D B W 0、D B W 1、D B W 2、D B W 3和D B W 4。

d. LGWR
L G W R (日誌寫入程序)後臺進程負責把聯機重做日誌緩衝區的內容寫入聯機重做日誌文件。L G W R分批將日誌條目寫入聯機重做日誌文件。重做日誌緩衝區條目總是包含着數據庫的最新狀態,這是因爲D B W R進程可以一直等待到把數據塊緩衝區中的修改數據塊寫入到數據文件中。

L G W R是數據庫正常操作時唯一向聯機重做日誌文件寫入內容並從重做日誌緩衝區直接讀取內容的進程。與D B W R對數據文件執行的完全隨機訪問相反,聯機重做日誌文件以序列形式寫入。如果聯機重做日誌文件是鏡像文件, L G W R同時向鏡像日誌文件中寫內容。

對於O r a c l e 8,可以創建多個LGWR I/O從進程以改善向聯機重做日誌文件的寫入性能,其個數由數據庫的i n i t . o r a文件的L G W R _ I O _ S L AV E S參數決定。

在O r a c l e 8 i中,這個參數已不能用, LGWR I/O從進程由D B W R _ I O _ S L AV E S設置值派生
而來。

e. CKPT
C K P T (檢查點進程)用來減少執行實例恢復所需的時間。檢查點使D B W R把上一個檢查點以後的全部已修改數據塊寫入數據文件,並更新數據文件頭部和控制文件以記錄該檢查點。

當一個聯機重做日誌文件被填滿時,檢查點進程會自動出現。可以用數據庫實例的i n i t . o r a文件中的L O G _ C H E C K P O I N T _ I N T E RVA L參數來設置一個頻繁出現的檢查點。

C K P T後臺進程把早期數據庫版本中L G W R的兩個功能(向檢查點發信號及複製日誌內容)分成兩個後臺進程。當數據庫實例的i n i t . o r a文件中的C H E C K P O I N T _ P R O C E S S參數被設置爲T R U E時,就可以建立C K P T後臺進程。

f. ARCH
L G W R後臺進程以循環方式向聯機重做日誌文件寫入;當填滿第一個日誌文件後,就開始向第二個日誌文件寫入;第二個日誌文件填滿後,再向第三個日誌文件寫入。一旦最後一個重做日誌文件填滿, L G W R就開始重寫第一個重做日誌文件的內容。

當O r a c l e以A R C H I V E L O G (歸檔日誌)模式運行時,數據庫在開始重寫重做日誌文件之前先對其進行備份。這些歸檔的重做日誌文件通常寫入一個磁盤設備中。也可以直接寫入磁帶設備中,但是這往往要增加操作員的勞動強度。

這種歸檔功能由A R C H (歸檔進程)後臺進程完成,利用該性能的數據庫在處理大數據事務時將遇到重做日誌磁盤衝突問題,這是因爲當L G W R準備寫入一個重做日誌文件時, A R C H正準備讀取另一個。如果歸檔日誌目標磁盤寫滿,數據庫還將遇到數據庫鎖定問題。此時,A R C H凍結,禁止L G W R寫入;從而禁止在數據庫中出現進一步的事務處理;這種情況一起延續到歸檔重做日誌文件的空間清空爲止。

對於O r a c l e 8,可以創建多個ARCH I/O從進程以改善對歸檔重做日誌文件的寫入功能。在O r a c l e 8 . 0中,ARCH I/O從進程的個數由數據庫的i n i t . o r a文件中的A R C H _ I O _ S L AV E S參數決定。在O r a c l e 8 i中,這個參數已不能用, A R C H _ I O _ S L AV E S設置值由D B W R _ I O _ S L AV E S設置值派生。

g. RECO
R E C O (恢復進程)後臺進程用於解決分佈式數據庫中的故障問題。R E C O進程試圖訪問存在疑問的分佈式事務的數據庫並解析這些事務。只有在平臺支持Distributed Option(分佈式選項)且i n i t . o r a文件中的D I S T R I B U T E D _ T R A N S A C T I O N S參數大於零時才創建這個進程。

h. SNPn
O r a c l e的快照刷新及內部作業隊列調度依賴於它們執行的後臺進程(快照進程)。這些後臺進程的名字以字母S N P開頭,以數字或字母結束。爲一實例所創建的S N P進程的個數由數據庫的i n i t . o r a文件中的J O B _ Q U E U E _ P R O C E S S E S 參數決定(在O r a c l e 7 中,該參數名爲S N A P S H O T _ R E F R E S H _ P R O C E S S E S )。

i. LCKn
當採用O r a c l e並行服務器選項時,多個L C K (鎖定進程)後臺進程(命名爲L C K 0 ~ L C K 9 )用於解決內部實例的鎖定問題。L C K進程的個數由G C _ L C K _ P R O C S參數決定。

j . Dn n n
D n n n(調度程序進程)是M T S結構的一部分;這些進程有助於減少處理多重連接所需要的資源。對於數據庫服務器支持的每一個協議必須至少創建一個調度程序進程,調度程序進程根據S Q L * N e t (或N e t 8 )的配置在數據庫啓動時創建,在數據庫打開後可以創建或取消。

k. Sn n n
創建Sn n n(服務器進程)來管理需要專用服務器的數據庫連接。服務器進程可以對數據文件進行I / O操作。

l. P n n n
如果啓動數據庫中的並行查詢選項,一個查詢的資源要求可以分佈在多個處理器中。當實例啓動由init. ora文件的PA R A L L E L _ M I N _ S E RV E R S參數確定時,指定數目的並行查詢服務器進程就啓動。每一個這樣的進程都將出現在操作系統級。需要並行操作的進程越多,啓動的並行查詢服務器進程就越多。每個並行查詢服務器進程在操作系統級將有一個P 0 0 0、P 0 0 1、P 0 0 2這樣的名字。並行查詢服務器進程的最大數量由init. ora 文件的PA R A L L E L _ M A X _S E RV E R S參數確定。

五、Oracle的外部結構
1. 重做日誌
O r a c l e保存所有數據庫事務的日誌。這些事務被記錄在聯機重做日誌文件(online redo logf i l e )中。當數據庫被破壞時,這些日誌文件能夠以正確順序恢復數據庫事務。重做日誌文件信息存儲在數據庫數據文件的外部。

重做日誌文件也可以讓O r a c l e優化向磁盤寫入數據的方式。當數據庫中出現一個事務時,就把該事務輸入到重做日誌緩衝區;同時受該事務影響的數據塊不會立即寫入磁盤。

每個O r a c l e數據庫都有兩個或更多的聯機重做日誌文件。O r a c l e以循環方式向聯機重做日誌文件寫入:第一個日誌文件被填滿後,就向第二個日誌文件寫入,然後依次類推。當所有聯機重做日誌文件都被填滿時,就又回到第一個日誌文件,用新事務的數據對其進行重寫。如果數據庫正以A R C H I V E L O G模式運行,在重寫聯機重做日誌文件前,數據庫將先對其進行備份。任何時候都可以用這些歸檔重做日誌文件來恢復數據庫的任何部分。

重做日誌文件可以被數據庫鏡像(複製)。鏡像聯機重做日誌文件不依賴操作系統或操作環境的硬件性能就可以對重做日誌文件進行鏡像。

2. 控制文件
數據庫的全局物理結構由其控制文件(control file)維護。控制文件記錄數據庫中所有文件的控制信息。控制文件維護內部的一致性並引導恢復操作。

由於控制文件對數據庫至關重要,所以聯機存儲着多個拷貝。這些文件一般存儲在各個不同的磁盤上,以便將因磁盤失效引起的潛在危險降至最低限度。創建數據庫時,同時就提供與之對應的控制文件。

數據庫控制文件的名字通過init. ora文件的C O N T R O L _ F I L E S參數規定。儘管這是一個i n i t . o r a參數,但是C O N TO R L _ F I L E S參數通常用c o n f i g . o r a文件規定,因爲它很少變化。如果需要給數據庫添加一個新的控制文件,可關閉實例,把已存在的一個控制文件複製到新的地址,把新的地址添加到C O N T R O L _ F I L E S參數設置值上,並重新啓動這個實例。

3. 跟蹤文件與警告日誌
在實例中運行的每一個後臺進程都有一個跟蹤文件與之相連。跟蹤文件記載後臺進程遇到的重大事件的信息。除了跟蹤文件外, O r a c l e還有一個稱作警告日誌(alert log)的文件,警告日誌記錄數據庫文件運行中主要事件的命令及結果。例如,表空間的創建、重做日誌的轉換、操作系統的恢復、數據庫的建立等信息都記錄在警告日誌中。警告日誌是數據庫每日管理的重要資源,當需要查找主要失敗原因時,跟蹤文件就非常有用。

應經常監控警告日誌。警告日誌的條目將通知你數據庫操作期間遇到的任何問題,其中包括出現的任何O R A _ 0 6 0 0內部錯誤。爲使警告日誌便於使用,最好是每天能自動對其重新命名。例如,如果警告日誌稱作a l e r t _ o r c l . l o g,可以對它重新命名,以便其文件名包括當前日期。下次O r a c l e要寫該警告日誌時,將找不到具有a l e r t _ o r c l . l o g文件名的文件,因此數據庫將創建一個新的文件名。這樣,除了有以前的警告日誌外,還有一個當前的警告日誌( a l e r t _ o r c l . l o g )。用這種方式區分警告日誌條目就可以使對警告日誌條目的分析更有效。

----------------------------------end--------------------------------------------

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/truexf/archive/2006/07/05/881726.aspx

轉載:http://www.verydemo.com/demo_c158_i42133.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章