首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle SCN 機制深度解析:四大檢查點 SCN、啟動/終止 SCN、Resetlogs/重建控制檔決策邏輯

     編輯:Oracle 資料庫基礎

System Change Number (SCN) 是 Oracle 內部時鐘,決定資料一致性、恢復邊界、備份有效性。本文系統定義四大 SCN(系統/資料檔/啟動/終止)、闡述正常/異常關機、舊資料檔、備份控制檔、重建控制檔五大場景的 SCN 比較邏輯,並給出 RESETLOGS vs NORESETLOGS 決策依據。

一、四大核心 SCN 定義與查詢

SCN 類型定義儲存位置查詢視圖
系統檢查點 SCN最近一次完成檢查點的 SCN控制檔V$DATABASE.CHECKPOINT_CHANGE#
資料檔檢查點 SCN各資料檔最近檢查點 SCN控制檔V$DATAFILE.CHECKPOINT_CHANGE#
啟動 SCN資料檔頭記錄的檢查點 SCN,用於啟動時判斷是否需恢復資料檔頭V$DATAFILE_HEADER.CHECKPOINT_CHANGE#
終止 SCN資料檔最後一次正常關閉時的 SCN;NULL 表示異常關機控制檔V$DATAFILE.LAST_CHANGE#

二、五大場景 SCN 比較與恢復動作

場景SCN 關係需媒體恢復?需執行個體恢復?處理動作
正常關機System = Datafile = Start = Stop否否直接 OPEN
異常關機System = Datafile = Start, Stop = NULL否是OPEN → 自動執行個體恢復 (SMON)
舊資料檔 (備份還原)System = Datafile > Start, Stop = NULL/非NULL是視 Stop媒體恢復至 System=Datafile=Start
備份控制檔System = Datafile ≤ Start, Stop ≠ NULL是 (需 USING BACKUP CONTROLFILE)否媒體恢復至 Current Redo 最大 SCN → 必須 RESETLOGS
重建控制檔 NORESETLOGSCurrent Redo SCN = System = Datafile ≥ Start是 (若 > Start)視 Stop媒體恢復至 Redo 最大 SCN
重建控制檔 RESETLOGSDatafile Header SCN 為準是否媒體恢復至 Datafile Header SCN → RESETLOGS

三、RESETLOGS vs NORESETLOGS 決策邏輯


ALTER DATABASE OPEN RESETLOGS;   -- 重設 Log Sequence = 1,拋棄舊 Redo
ALTER DATABASE OPEN NORESETLOGS; -- 保留現有 Redo 序號
  • 必須 RESETLOGS:不完全恢復、使用備份控制檔、重建控制檔指定 RESETLOGS。
  • RESETLOGS 後必須完整備份**:新化身起始點,舊備份無法直接用於後續恢復。
  • NORESETLOGS 重建控制檔:Datafile Checkpoint 來自 Online Redo Current Log Header。
  • RESETLOGS 重建控制檔:Datafile Checkpoint 來自各資料檔頭。

四、關鍵查詢腳本(巡檢/故障排查)

-- 1. 系統 vs 資料檔檢查點
SELECT db.checkpoint_change# AS system_ckpt,
       df.checkpoint_change# AS datafile_ckpt,
       df.name
FROM   v$database db, v$datafile df;

-- 2. 啟動 SCN (資料檔頭)
SELECT name, checkpoint_change# AS start_scn
FROM   v$datafile_header;

-- 3. 終止 SCN
SELECT name, last_change# AS stop_scn
FROM   v$datafile;

-- 4. 當前 Redo 最大 SCN
SELECT MAX(first_change#) AS current_redo_scn FROM v$log_history;

五、實務決策流程圖(文字版)

啟動資料庫
   │
   ├─ System = Datafile = Start ?
   │       ├─ YES → Stop NULL ? → YES → 異常關機 → 自動執行個體恢復 → OPEN
   │       │                        NO  → 正常關機 → 直接 OPEN
   │       └─ NO  → System = Datafile > Start ? → YES → 舊資料檔 → 媒體恢復
   │                                    │
   │                                    └─ NO → System = Datafile ≤ Start ?
   │                                             ├─ YES → 備份控制檔 → USING BACKUP CONTROLFILE 恢復 → RESETLOGS
   │                                             └─ NO  → 重建控制檔 → 依 NORESETLOGS/RESETLOGS 分支

六、常見誤區澄清

誤區正確認知
SCN 就是時間戳記SCN 是邏輯時鐘,單位時間內可產生多個 SCN;對應時間需查 V$LOG_HISTORY.FIRST_TIME。
RESETLOGS 後舊備份完全失效舊備份仍可用於「重建到 RESETLOGS 前時間點」的新化身恢復,但需配合 RECOVER ... USING BACKUP CONTROLFILE。
Stop SCN 非 NULL 就不需執行個體恢復Stop SCN 非 NULL 代表該檔案正常關閉;但若其他檔案 Stop=NULL,整體仍需執行個體恢復。

掌握 SCN 四大類型與五大場景比較邏輯,能在備份恢復、Standby 建立、控制檔重建、時間點恢復等關鍵操作中,精準判斷資料庫狀態、選擇正確恢復路徑,避免資料遺失與多餘停機。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved