Oracle當機復原機制

您的教材中詳細說明了Oracle的復原機制,主要包含以下元件:

1. Redo Log(重做日誌)

  • 記錄如何重做變更(How to reproduce a change)
  • 用於rolling forward資料庫變更
  • 存儲在redo log files中
  • 確保已提交的交易能夠重做

2. Undo Data(復原資料)

  • 記錄如何復原變更(How to undo a change)
  • 用於rollback、read consistency、flashback操作
  • 存儲在undo segments中(位於undo tablespace)
  • 支援長時間查詢的一致性讀取

3. Archive Log(歸檔日誌)

  • 已歸檔的redo logs
  • 用於媒體復原和point-in-time recovery

4. Control File(控制檔案)

  • 包含檢查點資訊、datafile/logfile位置、備份資訊等

PostgreSQL當機復原機制

PostgreSQL使用不同但概念相似的機制:

1. WAL (Write Ahead Log) - 對應Oracle的Redo Log

  • 所有變更在寫入資料檔案前先寫入WAL
  • 位於pg_wal/目錄(舊版本為pg_xlog/
  • 確保當機後能重做已提交的變更
  • 支援streaming replication

2. MVCC + Vacuum - 對應Oracle的Undo

  • 使用Multi-Version Concurrency Control
  • 舊版本資料保留在原地,不需要專門的undo空間
  • 透過vacuum清理舊版本資料
  • 支援一致性讀取和rollback

3. Archive WAL - 對應Oracle的Archive Log

  • 可設定歸檔WAL檔案
  • 用於point-in-time recovery
  • 設定archive_mode = onarchive_command

4. Checkpoints - 對應Oracle的檢查點

  • 定期將dirty buffers寫入磁碟
  • 記錄在control file中
  • 加速當機復原時間

主要差異

教材中未明確說明但值得注意的差異:

  1. Undo處理方式:Oracle有專門的undo tablespace,PostgreSQL則是在原資料頁面保留多版本
  2. 復原速度:PostgreSQL的checkpoint間隔影響復原時間,Oracle有更細緻的redo控制
  3. 設定複雜度:Oracle的undo和redo分離設定較複雜,PostgreSQL的WAL設定相對簡單

您在學習時需要特別注意這兩個系統在復原機制設計哲學上的根本差異。PostgreSQL更依賴WAL和MVCC的組合,而Oracle有更明確的undo/redo分工。

複習與問題

  1. WAL相關參數

postgreSQL ORACLE