四大 SCN 概念速查表
| SCN 名稱 | 定義 | 儲存位置 | 查詢 SQL |
| 系統檢查點 SCN | 全域檢查點完成後的 SCN | 控制檔 | SELECT checkpoint_change# FROM v$database; |
| 資料檔檢查點 SCN | 每個資料檔對應的檢查點 SCN | 控制檔 | SELECT name, checkpoint_change# FROM v$datafile; |
| 啟動 SCN | 資料檔檔頭記錄的檢查點 SCN,啟動時判斷是否需恢復 | 資料檔檔頭 | SELECT name, checkpoint_change# FROM v$datafile_header; |
| 終止 SCN | 資料檔關閉時的 SCN,正常關閉有值,異常為 NULL | 控制檔 | SELECT name, last_change# FROM v$datafile; |
控制檔重建與 RESETLOGS 決策樹
-- 重建控制檔語法
CREATE CONTROLFILE [RESETLOGS | NORESETLOGS] ...
- NORESETLOGS:Datafile Checkpoint 來自 Online Redo Log Current Log 頭。
- RESETLOGS:Datafile Checkpoint 來自各資料檔檔頭;**拋棄所有歷史 Redo**,重置 Log Sequence 為 1,**必須配合不完全恢復或備份控制檔使用**,開庫後需立即完整備份。
六大啟動場景 SCN 關係與恢復動作對照表
| 場景 | SCN 關係 | 介質恢復 | 實例恢復 | RESETLOGS | 備註 |
| 1. 正常關閉 | System=Datafile=Start=Stop | 否 | 否 | 否 | 最乾淨 |
| 2. 異常關閉 | System=Datafile=Start, Stop=NULL | 否 | 是 | 否 | 自動前滾 |
| 3. 舊資料檔 | System=Datafile > Start | 是 | 視 Stop SCN | 否 | 需應用 Redo |
| 4. 備份控制檔 | System=Datafile ≤ Start | 是 | 視 Stop SCN | 是 | USING BACKUP CONTROLFILE |
| 5. 重建 NORESETLOGS | Current Log SCN = System=Datafile ≥ Start | 是 | 否 | 否 | Datafile CP 來自 Current Log |
| 6. 重建 RESETLOGS | System ≥ Datafile = Start | 是 | 否 | 是 | Datafile CP 來自檔頭,Log 已失效 |
實戰判斷流程
- 收集四大 SCN:
v$database、v$datafile、v$datafile_header。
- 比對 System、Datafile、Start 三者是否相等 → 決定是否介質恢復。
- 檢查 Stop SCN 是否 NULL → 決定是否實例恢復。
- 若使用備份控制檔或重建 RESETLOGS → 強制 RESETLOGS 開庫。
結語
掌握四大 SCN 定義、儲存位置與六大場景裁決矩陣,是 DBA 從「會備份」進階到「懂恢復原理」的分水嶺。建議在測試環境模擬各場驗證,建立肌肉記憶。