首頁  >  文章  >  資料庫  >  圖文詳解oracle資料庫體系結構

圖文詳解oracle資料庫體系結構

WBOY
WBOY轉載
2022-03-10 18:02:343976瀏覽

這篇文章為大家帶來了關於Oracle的相關知識,其中主要介紹了資料庫體系結構的相關問題,Oracle DB 伺服器由一個Oracle DB以及一個或多個資料庫實例組成,實例由記憶體結構和後台程序構成,希望對大家有幫助。

圖文詳解oracle資料庫體系結構

推薦教學:《Oracle教學

概述

Oracle DB 伺服器由一個Oracle DB 以及一個或多個資料庫實例組成。實例由記憶體結構和後台程序構成。每當啟動一個實例時,都會分配一個稱為系統全域區 (SGA) 的共享記憶體區,並啟動後台程序。
資料庫包括物理結構和邏輯結構。由於物理結構和邏輯結構是分開的,因此管理資料的實體儲存時不會影響對邏輯儲存結構的存取。
圖文詳解oracle資料庫體系結構
Oracle 實例使用記憶體結構和程序來管理和存取資料庫。所有記憶體結構都存在於構成資料庫伺服器的那些電腦的主記憶體中。進程是在這些計算機的記憶體中運行的作業。進程被定義為作業系統中可運行一系列步驟的「控制執行緒」或機制。

記憶體結構

圖文詳解oracle資料庫體系結構
Oracle實例有兩個關聯的基本記憶體結構:
1、系統全域區(SGA)
稱為SGA 元件的共享記憶體結構組,這些組件包含一個Oracle DB實例的資料和控制資訊。 SGA 由所有伺服器和後台進程共用。 SGA 中儲存的資料範例包括高速緩存的資料塊和共用 SQL 區域。
SGA 是包含實例的資料和控制資訊的記憶體區。 SGA 包含以下資料結構:
• 資料庫緩衝區快取: 用於快取從資料庫中檢索到的資料區塊
• 重做日誌緩衝區: 用來快取用於實例恢復的重做信息,直到可以將其寫入磁碟中儲存的實體重做日誌檔案
• 共用池: 用於快取可在用戶間共享的各種結構
• 大型池: 為某些大型進程(例如Oracle 備份和恢復操作)和I/O 伺服器進程提供大型記憶體分配的選用區域。
• Java 池:用於Java 虛擬機器(JVM) 中特定於會話的所有Java 程式碼和資料
• 流池: Oracle Streams 使用它來儲存擷取和應用操作所需的資訊

2、程式全域區(PGA)
包含某個伺服器程序或後台程序的資料及控制資訊的記憶體區域。
PGA 是 Oracle DB 在伺服器程序或後台程序啟動時所建立的非共享記憶體。伺服器程序對PGA 的存取是互斥的。每個伺服器進程和後台進程都具有自己的 PGA。
程式全域區 (PGA) 是一個記憶體區,其中包含每個伺服器程序的資料及控制資訊。 Oracle 伺服器程序為客戶機請求提供服務。每個伺服器進程都有自己專用的 PGA,其 PGA 在伺服器進程啟動時創建,對 PGA 的存取權限僅限於該伺服器進程,並且只能由代表該伺服器進程的 Oracle 程式碼對 PGA 進行讀取和寫入。

Oracle DB 使用初始化參數來建立和管理記憶體結構。管理記憶體的最簡單的方法是允許資料庫自動管理和優化記憶體。要做到這一點(以下操作適用於大多數平台),只需設定目標記憶體大小初始化參數 (MEMORY_TARGET) 和最大記憶體大小初始化參數(MEMORY_MAX_TARGET)。

資料庫緩衝區快取

圖文詳解oracle資料庫體系結構
資料庫緩衝區快取是 SGA 的一部分,用於存放從資料檔案讀取的資料區塊的副本。並行連接到實例的所有使用者共享對資料庫緩衝區高速緩存的存取。
Oracle DB 使用者程序第一次需要特定資料片段時,將在資料庫緩衝區快取中搜尋資料。
如果該進程在快取中找到資料(稱為快取命中),則直接從記憶體中讀取資料。如果進程在高速緩存中找不到資料(稱為快取未命中),則在存取資料之前,必須將磁碟上的資料檔案中的資料區塊複製到快取中的緩衝區中。快取命中時存取資料要比快取未命中時存取資料快。
快取中的緩衝區由一個複雜演算法管理,該演算法組合使用最近最少使用 (LRU) 列表和停靠計數機制。

