物理結構故障源於硬體損壞或人為誤操作。**首要原則:硬體故障先修硬體**。無硬體問題前提下,依故障對象分類施策。所有恢復操作建議在備份完成後執行,確保可回滾。
SHUTDOWN IMMEDIATE;init.ora 確認所有控制檔路徑。cp good.ctl bad.ctlSTARTUP;SHUTDOWN IMMEDIATE;STARTUP MOUNT; → ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS;CREATE CONTROLFILE 區段,修正至最新資料庫結構 (新增/刪除資料檔、日誌組等),存為 create_control.sql。SHUTDOWN ABORT; → STARTUP NOMOUNT; → @create_control.sql;查詢狀態:SELECT * FROM V$LOGFILE; SELECT * FROM V$LOG;
狀態:INVALID (損壞)、INACTIVE、ACTIVE、CURRENT。
| 損壞日誌狀態 | 恢復指令 |
|---|---|
| INACTIVE (非作用中) | ALTER DATABASE DROP LOGFILE GROUP n; |
| ACTIVE (作用中非當前) | ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n; |
| CURRENT (當前作用中) | ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n; 失敗則 不完全恢復 (時間點恢復) |
完成後 ALTER DATABASE OPEN; + 全庫備份。
SELECT NAME FROM V$DATAFILE WHERE STATUS='OFFLINE'; (或 RECOVER 狀態)ALTER DATABASE DATAFILE 'path' OFFLINE;ALTER DATABASE RECOVER DATAFILE 'path';ALTER DATABASE DATAFILE 'path' ONLINE;STARTUP MOUNT;ALTER DATABASE RECOVER DATAFILE 'path';ALTER DATABASE OPEN;邏輯同資料檔,單位為表空間:
-- 非 SYSTEM
ALTER TABLESPACE tbs OFFLINE;
-- 恢復備份
ALTER DATABASE RECOVER TABLESPACE tbs;
ALTER TABLESPACE tbs ONLINE;
-- SYSTEM
STARTUP MOUNT;
-- 恢復備份
ALTER DATABASE RECOVER TABLESPACE SYSTEM;
ALTER DATABASE OPEN;
STARTUP MOUNT;RECOVER DATABASE UNTIL CANCEL; → 輸入 CANCELALTER DATABASE OPEN RESETLOGS;STARTUP NOMOUNT;RMAN> RUN { RESTORE CONTROLFILE; RESTORE DATABASE; RECOVER DATABASE; } (或執行腳本 @hot_database_restore.rcv)ALTER DATABASE OPEN RESETLOGS;| 場景 | 關鍵步驟 |
|---|---|
| 資料檔 + 控制檔損壞,無新 Archive | 覆蓋冷備份控制檔/資料檔 → MOUNT → RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL → OPEN RESETLOGS |
| 資料檔 + 控制檔損壞,有新 Archive | 關閉庫 → 覆蓋所有冷備份檔 (含 Redo Log) → STARTUP (自動前滾 Archive) |
| 所有檔案損壞,有 Archive | 關閉庫 → 覆蓋所有冷備份檔 → MOUNT → RECOVER DATABASE UNTIL CANCEL USING BACKUP CONTROLFILE → OPEN RESETLOGS |
| Redo Log + 控制檔損壞 | 關閉庫 → 覆蓋控制檔 → MOUNT → DROP LOGFILE GROUP n; ADD LOGFILE GROUP n... → RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL → OPEN RESETLOGS |
DBMS_LOGMNR.START_LOGMNR 指定時間窗 → 查詢 V$LOGMNR_CONTENTS 獲取 SQL_REDO/SQL_UNDO → 執行修復。所有邏輯恢復結束後,**務必對原庫執行全備份**。