實例定義與啟動機制
實例 = SGA (系統全域區) + 背景進程。啟動時讀取參數檔 (PFILE 或 SPFILE),參數異動需重啟生效 (SPFILE 可動態修改部分參數)。一資料庫可被多實例存取 (RAC)。
一、記憶體結構雙核心
1. SGA (System Global Area) — 共享記憶體區
所有伺服器/背景進程共享,儲存資料庫資訊與控制資訊。位於實體記憶體,不足時溢寫虛擬記憶體。核心組件:
- Shared Pool:Library Cache (SQL/PLSQL 執行計畫)、Dictionary Cache (資料字典)、Control Structures。效能關鍵區。
- Database Buffer Cache:資料區塊副本 (Dirty/Free/Pinned),LRU 列表管理,減少物理 I/O。
- Redo Log Buffer:循環緩衝區,暫存變更向量,LGWR 批次寫入 Redo Log File。
- Large Pool / Java Pool / Streams Pool / In-Memory Area:特定功能專用區 (備份、Java、CDC、In-Memory Column Store)。
2. PGA (Program Global Area) — 專用記憶體區
每個伺服器/背景進程獨擁,生命週期隨進程建立/終止。儲存:
- 排序區 / 雜湊區 (Sort/Hash Area)
- 游標狀態資訊
- PL/SQL 執行堆疊
- 工作區 (Work Areas)
關鍵差異:SGA 共享、PGA 獨享。11g+ MEMORY_TARGET 自動管理總量,PGA_AGGREGATE_TARGET 控制 PGA 總上限。
二、五大核心背景進程
| 進程 | 全名 | 核心職責 |
| PMON | Process Monitor | 進程失敗清理:釋放鎖、回滾未提交交易、釋放 SGA/PGA 資源、重新註冊監聽器 |
| SMON | System Monitor | 執行個體恢復 (開啟資料庫時前滾/回滾)、合併臨時段、清理臨時檔案 |
| DBWR | Database Writer | 將 Buffer Cache 中 Dirty Buffer 寫入資料檔 (LRU/Checkpoint/表空間離線觸發) |
| LGWR | Log Writer | 將 Redo Log Buffer 寫入 Online Redo Log Files (Commit/1/3 秒/1MB/切換觸發),保證持久性 |
| CKPT | Checkpoint | 更新控制檔與資料檔檢查點資訊 (SCN)、觸發 DBWR 寫入、縮短恢復時間 |
其他重要進程
- ARCn:歸檔進程,將填滿的 Redo Log 複製至歸檔目的地。
- RECO:分散式交易恢復,解決雙階段提交掛起交易。
- MMON / MMNL:AWR 快照收集、閾值告警、Active Session History 取樣。
- CJQ0:Job Queue 排程器。
- Dnnn / Snnn:Dispatcher / Shared Server 進程 (共享伺服器架構)。
實例啟動三階段
- NOMOUNT:讀取參數檔 → 配置 SGA/PGA → 啟動背景進程。僅需參數檔。
- MOUNT:開啟控制檔 → 確認資料檔/Redo Log 路徑。未校驗資料一致性。
- OPEN:開啟資料檔/Redo Log → 線上 Redo 可用 → 允許用戶存取。完成恢復 (如需)。
總結
實例是 Oracle 的「心臟與神經系統」。SGA 決定讀取效能,PGA 決定運算效能,五大核心進程保證 ACID 與高可用。深入理解各組件交互與參數調優 (如 DB_CACHE_SIZE, SHARED_POOL_SIZE, PGA_AGGREGATE_TARGET, LOG_BUFFER),是高階 DBA 必修課。