初識Oracle資料庫體系結構
先來看張直觀的圖:
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. 系統全域性區SGA(system global area)
(a) 資料緩衝區data buffer cache
為了減少資料庫的物理I/O次數,提高效能,Oracle從磁碟資料檔案檢索資料之後或將資料塊寫入磁碟之前,都要將資料塊快取到資料緩衝區中。
Oracle資料庫資料塊可以使用8KB(標準塊),2KB、4KB、16KB、32KB。資料快取區也分為標準塊快取區和非標準塊快取區。
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)
伺服器程式把執行資料修改(insert、update、delete)過程中產生的重做日誌寫入重做日誌緩衝區,然後日誌寫入程式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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料結構初識資料結構
- Oracle 19c資料庫體系結構-2Oracle資料庫
- Oracle 19c資料庫體系結構-1Oracle資料庫
- Oracle - 資料庫的記憶體結構Oracle資料庫記憶體
- Postgresql資料庫體系結構-程式和記憶體結構SQL資料庫記憶體
- PostgreSQL 資料庫學習 - 1.資料庫體系結構之儲存結構SQL資料庫
- Agile PLM資料庫表結構(Oracle)資料庫Oracle
- 資料結構:初識(資料結構、演算法與演算法分析)資料結構演算法
- 資料庫介紹--初識資料庫資料庫
- oracle體系結構(轉)Oracle
- MySQL資料庫初識——初窺MySQLMySql資料庫
- 初級資料結構資料結構
- 資料結構(初級)資料結構
- 初識達夢資料庫資料庫
- 初識時序資料庫資料庫
- 【Oracle體系結構】 Oracle19C 系統結構介紹Oracle
- 【web】資料庫應用系統設計體系結構Web資料庫
- 3:Oracle體系結構(邏輯結構)Oracle
- 達夢資料庫基礎知識(三)達夢資料庫記憶體結構資料庫記憶體
- 初識makefile結構
- 0718_oracle 體系結構Oracle
- PostgreSQL資料庫管理 第二章體系結構SQL資料庫
- 【資料結構篇】認識資料結構資料結構
- 【學習】體系結構-001-例項與資料庫資料庫
- Oracle OCP(37):Database 體系結構OracleDatabase
- 磁碟知識體系結構
- 達夢資料庫基礎知識(二)資料庫邏輯結構資料庫
- Oracle資料庫初學者入門教程Oracle資料庫
- 推薦學Java——初識資料庫Java資料庫
- 瀚高資料庫記憶體結構資料庫記憶體
- 資料庫知識整理 - 概述、資料模型、三級模式結構資料庫模型模式
- 達夢資料庫基礎知識(一)資料庫物理儲存結構資料庫
- 【資料結構與演算法】二分鐘初識樹資料結構演算法
- mysql資料庫-資料結構MySql資料庫資料結構
- Oracle體系結構學習筆記Oracle筆記
- 初識Linux目錄結構Linux
- 架構知識體系總結架構
- 虛谷資料庫初體驗資料庫
- MySQL資料庫初體驗_gwMySql資料庫