首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 實例架構深度解析:SGA、背景進程、啟動階段與單進程/多進程模式對比

     編輯:Oracle 資料庫基礎

**「資料庫 ≠ 實例」** 是 Oracle 從業者必須刻入基因的核心認知。**資料庫** 是靜態檔案集合 (資料檔、控制檔、Redo Log);**實例** 是動態記憶體結構 (SGA) + 背景進程群組,負責所有運行時服務。本文深度解析 **實例組成、SGA 內部結構、關鍵背景進程、三階段啟動流程、單/多進程架構差異、參數配置鐵律**。

實例 vs 資料庫:一對一 (單實例) / 多對一 (RAC)

維度資料庫實例
本質靜態檔案 (持久化)動態記憶體 + 進程 (運行時)
組成資料檔、控制檔、線上 Redo Log、參數檔、密碼檔SGA (共享記憶體) + 背景進程 (PMON, SMON, DBWn, LGWR, CKPT...)
生命週期建立後長期存在啟動 → 運行 → 關閉 (可重複)
關聯一個資料庫可被多個實例掛載 (RAC)單實例環境:一實例掛載一資料庫

SGA (System Global Area) —— 實例的「大腦」

駐留於共享記憶體段,所有背景/前景進程透過 SGA 協作。核心組件:

記憶體管理模式: **ASMM (Auto Shared Memory Management, `SGA_TARGET`)** 或 **AMM (Automatic Memory Management, `MEMORY_TARGET`)**。生產建議 ASMM,保留 OS 頁面快取空間。

關鍵背景進程 —— 實例的「手」

組件功能關鍵參數
Shared Pool (共用池)Library Cache (SQL/PLAN)、Dictionary Cache、Server Result Cache`SHARED_POOL_SIZE`, `SHARED_POOL_RESERVED_SIZE`
Database Buffer Cache (資料庫緩衝區)資料塊副本 (一致性讀、髒塊)、LRU 列表、Keep/Recycle/Default Pool`DB_CACHE_SIZE`, `DB_nK_CACHE_SIZE`
Redo Log Buffer (重做日誌緩衝)Redo Entries 循環緩衝,LGWR 批次寫入 Redo Log File`LOG_BUFFER` (通常自動調整)
Large Pool (大池)備份/恢復 (RMAN)、共用伺服器 UGA、並行查詢訊息緩衝`LARGE_POOL_SIZE`
Java PoolJVM 物件、Session 狀態 (Java Stored Procedure)`JAVA_POOL_SIZE`
Streams PoolStreams/GoldenGate/Advanced Queuing`STREAMS_POOL_SIZE`
In-Memory Area (12c+)Columnar 格式資料,分析查詢加速`INMEMORY_SIZE`
Fixed SGA鎖/閂結構、實例狀態資訊 (不可調整)-

三階段啟動流程

  1. NOMOUNT (啟動實例):
    • 讀取參數檔 (SPFILE → PFILE) → 確定 SGA 大小、進程數量
    • 分配 SGA 共享記憶體段 → 啟動背景進程
    • 實例名由 `ORACLE_SID` 環境變數決定
  2. MOUNT (掛載資料庫):
    • 讀取控制檔 (參數 `CONTROL_FILES` 指定路徑)
    • 控制檔變可讀/可寫,可查詢 `V$DATABASE`, `V$DATAFILE`, `V$LOGFILE`
    • **僅 DBA 可連線** (RESTRICTED SESSION)
  3. OPEN (開啟資料庫):
    • 線上 Redo Log、資料檔以排他鎖開啟
    • 資料庫進入正常服務狀態,所有用戶可連線
    • 若需恢復 → SMON 自動執行實例恢復

命令對照


STARTUP NOMOUNT        -- 僅到階段 1
STARTUP MOUNT          -- 到階段 2
STARTUP                -- 完整到階段 3 (OPEN)
ALTER DATABASE MOUNT   -- 階段 1 → 2
ALTER DATABASE OPEN    -- 階段 2 → 3
SHUTDOWN [IMMEDIATE|TRANSACTIONAL|ABORT] -- 任何階段 → 完全關閉
-- 注意:無法從 OPEN 直接降級到 MOUNT,必須 SHUTDOWN 再 STARTUP MOUNT

單進程 vs 多進程架構

進程全名核心職責關鍵特徵
PMONProcess Monitor清理失敗進程資源、釋放鎖、重註冊服務到 Listener實例守護進程,異常終結會導致實例崩潰
SMONSystem Monitor實例恢復 (前滾/回滾)、臨時段清理、空間合併啟動時自動觸發恢復
DBWnDatabase Writer (n=0-9, 20-31)將髒塊從 Buffer Cache 寫入資料檔 (LRU/Checkpoint/Truncate 觸發)多進程提升寫入並行度
LGWRLog Writer將 Redo Log Buffer 寫入線上 Redo Log File (Commit/1/3MB/1s/Log Switch 觸發)單進程序列化寫入,關鍵路徑
CKPTCheckpoint更新資料檔頭/控制檔 Checkpoint SCN、觸發 DBWn 寫入不直接寫資料,協調 DBWn
ARCnArchiver將填滿的線上 Redo Log 複製為 Archived Redo Log多進程 (n=0-9, 10-30),歸檔模式必備
RECORecoverer解決分散式交易掛起 (Two-Phase Commit)分散式環境必備
MMON/MMNLManageability MonitorAWR 快照收集、閾值告警、自動調優任務10g+ 自動維護核心

參數配置鐵律:init.ora / SPFILE

  1. 動態參數 (ALTER SYSTEM SET ... SCOPE=BOTH/MEMORY/SPFILE):大多數效能參數 (`SGA_TARGET`, `PGA_AGGREGATE_TARGET`, `OPTIMIZER_MODE`...)。
  2. 靜態參數 (需重啟實例): `DB_BLOCK_SIZE`, `DB_NAME`, `CONTROL_FILES`, `COMPATIBLE`, `PROCESSES`, `SESSIONS`...。
  3. 隱藏參數 (`_` 開頭): **嚴禁生產環境隨意修改**,除非 Oracle Support 明確指導 (SR 記錄)。
  4. 無文檔參數: 同隱藏參數,極高風險。
  5. 查詢所有參數: `SELECT ksppinm, ksppdesc FROM x$ksppi;` (內部表,謹慎使用)。

配置調優核心哲學

  • **基線優先:** 預設值 → 負載測試 → 瓶頸識別 → 針對性調整 → 驗證 → 固化。
  • **監控導向:** `V$SGASTAT`, `V$SGA_RESIZE_OPS`, `V$PGASTAT`, `V$SYSSTAT` (buffer gets, physical reads, redo size...)。
  • **變更管控:** 所有參數變更記錄於變更管理系統,含變更前後基線對比報告。

理解實例架構,是從「會用 Oracle」進化為「懂 Oracle」的分水嶺。SGA 是大腦,背景進程是手,參數檔是基因,啟動流程是生命週期。**守住架構認知,調優才有的放矢。**

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性多進程 (MTS/專用伺服器, 標準版/企業版)單進程 (Personal Oracle / Oracle Lite)
進程模型每用戶一前景進程 + 共享背景進程群單一進程內執行所有功能 (前景+背景)
記憶體SGA (共享) + PGA (私有)單一記憶體空間 (無 SGA/PGA 區分)
並發高 (數千用戶)極低 (單用戶/極少並發)
適用場景生產、開發、測試、所有 Server 端部署嵌入式、行動裝置、桌面單機應用