重做日誌緩衝區

圖文詳解oracle資料庫體系結構
重做日誌緩衝區是 SGA 中的循環緩衝區,用於存放有關對資料庫所做更改的資訊。此資訊儲存在重做條目中。重做條目包含重建(或重做)由 DML、 DDL 或內部操作對資料庫進行的變更所需的資訊。如果需要,將使用重做條目進行資料庫復原。
伺服器程序變更緩衝區快取時,系統會產生重做條目,並將產生的重做條目寫入SGA 中的重做日誌緩衝區。重做條目佔用緩衝區中連續的順序空間。 LGWR 後台程序將重做日誌緩衝區寫入磁碟上的活動重做日誌檔案(或檔案群組)中。

共享池

圖文詳解oracle資料庫體系結構
SGA 的共享池部分包含庫高速緩存、資料字典快取、 SQL 查詢結果快取、PL/SQL 函數結果快取、平行執行訊息的緩衝區以及控制結構。
「資料字典」是資料庫表格和視圖(它們包含有關資料庫、資料庫結構及其使用者的參考資訊)的集合。在 SQL 語句語法分析期間, Oracle DB 會經常存取資料字典。此存取操作對於Oracle DB 的持續操作至關重要。
Oracle DB 對資料字典的存取十分頻繁,因此在記憶體中指定了兩個特殊的位置來存放字典資料。
一個區域稱為“數據字典高速緩存”,也稱為“行高速緩存”,因為它以行的形式存放數據,而不是以緩衝區的形式存放數據(緩衝區用於存放完整的數據塊)。記憶體中的另一個用於存放字典資料的區域稱為「庫高速緩存」。所有 Oracle DB 使用者程序都共用這兩個快取以便存取資料字典資訊。
Oracle DB 使用共用 SQL 區域(以及 PGA 中保留的專用 SQL 區域)來表示它所執行的每個 SQL 語句。 Oracle DB 可辨識兩個使用者執行相同 SQL 語句的情況,從而為這些使用者重複使用共用 SQL 區域。
“共享 SQL 區域”包含給定 SQL 語句的語法分析樹和執行計劃。 Oracle DB 透過為多次執行的 SQL 語句使用一個共享 SQL 區域來節省記憶體。當許多使用者執行同一個應用程式時,相同 SQL 語句通常會多次執行。
對新的 SQL 語句進行語法分析時, Oracle DB 會從共享池中分配內存,以便在共享 SQL區域中儲存該語句。此記憶體的大小取決於語句的複雜度。
Oracle DB 處理 PL/SQL 程式單元(流程、函數、程式包、匿名區塊和資料觸發器)的方式與它處理單一 SQL 語句的方式十分相似。 Oracle DB 指派一個共用區域以存放程式單元在經過語法分析和編譯之後的形式。 Oracle DB 指派一個專用區域,以便存放特定於執行程式單元的會話的值,包括局部變數、全域變數和套件變數(也稱為「套件實例化」),並且存放用於執行SQL 的緩衝區。如果多個使用者執行同一個程式單元,則所有使用者都使用同一個共用區域,但維護其各自專用 SQL 區域的單獨副本,以便存放特定於其自身會話的值。
PL/SQL 程式單元中所包含的單一 SQL 語句的處理方式與其它 SQL 語句的處理方式類似。
無論這些 SQL 語句在 PL/SQL 程式單元中的來源為何,它們都使用共用區域來存放其語法分析表示,並且為執行語句的每個會話使用一個專用區域。
SQL 查詢結果快取和 PL/SQL 函數結果快取記憶體是 Oracle Database 11g 中新增的功能。
它們共享相同的基礎結構,出現在相同的動態效能 (V$) 視圖中,並且使用所提供的相同套件進行管理。
查詢的結果和查詢片段的結果可以快取在「 SQL 查詢結果快取」的記憶體中。這樣,資料庫可以在以後執行這些查詢和查詢片段時使用快取結果進行回答。由於從SQL 查詢結果快取中檢索結果比重新執行查詢快得多,因此將頻繁執行的查詢的
結果快取起來可以大大提高這些查詢的效能。
如果計算的輸入是 PL/SQL 函數發出的一個或若干個參數化查詢,有時會使用該函數來傳回計算結果。在某些情況下,這些查詢存取很少更改的資料(與呼叫函數的頻率相比)。
可以在PL/SQL 函數的來源文字中包含語法,以請求將函數結果緩存在「 PL/SQL 函數結果高速緩存」中,並且在表列表中的表遇到DML 時清除高速緩存(以確保正確無誤)。

