嘗試 STARTUP 時報 ORA-01157 (無法識別/鎖定資料檔) + ORA-01110 (報告具體檔案)。恢復策略完全取決於 **上一次關機是否正常** (NORMAL/IMMEDIATE/TRANSACTIONAL vs ABORT/CRASH)。
Alert Log 末尾可見:
ALTER DATABASE DISMOUNT
Completed: ALTER DATABASE DISMOUNT
此時資料檔與控制檔一致,SCN 同步,**無需介質恢復**,可採用「離線丟棄 + 重建表空間」最快恢復。
init.ora ,從 ROLLBACK_SEGMENTS 移除屬於該資料檔的回滾段,或直接註釋該參數。STARTUP RESTRICT MOUNT;ALTER DATABASE DATAFILE '' OFFLINE DROP; ALTER DATABASE OPEN;
SHUTDOWN IMMEDIATE;
-- 編輯 init.ora
_CORRUPTED_ROLLBACK_SEGMENTS = (rbs1, rbs2, ...)
STARTUP RESTRICT;
警告:隱含參數僅在 Oracle 支援指導下使用!
DROP TABLESPACE INCLUDING CONTENTS;
CREATE TABLESPACE ...;
CREATE ROLLBACK SEGMENT ...;
ALTER ROLLBACK SEGMENT ... ONLINE;
ALTER SYSTEM DISABLE RESTRICTED SESSION;ROLLBACK_SEGMENTS,移除 _CORRUPTED_ROLLBACK_SEGMENTS。回滾段中**必含活躍交易**,壞檔**不可 OFFLINE DROP**,必須從備份恢復並應用 Redo。
ALTER DATABASE RENAME FILE)。STARTUP MOUNT;SELECT FILE#, NAME, STATUS FROM V$DATAFILE;
若為 OFFLINE:ALTER DATABASE DATAFILE '' ONLINE; SELECT V1.GROUP#, MEMBER, SEQUENCE#, FIRST_CHANGE#
FROM V$LOG V1, V$LOGFILE V2
WHERE V1.GROUP# = V2.GROUP#;
記錄最小 FIRST_CHANGE# (最早可用 Redo SCN)。SELECT FILE#, CHANGE# FROM V$RECOVER_FILE;
CHANGE# ≥ 最小 FIRST_CHANGE# → **可用線上 Redo 完成恢復**CHANGE# < 最小 FIRST_CHANGE# → **無法完全恢復** (所需 Redo 已被覆寫),聯繫 Oracle SupportRECOVER DATABASE; -- 或 RECOVER DATAFILE '';
ALTER DATABASE OPEN;
| 維度 | 正常關機 (A) | 異常關機 (B) |
|---|---|---|
| 回滾段狀態 | 無活躍交易 | 含活躍交易 |
| 壞檔處理 | OFFLINE DROP 丟棄 | 必須恢復 + 應用 Redo |
| 是否需備份 | 不需 (重建表空間即可) | 必需 (資料檔 + 歸檔/線上 Redo) |
| 風險 | 丟失該表空間內所有資料 | 若備份/Redo 不全面臨資料永久遺失 |
| 適用版本 | 所有版本 | 所有版本 |
若資料庫為 **NOARCHIVELOG**,且異常關機導致資料檔損壞:
V$RECOVER_FILE.CHANGE# ≥ 當前線上 Redo 最小 FIRST_CHANGE# 時可恢復 (即所需 Redo 仍在線上日誌中)RMAN VALIDATE BACKUPSET + 季度恢復演練。_CORRUPTED_ROLLBACK_SEGMENTS 等僅在 Oracle Support 遠程指導下使用,事前必須全庫備份。