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

Oracle 架構兩大核心:資料庫 vs 實例 深度解析

     編輯:Oracle 資料庫基礎

一、資料庫 — 靜態實體檔案集合

資料庫是資料的實體儲存,無論關聯或物件導向結構,Oracle 均將資料存放於資料檔。內部透過表空間進行邏輯劃分,不同資料分開儲存。

1. 表空間 — 邏輯儲存單位

  • 每個資料庫至少一個表空間(SYSTEM 系統表空間)。
  • 一個表空間僅屬於一個資料庫,由同一磁碟上一或多個資料檔組成。
  • 特性:控制磁碟配額、限制使用者空間、狀態 ONLINE/OFFLINE/READ ONLY/READ WRITE、支援部分備份恢復、透過新增資料檔擴展。

常用管理 SQL:

-- 修改表空間屬性
ALTER TABLESPACE ts_name READ ONLY;

-- 查詢表空間狀態
SELECT tablespace_name, status FROM dba_tablespaces;

-- 查詢表空間與資料檔對應
SELECT tablespace_name, bytes, file_name FROM dba_data_files;

-- 查詢使用者預設表空間
SELECT username, default_tablespace FROM dba_users;

-- 移動表至其他表空間
ALTER TABLE tbl_name MOVE TABLESPACE ts_name;

注意:SYSTEM、UNDO、TEMP 不可設為 OFFLINE。

2. 資料檔 — 實體儲存載體

  • 一個表空間由一或多個資料檔組成,資料檔僅屬於一個表空間。
  • 建立後可調整大小(AUTOEXTEND),但一旦加入表空間無法移出或關聯其他表空間。

資料庫三大必要檔案:Data File、Control File、Redo Log File。參數檔、密碼檔、歸檔日誌屬輔助檔案。

-- 查看實體檔案組成
SELECT * FROM v$datafile;      -- 資料檔
SELECT * FROM v$controlfile;   -- 控制檔
SELECT * FROM v$logfile;       -- 日誌檔

二、實例 — 動態記憶體與背景進程

實例是存取資料庫檔案的記憶體結構(SGA)與背景進程的集合,亦稱「伺服器」。一個資料庫可被多個實例存取(RAC)。

實例啟動時讀取初始化參數檔(init.ora 或 spfile.ora),參數修改需重啟生效。

1. 記憶體結構

區域說明主要元件
SGA (System Global Area)共享記憶體,儲存資料庫資訊與控制資訊,實體記憶體不足時使用虛擬記憶體Shared Pool、Database Buffer Cache、Redo Log Buffer、Large Pool、Java Pool、Streams Pool
PGA (Program Global Area)專用記憶體,單一伺服器/背景進程專用,進程建立時配置、終止時回收Sort Area、Session Info、Cursor State、SQL Work Area

2. 背景進程

進程職責
PMON進程失敗時清理資源、釋放鎖、重啟死掉的 Dispatcher(共享伺服器模式)
SMON執行個體恢復、整理自由空間、清理臨時段
DBWn將緩衝區「髒資料塊」寫入資料檔(觸發條件:Checkpoint、髒塊閾值、緩衝區不足、Timeout 3 秒、Tablespace Offline/Read Only、Drop/Truncate Table、Begin Backup)
LGWR將 Redo Log Buffer 寫入線上 Redo Log File(觸發:Commit、1/3 滿、1MB 紅重做、每 3 秒、DBWn 寫入前)
CKPT觸發 DBWn 寫入髒塊,更新資料檔與控制檔檔頭(Checkpoint 資訊),確保所有檔案同步
ARCn歸檔模式下自動備份線上 Redo Log(可選進程)

SQL 執行流程與進程互動

  1. 使用者進程 → 伺服器進程(專用/共享)建立連線。
  2. 查詢語句:Server Process 讀取資料塊至 Buffer Cache → 回傳結果。
  3. DML 語句:產生 Redo 向量寫入 Log Buffer → 修改 Buffer Cache 中資料塊(標記髒塊)。
  4. Commit:LGWR 強制寫入 Redo Log File,確保可恢復性。

並非所有背景進程參與每條 SQL,視語句類型與系統狀態動態參與。

總結

  • 資料庫 = 實體檔案,提供持久化儲存與一致性保障。
  • 實例 = SGA + 背景進程,提供存取資料庫的動態服務能力。
  • 啟動順序:STARTUP → 配置 SGA → 啟動背景進程 → 掛載/開啟資料庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved