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

Oracle 緊急故障處理實戰:控制檔、重做日誌、資料檔與表空間損壞完整恢復指南

     編輯:Oracle 資料庫基礎

故障處理原則

Oracle 物理結構故障源於硬體損壞或人為誤操作。處理前必須先排除硬體問題,確認無硬體故障後再依標準流程恢復。

1. 控制檔損壞

控制檔記錄資料庫名稱、字元集、資料檔/日誌檔位置等關鍵配置。損壞會導致資料庫異常關閉且無法啟動。可透過 $ORACLE_BASE/admin/bdump/alert_<SID>.ora 定位損壞檔案。

單一控制檔損壞

  1. 關閉資料庫:SHUTDOWN IMMEDIATE;
  2. 查閱 init<SID>.ora 確認所有控制檔路徑
  3. 以 OS 指令用正確控制檔覆蓋損壞檔
  4. 啟動資料庫:STARTUP;
  5. 執行完整備份

所有控制檔遺失

  1. 關閉資料庫
  2. 從備份還原最近控制檔(磁帶或 RMAN)
  3. 產生重建腳本:
    STARTUP MOUNT;
    ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS;
    
  4. 修改產生的 trace 檔,調整為最新資料庫結構,存為 createcontrol.sql
  5. 重建控制檔:
    SHUTDOWN ABORT;
    STARTUP NOMOUNT;
    @createcontrol.sql;
    
  6. 執行完整備份

2. 重做日誌檔損壞

所有 DML 皆記錄於重做日誌。損壞分三種狀態處理:

  • 非啟用狀態: ALTER DATABASE DROP LOGFILE GROUP n; 後 ADD LOGFILE GROUP n ...
  • 啟用但非當前: ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n;
  • 當前啟用日誌: 同樣 CLEAR UNARCHIVED,若失敗則需執行時間點不完全恢復

處理後 ALTER DATABASE OPEN; 並全備。

3. 資料檔損壞

非 SYSTEM 表空間資料檔

  1. 確認損壞檔名:SELECT name FROM v$datafile WHERE status='INVALID';
  2. 離線該檔:ALTER DATABASE DATAFILE '...' OFFLINE;
  3. 從備份還原該資料檔
  4. 恢復:ALTER DATABASE RECOVER DATAFILE '...';
  5. 上線:ALTER DATABASE DATAFILE '...' ONLINE;
  6. 全備

SYSTEM 表空間資料檔

  1. STARTUP MOUNT;
  2. 從備份還原
  3. ALTER DATABASE RECOVER DATAFILE '...';
  4. ALTER DATABASE OPEN;
  5. 全備

4. 表空間損壞

流程與資料檔類似,以 ALTER TABLESPACE ... OFFLINE/ONLINE 及 RECOVER TABLESPACE 操作。SYSTEM 表空間需 MOUNT 模式下恢復。

5. 整個資料庫所有檔案損壞(災難恢復)

  • 無磁帶庫: 解包備份 → STARTUP MOUNT → RECOVER DATABASE UNTIL CANCEL → ALTER DATABASE OPEN RESETLOGS → 全備
  • 有磁帶庫: STARTUP NOMOUNT → 執行 RMAN 恢復腳本 → ALTER DATABASE OPEN RESETLOGS → 全備

6. 經典冷備份場景下的組合故障恢復

針對「資料檔+歸檔日誌+控制檔」同時遺失、「資料檔+重做日誌+控制檔」同時遺失、「重做日誌+控制檔」同時遺失、「僅歸檔日誌遺失」四種組合,提供分步驟恢復腳本,核心在於利用同步冷備份檔案配合 RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL 並 OPEN RESETLOGS。

7. 邏輯結構故障(人為誤操作)恢復三法

  1. EXP/IMP 工具: 建立暫存用戶 → 導入備份檔 → DML 還原資料 → 刪除暫存用戶
  2. LogMiner 分析日誌: 建立字典 → 加入日誌檔 → 啟動分析 → 從 V$LOGMNR_CONTENTS 取得 SQL_REDO/SQL_UNDO → 執行修復 → 結束 LogMiner → 全備
  3. 備份還原至新機器: 新機安裝軟體 → 依時間點恢復 → OPEN RESETLOGS → 取出遺失資料 → DML 還原原庫 → 全備

總結

建立完善備份策略、定期演練恢復流程、監控 Fast Recovery Area 使用率,是避免 ORA-00257 等空間不足錯誤的關鍵。Oracle 10g 引入 Flash Recovery Area 另行限制歸檔空間,管理員須特別留意其配額設定。

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