大型池

圖文詳解oracle資料庫體系結構
資料庫管理員可以配置稱為「大型池」的可選記憶體區,以便為以下物件提供大型記憶體分配:
• 共享伺服器的會話記憶體和Oracle XA 介面(在交易處理與多個資料庫互動時使用)
• I/O 伺服器程序
• Oracle DB 備份和還原作業
透過從大型池中為共享伺服器、 Oracle XA 或並行查詢緩衝區分配會話內存, Oracle DB可以主要使用共享池來緩存共享SQL,並避免由於收縮共享SQL 高速緩存而導致的效能開銷。
此外,用於 Oracle DB 備份和還原作業、 I/O 伺服器程序以及並行緩衝區的記憶體以數百 KB的緩衝區進行分配。與共享池相比,大型池可以更好地滿足此類大型記憶體請求。
大型池沒有 LRU 清單。它與共享池中的保留空間不同,後者與從共享池中分配的其它記憶體使用相同的 LRU 列表。

java池和流池

圖文詳解oracle資料庫體系結構
儲存 JVM 中所有特定於會話的 Java 程式碼和資料的伺服器記憶體使用 Java 池記憶體。 Java 池記憶體的使用方式有多種,取決於 Oracle DB 的運作模式。
Java 池指導統計信息提供了用於 Java 的庫高速緩存記憶體的相關信息,並預測 Java 池大小的變化如何影響語法分析速率。當 statistics_level 設定為 TYPICAL 或更高值時,將在內部開啟 Java 池指導。關閉該指導時,將重置這些統計資料。
流池由 Oracle Streams 獨佔使用。流池儲存緩衝的佇列訊息,並且為 Oracle Streams 擷取進程和應用程式提供記憶體。
除非對流池進行專門配置,否則其大小從零開始。當使用 Oracle Streams 時,池大小會根據需要動態增長。

程式全域區(PGA)

圖文詳解oracle資料庫體系結構
程式全域區 (PGA) 是一個專用記憶體區,其中包含伺服器程序的資料及控制資訊。每個伺服器進程都有獨立的 PGA。 PGA 只能由相應的伺服器進程訪問,並且只有代表該伺服器進程的 Oracle 程式碼可以讀取它。開發人員的程式碼不能存取 PGA。
每個 PGA 都包含堆疊空間。在專用伺服器環境中,連接到資料庫執行個體的每個使用者都有單獨的伺服器程序。對於這種類型的連接, PGA 包含一個名為用戶全域區 (UGA) 的記憶體細分部分。 UGA 包括以下部分:
• 遊標區,用於儲存遊標的執行時間資訊
• 使用者會話資料儲存區,用於儲存有關會話的控制資訊
• SQL 工作區,用於處理SQL語句,其中包括:

  • 排序區,用於對資料排序的函數,如ORDER BY 和GROUP BY
  • #散列區,用於執行表的散列聯接
  • 位圖創建區,用於建立資料倉儲常用的位圖索引
  • 位圖合併區,用於解析位圖索引計畫的執行
    在共用伺服器環境中,多個客戶機使用者共用伺服器程序。在這種模式下, UGA 將移入SGA(共享池,如果經過配置也可是大型池), PGA 僅包含堆疊空間。

進程結構

Oracle DB 系統中的進程主要分為兩組:
1、執行應用程式或Oracle 工具代碼的使用者程序
對於不同的Oracle DB 配置,使用者流程結構有所不同,取決於作業系統和所選的OracleDB 選配。已連接使用者的程式碼可以配置為專用伺服器或共用伺服器。
• 專用伺服器: 對於每個用戶,執行資料庫應用程式的使用者程序都由執行 Oracle DB 伺服器程式碼的專用伺服器程序提供服務。
• 共享伺服器: 不必為每個連線提供一個專用伺服器程序。分派程式將多個傳入網路會話請求引導到共享伺服器進程池。共享伺服器進程為所有客戶機請求提供服務。
2、執行 Oracle DB 伺服器程式碼的 Oracle DB 進程(包括伺服器進程和後台進程)
2.1、伺服器進程
Oracle DB 建立伺服器進程以處理連接到實例的使用者進程的請求。使用者程序代表連接到Oracle DB 的應用程式或工具。它可以與 Oracle DB 在同一台電腦上,也可以在遠端客戶機上利用網路來存取 Oracle DB。使用者進程首先與一個監聽程式進程通信,在專用環境中該進程會建立一個伺服器進程。
所建立的代表每個使用者的應用程式的伺服器程序可以執行以下一項或多項操作:
• 對透過應用程式發出的SQL 語句進行語法分析並執行語句
• 從磁碟上的資料檔案中將必要的資料區塊讀取到SGA 的共用資料庫緩衝區中(如果這些資料區塊目前尚未在SGA 中)
• 傳回結果,使應用程式可以處理資訊

