Oracle DB 體系結構
Oracle DB 服務器由一個 Oracle DB 以及一個或多個數據庫實例組成。實例由內存結構和後台進程構成。每當啟動一個實例時,都會分配一個稱為系統全局區 (SGA) 的共享內存區,並啟動後台進程。
數據庫包括物理結構和邏輯結構。由於物理結構和邏輯結構是分開的,因此管理數據的物理存儲時不會影響對邏輯存儲結構的訪問。
Oracle的體系結構確保將邏輯結構從物理結構中抽象出來
Oracle DB 內存結構
Oracle DB 針對各種用途創建和使用內存結構。例如,使用內存來存儲正在運行的程序代碼、在各用戶之間共享的數據以及所連接的每個用戶的專用數據區域。 一個實例有兩個關聯的基本內存結構:
系統全局區 (SGA):稱為 SGA 組件的共享內存結構組,這些組件包含一個 Oracle DB 實例的數據和控制信息。SGA 由所有服務器和後台進程共享。SGA 中存儲的數據示例包括高速緩存的數據塊和共享 SQL 區域。
程序全局區 (PGA):包含某個服務器進程或後台進程的數據及控制信息的內存區域。PGA 是 Oracle DB 在服務器進程或後台進程啟動時創建的非共享內存。服務器進程對 PGA 的訪問是互斥的。每個服務器進程和後台進程都具有自己的 PGA。
SGA 是包含實例的數據和控制信息的內存區。SGA 包含以下數據結構:
數據庫緩沖區高速緩存:用於緩存從數據庫中檢索到的數據塊
重做日志緩沖區:用來緩存用於實例恢復的重做信息,直到可以將其寫入磁盤中存儲的物理重做日志文件
共享池:用於緩存可在用戶間共享的各種結構
大型池:為某些大型進程(例如 Oracle 備份和恢復操作)和 I/O 服務器進程提供大型內存分配的可選區域。
Java 池:用於 Java 虛擬機 (JVM) 中特定於會話的所有 Java 代碼和數據
流池:Oracle Streams 使用它來存儲捕獲和應用操作所需的信息
非 RAC、非 ASM 環境中的常見後台進程包括:
數據庫寫進程 (DBWn)
日志寫進程 (LGWR)
檢查點進程 (CKPT)
系統監視器進程 (SMON)
進程監視器進程 (PMON)
恢復器進程 (RECO)
作業隊列進程
歸檔進程 (ARCn)
隊列監視器進程 (QMNn)
構成 Oracle DB 的文件可劃分為以下類別:
控制文件:包含與數據庫本身相關的數據,即物理數據庫結構信息。這些文件對數據庫至關重要。沒有這些文件,就無法打開數據文件以訪問數據庫中的數據。
數據文件:包含數據庫的用戶或應用程序數據,以及元數據和數據字典
聯機重做日志文件:用於進行數據庫的實例恢復。如果數據庫服務器發生崩潰,但未丟失任何數據文件,那麼實例便可使用這些文件中的信息恢復數據庫。
下列附加文件對成功運行數據庫非常重要:
參數文件:用於定義實例啟動時的配置
口令文件:允許 sysdba、sysoper 和 sysasm 遠程連接到實例並執行管理任務
備份文件:用於進行數據庫恢復。如果原始文件在發生介質故障或用戶錯誤時被損壞或刪除,通常要還原備份文件。
歸檔重做日志文件:包含實例發生的數據更改(重做)的實時歷史記錄。使用這些文件和數據庫備份,可以恢復丟失的數據文件。也就是說,歸檔日志能夠恢復還原的數據文件。
跟蹤文件:每個服務器和後台進程都可以寫入關聯的跟蹤文件。當進程檢測到內部錯誤時,進程會將有關該錯誤的信息轉儲到相應的跟蹤文件中。寫入跟蹤文件的一些信息是為數據庫管理員提供的,而其它信息是為 Oracle Support Services 提供的。
預警日志文件:這些文件包含特殊的跟蹤條目。數據庫的預警日志是按時間順序列出的消息日志和錯誤日志。Oracle 建議您定期查看預警日志。
邏輯和物理數據庫結構
數據庫具有邏輯結構和物理結構。
方案
“方案”是數據庫用戶擁有的數據庫對象的集合。方案對象是直接引用數據庫數據的邏輯結構。方案對象包括諸如表、視圖、序列、存儲過程、同義詞、索引、集群和數據庫鏈接等結構。通常,方案對象包括應用程序在數據庫中創建的所有內容。
數據庫、表空間和數據文件
表空間
數據庫分為多個邏輯存儲單元,這些單元稱為“表空間”,用於將相關邏輯結構組合在一起。例如,表空間一般會將應用程序的所有對象分成一組,以簡化一些管理操作。您可以使用一個表空間存放應用程序數據,使用另一個存放應用程序索引。
數據塊
從最底層來看,Oracle DB 的數據存儲在“數據塊”中。一個數據塊與磁盤中特定字節數的物理數據庫空間相對應。每個表空間的數據塊大小是在表空間創建時指定的。數據庫使用和分配 Oracle 數據塊中的空閒數據庫空間。
區
下一層邏輯數據庫空間是“區”。區是特定數量的相鄰數據塊(通過一次分配獲得),用於存儲特定類型的信息。
段
區之上的邏輯數據庫存儲層稱為“段”。段是為某個邏輯結構分配的一組區。例如:
數據段:每個非集群的、不按索引組織的表都有一個數據段,但外部表、全局臨時表和分區表除外,這些表中的每個表都有一個或多個段。表中的所有數據都存儲在相應數據段的區中。對於分區表,每個分區都有一個數據段。每個集群也都有一個數據段。集群中每個表的數據都存儲在集群的數據段中。
索引段:每個索引都有一個索引段,存儲其所有數據。對於分區索引,每個分區都有一個索引段。
還原段:為每個數據庫實例創建一個 UNDO 表空間。該表空間包含大量用於臨時存儲還原信息的還原段。還原段中的信息用於生成讀一致性數據庫信息,並且在數據庫恢復過程中,用於為用戶回滾未提交的事務處理。
臨時段:臨時段是在需要臨時工作區來執行 SQL 語句時,由 Oracle DB 創建的。語句完成執行後,臨時段的區將返回到實例以備將來使用。為每個用戶指定一個默認臨時表空間,或指定一個在數據庫范圍內使用的默認臨時表空間。
Oracle DB 對空間進行動態分配。如果段中的現有區都已滿,將會再增加一些區。因為區是根據需要進行分配的,因此段中的區在磁盤中可能是相鄰的,也可能是不相鄰的。
表空間和數據文件
數據庫被劃分為多個“表空間”,表空間是可用於將相關邏輯結構組合在一起的邏輯存儲單元。每個數據庫在邏輯上都分為一個或多個表空間。對每個表空間均顯式創建一個或多個數據文件,以在物理上將所有邏輯結構的數據都存儲在表空間中。
YSTEM 和 SYSAUX 表空間是在創建數據庫時創建的必須存在的表空間。這些表空間必須聯機。
SYSTEM 表空間用於核心功能(例如,數據字典表)。
輔助的 SYSAUX 表空間用於附加的數據庫組件(例如,Enterprise Manager Repository)。
數據庫體系結構:結構組件匯總:
內存結構:
系統全局區 (SGA):數據庫緩沖區高速緩存、重做緩沖區以及各種池
程序全局區 (PGA)
進程結構:
用戶進程和服務器進程
後台進程:SMON、PMON、reco、DBWn、CKPT、LGWR、ARCn 等
存儲結構:
邏輯:數據庫、方案、表空間、段、區和 Oracle 塊
物理: 數據文件、控制文件和重做日志文件