SCN(System Change Number)是 Oracle 內部用於排序交易的單調遞增數字。基於 SCN 的恢復比時間點恢復更精確,因為同一秒內可能有多筆交易,SCN 能精確到單一交易提交的瞬間。
SQL> SELECT COUNT(*) FROM t_user; -- 2 筆
SQL> INSERT INTO t_user SELECT 'spring mvc_' FROM dual;
SQL> COMMIT;
SQL> ALTER SYSTEM SWITCH LOGFILE;
SQL> ALTER SYSTEM CHECKPOINT;
SQL> SELECT CURRENT_SCN FROM V$DATABASE; -- 記錄此 SCN:1214281
SQL> DROP TABLE t_user; -- 誤操作
關鍵步驟: 在誤操作前執行 SWITCH LOGFILE 與 CHECKPOINT,確保 SCN 已寫入控制檔與歸檔日誌,查詢 V$DATABASE.CURRENT_SCN 取得恢復目標 SCN。
RMAN> RUN {
STARTUP FORCE MOUNT;
SET UNTIL SCN 1214281;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
與時間點恢復唯一差異在於 SET UNTIL SCN 替代 SET UNTIL TIME。
SQL> SELECT COUNT(*) FROM t_user;
COUNT(*)
----------
3
資料包含誤操作前新增的那一筆(spring mvc_),證明恢復至 SCN 1214281 成功。
SET UNTIL SCN 會恢復包含該 SCN 的交易;若需排除該交易,應使用 SET UNTIL SCN target_scn - 1。SCN 恢復提供交易級精度,是關鍵業務資料庫誤操作救援的首選方式。掌握 V$DATABASE.CURRENT_SCN、LogMiner 分析與 RMAN SET UNTIL SCN 三大核心技能,能大幅縮短 RTO(恢復時間目標)。