2.2、後台程序
為了最大限度地提高效能並滿足多個使用者的需要,多進程Oracle DB 系統使用一些稱為「後台進程」的附加Oracle DB 進程。一個 Oracle DB 實例可以有多個後台程序。
非RAC、非ASM 環境中的常見後台程序包括:
• 資料庫寫入程序(DBWn)
• 日誌寫入程序(LGWR)
• 檢查點程序(CKPT)
•系統監視器程序(SMON)
• 程序監視器程序(PMON)
• 復原器程序(RECO)
• 作業佇列協調程式(CJQ0)
• 作業從屬程序(Jnnn)
• 歸檔進程(ARCn)
• 佇列監視器程序(QMNn)
更進階的配置(如RAC)中可能會有其它後台程序。有關後台進程的詳細信息,請參見V$BGPROCESS 視圖。
有些後台程序是在啟動實例時自動建立的,而其他則是根據需要建立的。
其它進程結構不是特定於單一資料庫的,而是可以在同一個伺服器上的多個資料庫間共享的。 Grid Infrastructure 進程和網路進程即屬於此類。
Linux 和UNIX 系統上的Oracle Grid Infrastructure 程序包括:
• ohasd: Oracle 高可用性服務守護程序,負責啟動Oracle Clusterware 程序
• ocssd:集群同步服務守護程序
• diskmon:磁碟監視守護程序,負責監視HP Oracle Exadata Storage Server 的輸入和輸出
• cssdagent:啟動、停止和檢查CSS 守護程序ocssd 的狀態
• oraagent:擴展集群件以支援Oracle 特有的要求和複雜資源
• orarootagent:一種專用的Oracle 代理程式,可協助管理root 使用者所擁有的資源(如網路)圖文詳解oracle資料庫體系結構

資料庫寫入進程(DBWn)

圖文詳解oracle資料庫體系結構
資料庫寫入進程 (DBWn) 可以將緩衝區的內容寫入資料檔案。 DBWn 程序負責將資料庫緩衝區高速緩存中經過修改的緩衝區(灰資料緩衝區)寫入磁碟。雖然對於大多數系統來說,一個資料庫寫入進程 (DBW0) 已經足夠;但是,如果系統需要頻繁修改數據,也可以配置附加進程( DBW1 到 DBW9 以及 DBWa 到 DBWz)來改進寫入效能。這些附加 DBWn 進程在單處理器系統中沒有用。
當資料庫緩衝區高速緩存中的某個緩衝區被修改時,系統會將其標記為灰資料緩衝區,並將其新增至按 SCN 順序排列的檢查點佇列的頭部。因此,該順序與這些變更的緩衝區的重做條目寫入重做日誌的順序一致。當緩衝區高速緩存中的可用緩衝區的數量低於某個內部閾值(達到伺服器程序認為很難獲取可用緩衝區的程度)時, DBWn 會將不經常使用的緩衝區寫入資料文件,寫入順序是從LRU 清單的尾部開始,從而使進程可以在需要緩衝區時替換它們。 DBWn 也會從檢查點佇列的尾部寫入,以保護檢查點向前推進。
SGA 中有一個記憶體結構保存了重做流程中位置的重做位元組位址 (RBA),當實例發生故障時,將從該位置開始復原。此結構充當指向重做的指針,並且由 CKPT 進程按照每三秒一次的頻率寫入控製檔。由於DBWn 依照SCN 順序寫入灰資料緩衝區,而重做依照SCN順序執行,因此每當DBWn 從LRUW 清單寫灰資料緩衝區時,也會將SGA 記憶體結構中保持的指標前移,以便實例恢復(如果需要)從近似正確的位置開始讀取重做,並避免不必要的I/O。這稱為“增量檢查點”。
注意: 還有其它一些 DBWn 可能執行寫入操作的情況(例如,當表空間被設定為唯讀或被置於離線狀態時)。在這些情況下,不會出現增量檢查點,因為僅屬於對應資料檔案的灰資料緩衝區在寫入資料庫時的順序與 SCN 順序無關。
LRU 演算法將更頻繁存取的區塊保存在緩衝區高速緩存中,以盡可能減少磁碟讀取。可對錶使用 CACHE 選項,以協助延長區塊在記憶體中的保留時間。
DB_WRITER_PROCESSES 初始化參數指定了 DBWn 進程的數量。 DBWn 流程的最大數量為 36。如果使用者在啟動過程中未指定該進程數, Oracle DB 將根據 CPU 和處理器群組的數量來決定如何設定 DB_WRITER_PROCESSES。
在下列情況下, DBWn 程序將灰資料緩衝區寫入磁碟:
• 當伺服器程序在掃描閾值數目的緩衝區之後找不到乾淨的可重複使用緩衝區時,會通知DBWn 執行寫操作。 DBWn 在執行其它處理的同時,將灰資料緩衝區非同步寫入磁碟。
• DBWn 寫入緩衝區以推進檢查點。檢查點是重做執行緒(日誌)中用來執行實例復原的起始位置。此日誌位置由緩衝區快取中最舊的灰資料緩衝區決定。在所有情況下, DBWn 均執行成批(多區塊)寫入操作以提高效率。多塊寫入操作中寫入的區塊數因作業系統而異。

