掌握 Oracle 體系架構,是從「會用」進階到「懂原理、能調優、會排錯」的分水嶺。本文依官方架構劃分為三大範疇——內部邏輯結構 (Schema/邏輯對象)、記憶體與進程結構 (SGA/PGA/背景進程)、外部物理檔案結構,系統梳理核心組件、參數、運作機制,構建完整心智模型。
資料的邏輯表現,獨立於物理存儲。核心對象:
關鍵: 邏輯對象透過 Data Dictionary 定義,SQL 操作針對邏輯層,物理層由核心透明映射。
核心組件 (init.ora 參數):
| 組件 | 功能 | 關鍵參數 | 管理算法 |
|---|---|---|---|
| Database Buffer Cache | 緩存資料塊 (表、索引、叢集) | DB_BLOCK_BUFFERS / DB_CACHE_SIZE | LRU (最近最少使用) |
| Dictionary Cache | 緩存 Data Dictionary (用戶、檔案、段、權限...) | SHARED_POOL_SIZE (共用池一部分) | LRU |
| Redo Log Buffer | 暫存 Redo Entry,批次寫入 Redo Log File | LOG_BUFFER | 循環緩衝 |
| Shared Pool (SQL 共用池) | Library Cache (SQL 解析樹、執行計畫) + Dictionary Cache | SHARED_POOL_SIZE | LRU |
| Large Pool | 大型操作 (RMAN、共享伺服器、Parallel Query) 專用,避免衝擊 Shared Pool | LARGE_POOL_SIZE | 堆管理 |
| Java Pool | Java 程式碼解析/執行 | JAVA_POOL_SIZE (預設 10MB) | 堆管理 |
| Multiple Buffer Pools | DEFAULT / KEEP / RECYCLE 池隔離熱/冷資料 | BUFFER_POOL_KEEP / RECYCLE | 各自 LRU |
關鍵機制: LRU 淘汰、Dirty Buffer 由 DBWn 寫入磁碟、Redo 由 LGWR 循環寫入、Shared Pool 解析樹共用降低 Hard Parse。
每個 Server Process 專屬,不可共享。包含:排序區、雜湊區、Bitmap Merge 區、Session 資訊、游標狀態。
參數: PGA_AGGREGATE_TARGET (11g+ 由 MEMORY_TARGET 統管)、SORT_AREA_SIZE (舊版)。
| 進程 | 職責 | 關鍵參數/特徵 |
|---|---|---|
| SMON | Instance 恢復 (前滾)、清理臨時段、合併自由區 (PCTINCREASE>0) | 啟動時自動執行 |
| PMON | 清理失敗用戶進程、釋放鎖、註冊 Listener | 定期喚醒檢查 |
| DBWn (DBW0-DBW9) | 將 Dirty Buffer 批次寫入資料檔 | DB_WRITER_PROCESSES、DBWR_IO_SLAVES |
| LGWR | 將 Redo Log Buffer 循環寫入 Online Redo Log File | LGWR_IO_SLAVES (舊版) |
| CKPT | 觸發 DBWn 寫入、更新資料檔頭/控制檔 SCN (檢查點) | CHECKPOINT_PROCESS=TRUE、LOG_CHECKPOINT_INTERVAL/TIMEOUT |
| ARCn | 歸檔模式下複製填滿 Redo Log 到歸檔目的地 | LOG_ARCHIVE_DEST_n、ARCH_IO_SLAVES |
| RECO | 解決分散式交易疑慮 (In-doubt) | DISTRIBUTED_TRANSACTIONS > 0 |
| SNPn (Job Queue) | 物化視圖刷新、排程 Job 執行 | JOB_QUEUE_PROCESSES |
| LCKn | RAC 實例間鎖管理 (GC) | GC_LCK_PROCS |
| Dnnn (Dispatcher) | 共享伺服器架構,多工連線 | MTS/DISPATCHERS 參數 |
| Snnn (Shared Server) | 共享伺服器處理請求 | SHARED_SERVERS |
| Pnnn (Parallel Query) | 並行查詢/ DML/ DDL 工作進程 | PARALLEL_MIN/MAX_SERVERS |
追蹤檔: 每進程一追蹤檔,位於 BACKGROUND_DUMP_DEST (通常 $ORACLE_BASE/admin/),故障診斷金鑰。警告日誌 (alert_) 記錄關鍵事件,建議每日歸檔重命名。
CONTROL_FILES 參數指定。CREATE CONTROLFILE 重建 (需知所有檔路徑)。USER_DUMP_DEST)。alert__YYYYMMDD.log ) 便於歷史追溯。用戶請求
│
▼
Listener (監聽) → Dispatcher / Dedicated Server Process
│
▼
Server Process (PGA) ──▶ SGA (Buffer Cache / Shared Pool / Redo Log Buffer)
│ │ │
│ SQL 解析/執行計畫 │
│ │ │
▼ ▼ ▼
資料塊讀取/修改 Library Cache Redo Entry 生成
│ │ │
▼ ▼ ▼
DBWn 寫入資料檔 共用 Cursor LGWR 寫入 Redo Log
│ │
▼ ▼
Checkpoint (CKPT) 更新檔頭 SCN ARCn 歸檔 (歸檔模式)
│
▼
SMON Instance 恢復 (前滾/回滾)
Oracle 架構是精密的齒輪組:邏輯層定義「什麼」,記憶體/進程層實現「怎麼跑」,物理層保證「不丟、可復原」。唯有將三層關係、核心參數、背景進程職責、檔案角色內化為直覺,才能在效能風暴、故障現場、架構演進中,從容掌舵。