初識Oracle資料庫體系結構

呆呆笨笨的魚發表於2014-05-29

先來看張直觀的圖:


                                           oracle 11g 體系結構圖

                        

理解Oracle體系結構要充分理解三個概念:資料庫(database),資料庫例項(instance),會話(session),一定不要把這三個概念弄混。

 

 

資料庫的概念

(A)    物理儲存結構由資料檔案、控制檔案、重做日誌檔案組成:

1.       資料檔案(datafile)

   select * from dba_data_files;

資料檔案包括儲存表和索引資料,以及排序和雜湊等操作的中間結果。一個資料檔案只能屬於一個資料庫,一個資料庫可以包含多個資料檔案。

2.       控制檔案(controlfile)

   select * from v$controlfile;

控制檔案記錄了資料庫的物理儲存結構和其他控制資訊,如資料庫名稱、建立資料庫的時間戳、組成資料庫的各個資料檔案和重做日誌檔案的儲存路徑及名稱、系統的檢查點資訊等。

控制檔案的作用:

Oracle資料庫開啟時(mount到open階段),必須先開啟控制檔案,從中讀取資料檔案和重做日誌檔案資訊。如果控制檔案損壞,就會是資料庫無法開啟,導致使用者無法訪問儲存在資料庫中的資訊。

在例項恢復過程中,控制檔案檢查點資訊決定Oracle例項怎樣使用重做日誌檔案恢復資料庫。

 

3.       重做日誌檔案(redo logfile)

        select * from v$logfile;

select * from v$log;

                重做日誌檔案記錄了資料庫所產生的所有變化資訊。在例項或者介質失敗時,可以用重做日誌恢復資料庫。

重做日誌檔案組儲存資料庫重做日誌資訊,這組重做日誌檔案被稱作聯機重做日誌檔案。每個資料庫必須至少擁有兩組重做日誌檔案。Oracle例項以迴圈寫入的方式使用資料庫的重做日誌檔案組。

在歸檔模式下,在發生日誌檔案切換後,填滿的重做日誌檔案被複制到其他地方儲存。這些日誌檔案副本被稱作歸檔日誌檔案。

 

 

(B)邏輯結構由表空間(tablespace)、段(segment)、區間(extent)、資料塊(data block)組成

 

一個表空間包含多個段,一個段包含多個區間,一個區間包含多個資料塊。

 

表空間:

表空間是一個邏輯容器,它位於邏輯儲存結構的頂層。表空間內的資料被物理存放在資料檔案中。一個表空間可以包含一個或多個資料檔案。但是一個資料檔案只能屬於一個表空間。

Oracle 11g系統預設建立的表空間有:

SYSTEM:系統表空間。用於儲存整個資料庫的資料定義資訊。

SYSAUX:系統表空間的輔助表空間,用於儲存一些元件和產品的資料,以減輕SYSTEM表空間的負載。

TEMP:臨時表空間。用於儲存SQL語句處理過程中產生的臨時資料。

UNDOTBS1:UNDO表空間,Oracle資料庫用它來儲存還原資訊,實現回滾等操作。

USER:預設的使用者表空間。用於儲存永久使用者物件和資料。

 

段:

                段是佔用儲存空間的資料庫物件,用於儲存和隔離不同資料庫物件的資料。

 

表段:即資料段。

索引段

回滾段:用於資料庫還原資訊

臨時段

 

 

區間:

    區間是Oracle儲存空間最小的分配單位。

 

資料塊:

    資料塊是Oracle最小的I/O單位。

 

 

Oracle資料庫物理儲存結構和邏輯儲存結構關係如下圖:


 

 

資料庫例項(instance

Oracle資料庫例項由記憶體結構和後臺程式組成。

 


 

 

 

1.       系統全域性區SGAsystem global area

(a)     資料緩衝區data buffer cache

為了減少資料庫的物理I/O次數,提高效能,Oracle從磁碟資料檔案檢索資料之後或將資料塊寫入磁碟之前,都要將資料塊快取到資料緩衝區中。

Oracle資料庫資料塊可以使用8KB(標準塊)2KB4KB16KB32KB。資料快取區也分為標準塊快取區和非標準塊快取區。

 

SQL> show parameter db_block_size

 

NAME                                 TYPE        VALUE

------------------------------------ -----------

db_block_size                        integer     8192

 

備註:保持池、迴圈池、預設池都屬於data_buffer_cache

 

(b)     共享池(shared pool)

共享池大小有引數shared_pool_size引數指定,它又分為資料字典快取、庫快取、伺服器結果快取。

資料字典快取(dictionary cache):首次執行的SQL程式碼,伺服器程式首先要解析程式碼,生成執行計劃。在解析過程中需要檢索SQL語句操作的資料庫物件及其定義、使用者和許可權等資訊。這些資訊儲存在資料庫的資料庫字典內。

庫快取(Library cache):用以快取解析過的SQL語句的執行計劃。伺服器進行在執行SQL程式碼時,首先從庫快取查詢其執行計劃,如果找到,則重用該程式碼,這稱為軟解析或庫快取命中。否則進行硬解析。

伺服器結果快取:用於快取SQL語句查詢結果集合和PL/SQL函式的結果集。(快取資料塊)

 

(c)     重做日誌緩衝區(redo log buffer)

伺服器程式把執行資料修改(insertupdatedelete)過程中產生的重做日誌寫入重做日誌緩衝區,然後日誌寫入程式lgwr把日誌緩衝區內的重做日誌寫入磁碟中的聯機重做日誌檔案。

 

(d)     大池(Large pool)

大池是一個可選的記憶體區域,它是由large_pool_size引數設定,用於分配不使用於在共享池內分配的大塊記憶體。如RMAN備份所需要的緩衝區、語句並行執行所使用的緩衝區。

 

(e)     JAVA(java pool)

(f)      流池(stream pool)

 

關於SGA可以查詢一個檢視

select * from v$sga_dynamic_components;

 


 

 

2.       後臺程式(background process)

 

(a)     程式監視程式PMON(process monitor)

l  監視其他後臺程式、伺服器程式、排程程式的執行情況。當它們異常中斷時,重啟這些程式或者終止例項執行。

l  在使用者程式異常中斷後,負責清理資料庫緩衝區快取,釋放使用者程式鎖定的資源。

l  向正在執行的監聽註冊資料庫例項。

 

(b)     系統監視程式SPOM (system monitor)

SMON負責大量系統級的清理工作:

l  例項啟動時,如果需要,SMON執行例項恢復。

l  清理不在使用的臨時段

l  合併字典管理表空間內的相鄰空閒區

 

(c)     資料庫寫入程式DBWR ( database writer )

負責將SGA內資料緩衝區快取中修改過的資料塊寫入資料檔案。

 

(d)     日誌寫入程式 LGWR ( log writer )和歸檔程式ARCH

負責把日誌緩衝區快取的重做日誌寫入重做日誌檔案。

在歸檔模式下,在發生日誌檔案切換後,填滿的重做日誌檔案被複制到其他地方儲存。這些日誌檔案副本被稱作歸檔日誌檔案。

 

(e)     檢查點程式 CKPT ( checkpoint process )

Oracle資料塊內,檢查點程式會定期啟動,它把檢查點資訊寫入控制檔案和資料檔案頭部,並通知DBWn程式把髒資料寫入資料檔案。DBWn程式的執行又會啟動LGWR程式將重做日誌檔案快取區中的內容寫入重做日誌檔案。

 

 

 

 

 

 

 

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28929558/viewspace-1172507/,如需轉載,請註明出處,否則將追究法律責任。

相關文章