前言:最基本也最關鍵的區分
許多初學者混淆「資料庫」與「實例」。釐清兩者關係、理解 RAC 如何打破一對一限制,是掌握 Oracle 架構的起點。
一、核心定義
| 概念 | 定義 | 組成 | 關鍵特性 |
| 資料庫 | 物理作業系統檔案集合 | 資料檔、控制檔、線上重做日誌、參數檔、密碼檔、歸檔日誌 | 靜態、持久化、可備份/還原 |
| 實例 | 記憶體結構 + 背景進程/執行緒 | SGA、PGA、PMON/SMON/DBWn/LGWR/CKPT/ARCn... | 動態、啟動後存在、掛載/開啟資料庫 |
二、關係規則
- 一個實例,任一時刻只能掛載/開啟一個資料庫
- 一個資料庫,可被多個實例掛載/開啟 (RAC)
- 大多數情況 (Single Instance):一對一
- RAC 環境:多實例 ↔ 一資料庫 (多對一)
三、啟動階段對應關係
STARTUP NOMOUNT
│
├─ 啟動實例 (SGA + 背景進程)
│
└─ 尚未關聯資料庫檔案
│
▼
ALTER DATABASE MOUNT
│
├─ 讀取控制檔,確認資料庫結構
│
└─ 實例掛載資料庫 (關聯建立)
│
▼
ALTER DATABASE OPEN
│
├─ 開啟資料檔、重做日誌
│
└─ 實例開啟資料庫 (可服務用戶)
四、RAC (Real Application Clusters) 架構
核心價值
- 高可用:單節點故障,其他節點秒級接管服務
- 擴展性:橫向增加節點分攤負載
- 單一系統映像**:應用端視為單一資料庫
架構圖解
┌─────────────────┐
│ Shared Storage │ (ASM / Cluster FS / NFS)
│ Datafiles │
│ Control Files │
│ Redo Logs │
└────────┬────────┘
│
┌──────────────┼──────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Node 1 │ │ Node 2 │ │ Node 3 │
│ Instance │ │ Instance │ │ Instance │
│ (SGA) │ │ (SGA) │ │ (SGA) │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
└─────────────┼─────────────┘
▼
┌─────────────────┐
│ Interconnect │ (Private Network)
│ Cache Fusion │ (Block Transfer)
└─────────────────┘
關鍵技術:Cache Fusion
- 節點間透過 **高速私有網路** 直接傳輸資料塊 (一致性讀/當前塊)
- 避免傳統「寫盤再讀」的磁碟 I/O 延遲
- Global Cache Service (GCS) / Global Enqueue Service (GES) 協調全域一致性
五、非 RAC 叢集 vs RAC
| 特性 | Cold Failover Cluster | RAC |
| 架構 | Active-Passive | Active-Active |
| 資源利用 | 備援節點閒置 | 所有節點分擔負載 |
| 故障切換時間 | 分鐘級 (啟動實例+掛載+開啟) | 秒級 (服務遷移+事務恢復) |
| 擴展性 | 無 (單活) | 線性擴展 |
| 授權成本 | 標準版包含 | Enterprise Edition + RAC Option |
六、實例識別與參數
-- 查看實例資訊
SELECT instance_name, host_name, version, startup_time, status, parallel
FROM v$instance;
-- RAC 環境查看所有實例
SELECT inst_id, instance_name, host_name, status
FROM gv$instance;
-- 實例唯一名稱 (RAC 必須唯一)
SHOW PARAMETER instance_name;
SHOW PARAMETER instance_number;
七、常見誤區澄清
| 誤區 | 正確觀念 |
| 「備份實例」 | 備份的是**資料庫檔案**,實例是記憶體結構無法備份 |
| 「實例包含資料」 | 資料在**資料檔**,實例只緩存熱點資料在 SGA |
| 「RAC 是備份機制」 | RAC 是**高可用架構**,仍需完整備份策略 (RMAN) |
| 「單實例也能掛載多資料庫」 | **單實例任一時刻只能開啟一個資料庫** (CDB/PDB 除外) |
八、CDB/PDB (12c+) 的新維度
- CDB (Container Database) = 一個實例 + 一組資料庫檔案
- PDB (Pluggable Database) = 邏輯容器,共享 CDB 的實例與背景進程
- 一個實例可服務 **多個 PDB** (多租戶)
- PDB 可 Unplug/Plug 遷移至其他 CDB
結語
**資料庫 = 檔案 (靜態、持久)**,**實例 = 記憶體 + 進程 (動態、運算)**。單機環境一對一,RAC 打破界限實現多實例共享一資料庫,靠 Cache Fusion 維持一致性。理解此核心關係,才能正確規劃備份策略、高可用架構、擴展方案,避免本質誤判導致的架構缺陷。