前言
Oracle 架構以「實例 + 數據庫文件」雙重結構著稱。本文從內存結構、後台進程、邏輯/物理存儲結構三個維度,系統梳理核心組件與交互關係,構建完整架構心智模型。
一、實例—— 內存與進程的動態集合
實例 = SGA (System Global Area) + 後台進程。是數據庫運行時的「心臟」。
1. SGA 核心組件
| 組件 | 功能 | 關鍵參數 |
| 數據緩沖區 | 緩存數據塊,減少物理讀 | DB_CACHE_SIZE, DB_nK_CACHE_SIZE |
| 日志緩沖區 | 緩存 Redo 條目,批量寫入 Redo Log | LOG_BUFFER |
| 共享池 | 緩存 SQL/PLSQL 解析樹、執行計劃、數據字典 | SHARED_POOL_SIZE |
| 大池 | RMAN、共享服務器、並行查詢分配 | LARGE_POOL_SIZE |
| Java 池 | Java 代碼/數據 | JAVA_POOL_SIZE |
| Streams 池 | Streams 復制 | STREAMS_POOL_SIZE |
2. 關鍵後台進程
| 進程 | 職責 |
| DBWn | 將髒塊從緩沖區寫入數據文件 |
| LGWR | 將 Redo Log Buffer 寫入 Online Redo Log 文件 |
| CKPT | 定期更新數據文件頭/控制文件檢查點信息 |
| SMON | 實例恢復、臨時段釋放、合併連續空閒區 |
| PMON | 清理失敗進程、釋放鎖、進程恢復 |
| ARCn | 歸檔模式下複製 Redo Log 至歸檔目標 |
| RECO | 解決分佈式事務失敗 |
| MMON/MMNL | 自動工作負載儲存庫 (AWR) 統計收集 |
二、數據庫文件—— 靜態持久化存儲
1. 邏輯結構(由大到小)
Tablespace (表空間) ──→ Segment (段) ──→ Extent (區) ──→ Block (塊/頁)
- 表空間:邏輯存儲單元,由一或多個數據文件組成(如 SYSTEM, SYSAUX, USERS, UNDO, TEMP)。
- 段:同一類型對象的空間集合(表段、索引段、回滾段、臨時段)。
- 區:連續塊的集合,空間分配單位(初始/下一區大小由存儲參數控制)。
- 塊:最小 I/O 單位(通常 8KB),創建數據庫時指定
DB_BLOCK_SIZE,不可變。
2. 物理文件
| 文件類型 | 作用 | 關鍵點 |
| 數據文件 | 存儲用戶數據、字典、Undo 等 | 屬於某表空間,可自動擴展 |
| 控制文件 | 記錄數據庫物理結構(文件名、檢查點、Redo 信息) | 多路鏡像,損壞導致掛起 |
| Online Redo Log | 循環記錄所有變更,支撐實例恢復 | 組/成員多路鏡像,LGWR 循環寫入 |
| 歸檔日志 | Redo Log 歸檔副本,支撐介質恢復/備份 | 啟用 ARCHIVELOG 模式後生成 |
| 參數文件 (SPFILE/PFILE) | 實例啟動配置 | SPFILE 二進制可動態修改,PFILE 文本 |
| 口令文件 | 認證 SYSDBA/SYSOPER 權限 | orapwd 創建,REMOTE_LOGIN_PASSWORDFILE |
三、實例與數據庫文件的交互
- 啟動:讀取 SPFILE → 分配 SGA、啟動進程 → 掛載控制文件 → 打開數據文件/Redo Log。
- 讀取:Server Process 檢查 Buffer Cache → 未命中則從數據文件讀塊入 Cache。
- 修改:生成 Redo 入 Log Buffer → LGWR 寫 Redo Log → DBWn 延遲寫數據文件。
- 提交:LGWR 強制刷新 Redo Log Buffer(Commit 完成標誌)。
- 檢查點:CKPT 觸發 DBWn 寫髒塊,更新控制文件/數據文件頭 SCN。
總結
「實例」是動態運行環境,「數據庫」是靜態文件集合。理解 SGA 組件分工、後台進程協作、邏輯/物理存儲層級映射,是性能調優、故障診斷、備份恢復的基石。
- 上一篇文章: Oracle 游標全解析:隱式/顯式游標、屬性、FOR 循環與 REF CURSOR 實戰
- 下一篇文章: Oracle SQL*Plus 啟動關閉數據庫全模式詳解:NOMOUNT/MOUNT/OPEN/RESTRICT/FORCE
Copyright ©
程式碼之家 All Rights Reserved