COMMIT 不只是標記交易結束,更觸發 Redo 生成、LGWR 寫入、SCN 推進、鎖釋放協調的一連串核心動作。理解其內部流程,才能掌握恢復機制與效能調優關鍵。
Committed;產生 Commit SCN 寫入塊頭 (覆蓋先前 DML SCN)。| # | 觸發條件 | 類型 | |
|---|---|---|---|
| 1 | Log Switch (日誌組切換) | 增量 | |
| 2 | 滿足 LOG_CHECKPOINT_TIMEOUT/INTERVAL、FAST_START_IO_TARGET/MTTR_TARGET | 增量 | |
| 3 | ALTER SYSTEM SWITCH LOGFILE | 增量 | |
| 4 | ALTER SYSTEM CHECKPOINT | 完全 | |
| 5 | ALTER TABLESPACE ... BEGIN/END BACKUP | 增量 | |
| 6 | ALTER TABLESPACE/DATAFILE OFFLINE | 增量 | |
| 7 | 正常關閉 (SHUTDOWN NORMAL/IMMEDIATE) | 完全 |
| 狀態 | Redo | Datafile | 恢復動作 |
|---|---|---|---|
| 已 Commit、DBWN 未完成 | 已寫入 (LGWR 同步) | 可能未寫 | SMON 從控制檔 Checkpoint RBA 前滾 Redo → 重做所有修改 (9i 前全重做,9i+ 過濾已寫塊) |
| 未 Commit、執行中斷電 | 部分寫入 (LGWR 批次寫入) | 可能部分寫入 | 前滾同步 Redo/Datafile → 利用 Undo 重構最小 SCN 前映像回滾 |
| 未 Commit、久未 Commit | 可能已寫入 (LGWR 批次) | 可能已寫入 (DBWN 定期) | 前滾同步 → Undo 回滾 (LGWR/DBWN 大致同步) |
LOG_CHECKPOINT_INTERVAL:兩檢查點間 Redo 塊數。LOG_CHECKPOINT_TIMEOUT:兩檢查點間秒數。FAST_START_IO_TARGET:恢復需處理塊數上限。FAST_START_MTTR_TARGET:直接設定目標恢復時間 (秒),Oracle 自動調整檢查點頻率。CKPT 進程每 3 秒更新控制檔 Checkpoint RBA,實例失敗後**直接從最新 RBA 開始前滾**,省略大量 Redo 重做/過濾時間,大幅縮短 MTTR。
經營部 (LGWR) 記合同,貨運部 (DBWN) 按合同號送貨,監督部 (CKPT) 定期核對合同號與送貨進度。
增量檢查點 = 監督部每 3 秒記錄最新核對合同號。
人事大換血 (實例失敗) 後,新監督部從記錄本最新合同號繼續核對,無需從頭開始。