日誌寫程序(LGWR)

圖文詳解oracle資料庫體系結構
日誌寫程序(LGWR) 負責管理重做日誌緩衝區,方法是將重做日誌緩衝區條目寫入磁碟上的重做日誌檔。 LGWR 會寫入自上次寫入以來複製到緩衝區中的所有重做條目。
重做日誌緩衝區是循環緩衝區。當 LGWR 將重做日誌緩衝區中的重做條目寫入重做日誌檔案後,伺服器進程可以將新條目複製到重做日誌緩衝區中的那些已寫入磁碟的條目之上。 LGWR 的寫入速度通常足夠快,可以確保緩衝區中始終有空間可供新條目使用,即使對重做日誌的訪問量很大時也是如此。 LGWR 將緩衝區的一個連續部分寫入磁碟。
LGWR 在下列情況下執行寫入操作:
• 使用者程序提交交易處理時
• 重做日誌緩衝區的三分之一已滿時
• 在DBWn 程序將經過修改的緩衝區寫入磁碟(如果需要)之前
• 每隔3 秒
必須在與緩衝區更改相關聯的所有重做記錄寫入磁碟後, DBWn 才可以向磁碟寫入經過修改的緩衝區(先行寫協議)。如果 DBWn 發現一些重做記錄尚未寫入,則會通知 LGWR
將這些重做記錄寫入磁碟,並等待 LGWR 完成重做日誌緩衝區的寫入操作,然後再寫入資料緩衝區。 LGWR 將向目前的日誌組進行寫入。如果該組中的某個文件已損壞或不可用,LGWR 將繼續寫入該組中的其它文件,並在 LGWR 追蹤文件和系統預警日誌中記錄一個錯誤。如果某個群組中的所有檔案均已損壞,或者該群組由於尚未歸檔而不可用,則 LGWR無法繼續工作。
當使用者發出 COMMIT 語句時, LGWR 會將一筆提交記錄放在重做日誌緩衝區中,並立即將該記錄隨同交易處理的重做日誌一起寫入磁碟中。對資料區塊進行的相應變更將延遲,直到能夠更有效率地寫入這些變更時才會執行。這稱為「快速提交機制」。包含交易處理提交記錄的重做條目的原子寫是單一事件,該事件可以確定交易處理是否已提交。
Oracle DB 為提交的事務處理傳回一個成功程式碼,儘管資料緩衝區尚未寫入磁碟中。
如果需要更多緩衝區空間, LGWR 有時會在提交交易處理之前寫入重做日誌條目。僅在稍後提交了該事務處理之後,這些條目才會成為永久條目。當使用者提交事務處理時,該事務處理將被指派一個系統變更號碼 (SCN), Oracle DB 將該號碼與事務處理的重做條目一起記錄在重做日誌中。 SCN 記錄在重做日誌中,以便可以在 Real Application Clusters 和分佈
式資料庫之間同步復原操作。
當活動比較頻繁時, LGWR 可以透過使用群組提交來寫入重做日誌檔案。例如,假設使用者提交一個事務處理。 LGWR 必須將該事務處理的重做條目寫入磁碟。發生該情況時,其他使用者將發出 COMMIT 語句。但是, LGWR 在完成其上一個寫入操作之前,無法寫入重做日誌檔案以提交這些交易處理。在第一個事務處理的條目寫入重做日誌檔案之後,可以在一次操作中將正在等待(尚未提交)的事務處理的整個重做條目列表寫入磁碟,這比分別處理各個事務處理條目所需的I/O 要少。因此, Oracle DB 可以將磁碟 I/O 降至最少,並最大限度地提高 LGWR 的效能。如果提交請求的速率一直較高,則從重做日誌緩衝區進行的每個寫入操作(由 LGWR 執行)都可能包含多個提交記錄。

