Oracle 資料庫系統架構:實例與資料庫檔案的完整圖解
Oracle 架構分為兩大核心部分:記憶體結構 + 背景程序 = 實例 (Instance),以及 作業系統層面的實體檔案 = 資料庫。實例啟動後掛載並開啟資料庫,提供服務。
一、 實例架構 (Instance = SGA + 背景程序)
SGA (System Global Area,系統全域區) 是共享記憶體核心,包含三大關鍵組件:
- 資料庫緩衝區快取 (Database Buffer Cache):
儲存從磁碟讀入的資料塊。
→ 避免重複物理 I/O,提升查詢速度。
包含預設、保留 (KEEP)、回收 (RECYCLE) 三大池。
- 重做日誌緩衝區 (Redo Log Buffer):
暫存 DML (INSERT/UPDATE/DELETE) 產生的重做項目。
→ 批次寫入磁碟,提升寫入效能。
觸發寫入條件:每 3 秒、滿 1MB 或 1/3、使用者 COMMIT、檢查點 (CKPT)。
- 共用池 (Shared Pool):
儲存 SQL/PLSQL 執行計畫、剖析樹、資料字典快取。
→ 避免重複硬剖析,大幅降低 CPU、提升並發。
包含函式庫快取、資料字典快取、伺服器結果快取 (11g+)。
其他 SGA 組件:大型池、Java 池、串流池、固定 SGA (管理指標)。
關鍵背景程序:
- DBWn (Database Writer):將髒緩衝區寫入資料檔。
- LGWR (Log Writer):將重做日誌緩衝區寫入線上重做日誌檔。
- CKPT (Checkpoint):觸發檢查點,更新資料檔標頭、控制檔 SCN。
- SMON (System Monitor):執行執行個體恢復、合併自由空間、清理臨時段。
- PMON (Process Monitor):清理失敗程序資源、釋放鎖、重啟失敗的調度程序/共用伺服器。
- ARCn (Archiver):封存模式下將線上重做日誌複製至封存目的地。
- RECO (Recoverer):解決分散式交易失敗。
- CJQ0 (Job Queue Coordinator)、QMNn (Queue Monitor) 等。
二、 資料庫邏輯結構 (Logical Structure)
- 表空間:邏輯儲存單位,由一或多個資料檔組成。
預設:SYSTEM、SYSAUX、UNDO、TEMP、USERS。
- 段:表空間中儲存特定類型資料的空間 (表段、索引段、UNDO 段、臨時段)。
- 區塊:段的空間配置單位,由連續區組成。
目的:一次配置較大空間,減少碎片。
- 區:最小儲存單位,建立資料庫時指定大小 (2K/4K/8K/16K/32K)。
Oracle 所有 I/O 以區為單位。
三、 資料庫實體結構 (Physical Files)
- 資料檔:實際儲存資料 (表、索引等)。屬於某表空間。
- 線上重做日誌檔:循環記錄所有資料變更,供執行個體/媒體恢復。至少 2 組多工。
- 控制檔:記錄資料庫實體結構 (資料檔/日誌檔路徑、SCN、檢查點資訊、RMAN 備份資訊)。多工至少 2 份。
- 參數檔:
SPFILE (二進位、伺服器端、可動態修改) 或 PFILE (文字、客戶端)。啟動時讀取配置 SGA 大小等參數。
- 密碼檔:儲存 SYSDBA/SYSOPER 使用者雜湊,允許遠端啟動/關閉資料庫。
架構圖關鍵流向
- 使用者連線 → 專用/共用伺服器程序 → PGA (私有記憶體)。
- SQL 剖析 → Shared Pool 檢查快取 → 未命中則硬剖析 → 產生執行計畫存入 Library Cache。
- 執行計畫存取資料 → Buffer Cache 檢查 → 未命中 → DBWn 從資料檔讀入區塊。
- DML 修改 → 產生 Redo 存入 Redo Log Buffer → LGWR 寫入 Online Redo Log → Commit 確認。
- DBWn 定期/檢查點將髒區塊寫回資料檔。
- ARCH 模式下 ARCn 將填滿的 Redo Log 複製為 Archived Redo Log。
理解此架構是 SQL 調優、備份恢復、故障診斷、容量規劃的基石。建議配合官方文件 Oracle Database Concepts 深入研讀。