大致可以先簡單分為Oracle Instance和Oracle database files,當我們提及Oracle Server的時候,它同時包含了上述兩個東西。以下將分為兩篇針對其進行個別探討:
Oracle的架構裡包含了許多複雜的元件,也是Oracle對於初學者相當不好學習的地方,而理解這些對於了解Oracle運作有相當大的幫助,讓我們一起來看看吧^_^
Oracle的架構裡包含了許多複雜的元件,也是Oracle對於初學者相當不好學習的地方,而理解這些對於了解Oracle運作有相當大的幫助,讓我們一起來看看吧^_^
- 透過Oracle Instance去存取Oracle database。
- 一個Oracle Instance只會開啟且只有一個Oracle database。
- 包含Memory Structures和Background Processes。
當使用者利用sqlplus、pl/sql developer等工具,通常稱為User Process發出請求(request)連線到Oracle Instance的時候。此時Oracle會啟動一個Server Process來對應User Process,完成和User的連線,此時Server Process還會去和Oracle Instance建立一個Session。
一、Memory Structure
- System Global Area (SGA)
SGA是Oracle Instance不可或缺的元件,當Instance啟動時,會分配一塊Memory空間給它。 - Program Global Area (PGA)
當Server Process啟動時,會分配一塊Memory空間給它。
1)System Global Area
SGA包含以下幾個重要元件:
- Shared Pool
- 儲存最近被執行的SQL和PL/SQL語句
- 儲存最近被使用到的資料定義(data definitions)
- 包括Library Cache、Data Dictionary Cache等
- Database Buffer Cache
- Redo Log Buffer
- Large Pool
- Java Pool
- 儲存最近被執行的SQL和PL/SQL語句。
- 目的是為了分享(sharing)常用的語句,提高效率。
- 在清除資料(hose keeping)上採用LRU(least recently used)的演算法,也就是最少被使用的資料會被從Memory中清除。
- 儲存最近被使用到的資料定義(data definitions)。
- 儲存的資訊包括檔案、表格、欄位、使用者名稱、角色、權限和其它物件等。
- 在進行語句解析(parse)的階段,Server Process會來去Data Dictionary找其物件名稱以及是否具備存取該物件權限的驗證。
- 目的是為了加快進行查詢或執行DML的回應速度(response time)。
- 儲存從datafiles中的取出資料副本(copy)。
- 目的在於提升資料的取得和更新效率。
- 在清除資料(hose keeping)上採用LRU(least recently used)的演算法,也就是最少被使用的資料會被從Memory中清除。
- 儲存所有對資料進行的改變。
- 每一筆的資料改變稱之為redo entry或redo record,而多個redo entries組成redo log files。
- 目的是為了系統或資料的回復(recovery)。
- 是一個可選(optional)的記憶體區域。
- 目的是為了紓解Shared Pool的負擔。
- 通常使用在:
- 在Shared Server Mode,作為Session memory(UGA)使用。
- 作為Server Process的I/O Buffer Cache。
- 作為備份和回復的空間,使用RMAN也會使用此空間。
- 作為同步執行(Parallel)的緩衝,當有多個連線需求同時進行,可以利用此空間作為緩衝處理。
- 供系統來使用,Large Pool不使用LRU。
- 提供Java指令的解析請求
二、Process Structure
依類型可以分為以下三種:
- User Process
- Server Process
- Background Processes
- 利用程式(sqlplus、pl/sql developer、SQL developer等)對Oracle Server提出連線請求。
- 不會直接連線到Oracle Server,會由Oracle啟動一個Server Process對應。
- 產生一個Session直接連線到Oracle Server
- 分為Dedicated Server Mode和Shared Server Mode),Dedicated模式裡中每一個Server Process只服務一個User Process;而Shared模式就是每一個Server Process可以服務多個User Process。
- 作為維護和執行相關的一切,確保Oracle Server運作正常。
- 必須有的包括DBWn、LGWR、CKPT、PMON、SMON。
- 目的是為了確保資料的一致性。
- 在以下情況發生時,會執行DBWn
- 發生CKPT
- Dirty buffers(根據LRU寫到Dirty list)達到門檻
- 沒有free的buffers空間
- Timeout
- Tablespace設定為Offline或Read only
- 執行Table DROP或TRUNCATE
- Tablespace設定為BEGIN BACKUP
- 在以下情況發生時,會執行LGWR
- 執行commit或DDL
- 當1/3滿
- 當一次寫入超過1M的redo entry
- 每3秒
- 必須在DBWn前執行
- 負責處理
- 發送信號給DBWn,告訴DBWn該執行了
- 更新datafile headers
- 更新control files
- 當processes失敗時,會進行以下幾個動作來清除:
- 將交易(transaction)進行Rolling back
- 釋放該process的locks
- 釋放該process掌握的其它資源
- 重新啟動掛掉的dispatchers
- 負責進行Instance recovery
- 從redo logs中將已經commit的資料進行回復,也就是將之前執行的DDL、DML再重新做一遍。
- 將尚未進行commit的交易執行Roll back,回到交易尚未變動的狀態。
- 重新連結破碎的free空間
- 將暫存的空間(temporary segments)進行回收