檢查點進程(CKPT)

圖文詳解oracle資料庫體系結構
「檢查點」是一種資料結構,用來定義資料庫的重做執行緒中的系統變更號碼(SCN) 。檢查點被記錄在控製檔案和每個資料檔案頭中。它們是恢復操作的關鍵元素。
出現檢查點時, Oracle DB 必須更新所有資料檔案的頭,以記錄該檢查點的詳細資訊。這是由 CKPT 進程完成的。 CKPT 程序不會將區塊寫入磁碟;該工作都是由 DBWn 執行。檔案頭中記錄的 SCN 可保證將該 SCN 先前對資料庫區塊進行的所有變更寫入到磁碟中。
Oracle Enterprise Manager 中的 SYSTEM_STATISTICS 監視器將顯示統計資料 DBWR 檢查點,由其指示已完成的檢查點請求的數目。

系統監視器程序(SMON)

圖文詳解oracle資料庫體系結構
系統監視器程序 (SMON) 在執行個體啟動時執行復原(如果需要)。 SMON 也負責清除不再使用的臨時段。如果在執行個體復原過程中因檔案讀取或離線錯誤跳過任何已終止的交易處理,則 SMON 將在資料表空間或檔案重新連線時復原這些交易處理。
SMON 定期檢查以查看是否需要該進程。其它進程在偵測到需要 SMON 時也可以呼叫它。

進程監視器進程

圖文詳解oracle資料庫體系結構
進程監視器進程 (PMON) 在使用者進程失敗時執行進程復原。 PMON 負責清除資料庫緩衝區快取和釋放該使用者程序佔用的資源。例如, PMON 會重置活動事務處理表的狀態,釋放鎖定,並從活動進程清單中刪除該進程 ID。
PMON 會定期檢查分派程式和伺服器程序的狀態,並重新啟動任何已停止運作(除了 OracleDB 故意終止)的分派程式和伺服器程序。 PMON 也會在網路監聽程式中註冊實例和分派程式程序的資訊。
與 SMON 一樣, PMON 會定期檢查以查看是否需要運行;如果其它進程偵測到需要該進程,也可以呼叫它。

復原器程序

圖文詳解oracle資料庫體系結構
復原器程序 (RECO) 是用於分散式資料庫設定的後台程序,自動解決涉及分散式交易處理的故障。實例的 RECO 程序會自動連接到其它那些與有問題的分散式事務處理有關的資料庫。當RECO 程序在涉及的資料庫伺服器之間重新建立連接時,它會自動解決所有有問題的事務處理,從每個資料庫的暫掛事務處理表中刪除所有對應於已解決的有問題事務處理的行。
如果 RECO 進程無法與遠端伺服器連接, RECO 會在某個計時時間隔之後自動嘗試重新連線。但是, RECO 在重新嘗試連接之前,會等待一段時間,此時間會不斷增加(呈冪指數增長)。

歸檔進程(ARCn)

圖文詳解oracle資料庫體系結構
發生日誌切換之後,歸檔進程 (ARCn) 會將重做日誌檔案複製到指定的儲存裝置。只有當資料庫處於 ARCHIVELOG 模式且已啟用自動歸檔時,才會存在 ARCn 進程。
如果您預期歸檔的工作負荷很重(例如在成批載入資料期間),則可以使用LOG_ARCHIVE_MAX_PROCESSES 初始化參數增加最大歸檔進程數。 ALTER SYSTEM 語句可以動態變更該參數的值,以增加或減少 ARCn 進程數。

儲存結構

圖文詳解oracle資料庫體系結構

