掌握 Oracle 體系架構,必須先釐清兩個最基礎卻最易混淆的概念——資料庫與執行個體。兩者關係緊密但本質迥異:
資料庫 = 靜態的物理檔案集合(資料的持久化儲存)
執行個體 = 動態的記憶體結構 + 背景進程群組(存取資料的服務主體)
資料庫
└── 表空間 —— 邏輯劃分單位(至少含 SYSTEM 表空間)
└── 資料檔 —— 物理檔案(一個表空間含一或多個資料檔)
└── 段 —— 物件佔用空間(表段、索引段、回滾段等)
└── 區 —— 連續區塊組(預設 8 區塊)
└── 區塊 —— 最小儲存單位(預設 8KB)
| 特性 | 說明 |
|---|---|
| 磁碟空間分配控制 | 管理物件在磁碟上的空間分配方式 |
| 使用者配額限制 | 限制使用者在表空間可用空間上限 |
| 狀態屬性 | ONLINE / OFFLINE / READ ONLY / READ WRITE |
| 備份恢復單位 | 可針對表空間進行部分備份與恢復 |
-- 修改表空間狀態
ALTER TABLESPACE users READ ONLY;
-- 查詢表空間狀態
SELECT tablespace_name, status FROM dba_tablespaces;
-- 查詢表空間與資料檔對應關係
SELECT tablespace_name, bytes, file_name FROM dba_data_files;
-- 移動表至其他表空間
ALTER TABLE scott.emp MOVE TABLESPACE users;
輔助檔案:Parameter File、Password File、Archived Log Files(非資料庫啟動必需)
SELECT * FROM v$datafile; -- 資料檔
SELECT * FROM v$controlfile; -- 控制檔
SELECT * FROM v$logfile; -- 日誌檔
執行個體 = SGA(系統全域區) + 背景進程群組。一個資料庫可被多個執行個體同時存取(RAC 架構)。
init.ora(文字)或 spfile.ora(二進位,支援動態修改持久化)| 區域 | 特性 | 核心組件 |
|---|---|---|
| SGA(共享) | 所有進程共享,儲存資料庫資訊與控制資訊 | Shared Pool、Buffer Cache、Redo Log Buffer、Large Pool、Java Pool 等 |
| PGA(私有) | 單一進程專用,進程建立時分配、終止時回收 | 排序區、雜湊區、UGA(專用伺服器模式) |
| 維度 | 資料庫 | 執行個體 |
|---|---|---|
| 本質 | 靜態檔案集合 | 動態記憶體 + 進程 |
| 持久性 | 永久(除非刪除檔案) | 暫時(關機即消失) |
| 啟動順序 | 被掛載/開啟 | 先啟動,再開啟資料庫 |
| 多對多關係 | 一個資料庫可對多個執行個體(RAC) | 一個執行個體同一時間只能掛載一個資料庫 |
| 備份對象 | 備份資料庫檔案 | 無需備份(可重建) |
理解這對核心概念,是掌握 Oracle 架構、備份恢復、RAC、Data Guard 等進階主題的基石。