Oracle資料庫是Oracle公司開發和銷售的一種對象關係資料庫管理系統。 Oracle資料庫通常被稱為Oracle RDBMS或簡稱為Oracle。
資料庫和實例
Oracle資料庫伺服器由一個資料庫和至少一個資料庫實例組成。 資料庫是一組存儲數據的檔,而資料庫實例是一組管理資料庫檔的記憶體結構。 另外,資料庫由後臺進程組成。
一個資料庫和一個實例是緊密相連的,因此術語 - Oracle資料庫 通常用來指代實例和數據庫。
下圖說明瞭Oracle資料庫伺服器體系結構:
在這種體系結構中,Oracle資料庫伺服器包括兩個主要部分:檔(Oracle資料庫)和記憶體(Oracle實例)。
1. Oracle資料庫
Oracle資料庫的一個基本任務是存儲數據。以下部分簡要地介紹Oracle資料庫的物理和邏輯存儲結構。
1.1. 物理存儲結構
物理存儲結構是存儲數據的純檔。當執行一個CREATE DATABASE
語句來創建一個新的資料庫時,將創建下列檔:
- 數據檔:數據檔包含真實數據,例如銷售訂單和客戶。邏輯資料庫結構(如表和索引)的數據被物理存儲在數據檔中。
- 控制檔:每個Oracle資料庫都有一個包含元數據的控制檔。元數據描述資料庫的物理結構,包括資料庫名稱和數據檔的位置。
- 聯機重做日誌檔:每個Oracle資料庫都有一個聯機重做日誌,其中包含兩個或多個聯機重做日誌檔。聯機重做日誌由重做條目組成,記錄對數據所做的所有更改。
除這些檔外,Oracle資料庫還包括其他重要檔,如參數檔,網路檔,備份檔以及用於備份和恢復的歸檔重做日誌檔。
1.2. 邏輯存儲結構
Oracle資料庫使用邏輯存儲結構對磁片空間使用情況進行精細控制。以下是Oracle資料庫中的邏輯存儲結構:
- 數據塊(Data blocks):數據塊對應於磁片上的位元組數。Oracle將數據存儲在數據塊中。數據塊也被稱為邏輯塊,Oracle塊或頁。
- 範圍(Extents):範圍是用於存儲特定類型資訊的邏輯連續數據塊的具體數量。
- 段(Segments):段是分配用於存儲用戶對象(例如表或索引)的一組範圍。
- 表空間(Tablespaces):資料庫被分成稱為表空間的邏輯存儲單元。 表空間是段的邏輯容器。 每個表空間至少包含一個數據檔。
下圖說明瞭表空間中的段,範圍和數據塊:
下圖顯示了邏輯和物理存儲結構之間的關係:
2. Oracle實例
Oracle實例是客戶端應用程式(用戶)和數據庫之間的介面。Oracle實例由三個主要部分組成:系統全局區(SGA),程式全局區(PGA)和後臺進程。如下圖所示 -
SGA是實例啟動時分配的共用記憶體結構,關閉時釋放。 SGA是一組包含一個資料庫實例的數據和控制資訊的共用記憶體結構。
不同於所有進程都可用的SGA,PGA是會話開始時為每個會話分配的私有記憶體區,當會話結束時釋放。
主要的Oracle資料庫的後臺進程
以下是Oracle實例的主要後臺進程:
- PMON 是調節所有其他進程的進程監視器。PMON清理異常連接的資料庫連接,並自動向偵聽器進程註冊資料庫實例。PMON是Oracle資料庫中最活躍的一個進程。
- SMON 是執行系統級清理操作的系統監視進程。它有兩個主要職責,包括在發生故障的情況下自動恢復實例,例如斷電和清理臨時檔。
- DBWn 是資料庫編寫器。Oracle在內存中執行每個操作而不是磁片。因為在內存中的處理速度比在磁片上快。DBWn進程從磁片讀取數據並將其寫回到磁片。 一個Oracle實例有許多資料庫編寫器,如:
DBW0
,DBW1
,DBW2
等等。 - CKPT 是檢查點過程。 在Oracle中,磁片上的數據稱為塊,記憶體中的數據稱為緩衝區。 當該塊寫入緩衝區並更改時,緩衝區變髒,需要將其寫入磁片。CKPT進程使用檢查點資訊更新控制和數據檔頭,並向髒盤寫入髒緩衝區的信號。 請注意,Oracle 12c允許全面和增量檢查點。
- LGWR 是日誌寫入過程,是可恢復架構的關鍵。 在資料庫中發生的每一個變化都被寫出到一個名為
redo
日誌檔中用於恢復目的。 而這些變化是由LGWR進程編寫和記錄的。 LGWR進程首先將更改寫入記憶體,然後將磁片寫入重做日誌,然後將其用於恢復。 - ARCn 是歸檔進程,它將重做日誌的內容複製到歸檔重做日誌檔。存檔程式進程可以有多個進程,如:
ARC0
,ARC1
和ARC3
,允許存檔程式寫入多個目標,如D:
驅動器,E:
驅動器或其他存儲。 - MMON 是收集性能指標的可管理性監控流程。
- MMAN 是自動管理Oracle資料庫記憶體的記憶體管理器。
- LREG 是監聽器註冊過程,它使用Oracle Net Listener 在資料庫實例和調度程式進程上註冊資訊。