構成Oracle DB 的檔案可分割為以下類別:
• 控製檔案: 包含與資料庫本身相關的數據,即物理資料庫結構資訊。這些文件對資料庫至關重要。沒有這些文件,就無法開啟資料文件以存取資料庫中的資料。
• 資料檔案: 包含資料庫的使用者或應用程式數據,以及元資料和資料字典
• 線上重做日誌檔案: 用於進行資料庫的執行個體復原。如果資料庫伺服器發生崩潰,但未遺失任何資料文件,那麼實例便可使用這些文件中的資訊恢復資料庫。
下列附加檔案對成功執行資料庫非常重要:
• 參數檔: 用於定義執行個體啟動時的設定
• 口令檔: 允許sysdba、 sysoper 和sysasm 遠端連線到執行個體並執行管理任務
• 備份檔案: 用於進行資料庫復原。如果原始檔案在發生媒體故障或使用者錯誤時被損壞或刪除,通常要還原備份檔案。
• 歸檔重做日誌檔案: 包含實例發生的資料變更(重做)的即時歷史記錄。使用這些檔案和資料庫備份,可以還原遺失的資料檔案。也就是說,歸檔日誌能夠還原還原的資料檔。
• 追蹤檔案: 每個伺服器和後台進程都可以寫入關聯的追蹤檔案。當進程偵測到內部錯誤時,進程會將有關該錯誤的資訊轉儲到對應的追蹤檔案中。寫入追蹤檔案的一些資訊是為資料庫管理員提供的,而其它資訊是為 Oracle Support Services 提供的。
• 預警日誌檔案: 這些檔案包含特殊的追蹤條目。資料庫的預警日誌是按時間順序列出的訊息日誌和錯誤日誌。 Oracle 建議您定期查看預警日誌。

邏輯和實體資料庫結構

圖文詳解oracle資料庫體系結構

資料庫、表空間和資料檔案

本投影片對資料庫、表空間和資料檔案之間的關係進行了說明。每個資料庫都在邏輯上分為兩個或多個表空間。在每個表空間均明確建立一個或多個資料文件,以在物理上儲存表空間中所有邏輯結構的資料。對於 TEMPORARY 表空間,不建立資料文件,而是建立臨時
文件。表空間的資料檔案可以採用任何受支援的儲存技術進行實體儲存。

表空間

資料庫分為多個邏輯儲存單元,這些單元稱為“表空間”,用於對相關邏輯結構或資料檔案進行分組。例如,表空間一般會將一個應用程式的所有段分成一組,以簡化一些管理操作。 圖文詳解oracle資料庫體系結構
資料庫被分割為多個“表空間”,表空間是可用於將相關邏輯結構組合在一起的邏輯儲存單元。每個資料庫在邏輯上分成兩個或多個表空間: SYSTEM 和 SYSAUX 表空間。在每個表空間均明確建立一個或多個資料文件,以在物理上儲存表空間中所有邏輯結構的資料。
一個大小為 160 KB 的段跨越兩個資料文件,由兩個區組成。第一個區位於第一個資料檔案中,大小為 64 KB;第二個區位於第二個資料檔案中,大小為 96 KB。兩個區都由若干相鄰的 8Kb Oracle 區塊組成。
註: 可以建立大檔案表空間,這種表空間只有一個通常非常大的檔案。該檔案的大小可達到行 ID 體系結構所允許的最大大小。此最大大小是表空間的區塊大小乘以 236,如果區塊大小為 32 KB,則最大大小為 128 TB。傳統的小文件表空間(預設值)可以包含多個資料文件,但這些文件都不大。

資料塊

Oracle DB 的資料儲存在「資料塊」中,資料塊是粒度最低的一層。一個資料塊對應於磁碟中特定位元組數的物理空間。每個表空間的資料塊大小是在表空間建立時指定的。資料庫以 Oracle 資料區塊為單位使用和分配空閒資料庫空間。

圖文詳解oracle資料庫體系結構

邏輯資料庫空間的下一層是「區」。區是特定數量的相鄰 Oracle 資料塊(透過一次分配取得),用於儲存特定類型的資訊。區中的 Oracle 資料塊在邏輯上是相鄰的,但在物理上可以分佈在磁碟上的不同位置( RAID 條帶化和檔案系統實作會導致此現象)。

邏輯資料庫儲存中區的上一層稱為「段」。一個段是為某個邏輯結構所分配的一組區。例如:
• 資料段: 每個非群集的、不依索引組織的表都有一個資料段,但外部表、全域臨時表和分區表除外,這些表中的每個表都有一個或多個段。表中的所有資料都儲存在對應資料段的區中。對於分區表,每個分區都有一個資料段。每個集群也都有一個資料段。叢集中每個表的資料都儲存在叢集的資料段中。
• 索引段: 每個索引都有一個索引段,儲存其所有資料。對於分區索引,每個分區都有一個索引段。
• 還原區段: 系統會為每個資料庫執行個體建立一個 UNDO 表空間。此表空間包含大量用於暫存還原資訊的還原段。還原段中的信息用於產生讀取一致性資料庫信息,以便在資料庫復原過程中回退使用者未提交的事務處理。
• 臨時段: 臨時段是 SQL 語句需要臨時工作區來完成執行時由 Oracle DB 建立的。語句完成執行後,臨時段的區將會回到執行個體以備將來使用。您可以為每個使用者指定一個預設臨時表空間,或指定一個在資料庫範圍內使用的預設臨時表空間。
註: 另外還有一些上面未列出的其它類型的段落。此外,還有一些方案對象,如視圖、程式包和觸發器等,雖然它們是資料庫對象,但不被視為段。段擁有單獨的磁碟空間分配。其它物件則以行的形式儲存在系統元資料段中。
Oracle DB 伺服器對空間進行動態分配。如果段中的現有區已滿,則會再增加一些區。因為區是根據需要來分配的,因此段中的區在磁碟上可能是相鄰的,也可能是不相鄰的,它們可以來自屬於同一個表空間的不同資料檔案。

自動儲存管理

圖文詳解oracle資料庫體系結構
自動儲存管理 (ASM) 為 Oracle DB 檔案提供檔案系統與磁碟區管理器縱向整合。 ASM 可管理單一對稱多處理 (SMP) 計算機,或管理叢集的多個節點來支援 Oracle Real Application Clusters (RAC)。
Oracle ASM 叢集檔案系統(ACFS) 是一種多平台、可伸縮的檔案系統和儲存管理技術,該技術擴展了ASM 的功能,可支援Oracle DB 外部的應用程式文件,如可執行檔、報表、BFILE、視訊、音訊、文字、圖像以及其它一般用途的應用程式檔案資料。
ASM 在所有可用資源中分佈輸入/輸出 (I/O) 負載,既免除了手動最佳化 I/O 又優化了效能。 ASM 可協助 DBA 管理動態資料庫環境,讓 DBA 在不關閉資料庫的情況下,透過增加資料庫的大小來調整儲存分配。
ASM 可以維護資料的冗餘副本來提供容錯能力,也可以建構在供應商提供的儲存機制之上。資料管理是透過為各類資料選擇所需的可靠性和效能指標來實現的,而不是逐一文件地進行人工互動。
透過將手動完成的儲存工作自動化, ASM 功能節省了 DBA 的時間,從而提高了管理員的能力,使其可以管理更多和更大的資料庫,而且效率也更高。
圖文詳解oracle資料庫體系結構
ASM 不會妨礙任何現有的資料庫功能。現有資料庫能夠像平常一樣運作。新文件可以建立為 ASM 文件,而現有文件既可以按原有方式進行管理,也可以移植至 ASM。
上圖說明了 Oracle DB 資料檔與 ASM 儲存元件之間的關係。鴉腳標記代表一對多關係。 Oracle DB 資料檔案與儲存在作業系統的檔案系統中的檔案或 ASM 檔案之間是一對一關係。
Oracle ASM 磁碟組是作為一個邏輯單元進行管理的一個或多個 Oracle ASM 磁碟的集合。磁碟組中的資料結構是自包含的,使用部分空間來滿足元資料需求。 Oracle ASM 磁碟是為Oracle ASM 磁碟組預配的儲存設備,可以是實體磁碟,也可以是分割區、儲存陣列中的
邏輯單元號(LUN)、邏輯磁碟區(LV) 或連接到網路的文件。每個 ASM 磁碟被分成許多 ASM分配單元 (AU),該單元是 ASM 可以分配的最小相鄰磁碟空間量。在建立 ASM 磁碟組時,可以將 ASM 分配單元的大小設定為 1、 2、 4、 8、 16、 32 或 64 MB,具體取決於磁碟組的相容等級。一個或多個 ASM 分配單元即形成一個 ASM 區。 Oracle ASM 區是用來存放Oracle ASM 檔案內容的裸儲存。 Oracle ASM 檔案由一個或多個檔案區組成。為了支援非常大的 ASM 文件,可以使用可變大小區,區大小可等於 AU 大小的 1 倍、 4 倍和 16 倍。

推薦教學:《Oracle影片教學

以上是圖文詳解oracle資料庫體系結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除