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

Oracle 物理結構故障完整恢復手冊:控制檔、Redo Log、資料檔、表空間與全庫災難恢復實戰

     編輯:Oracle 資料庫基礎

前言:故障分類與處理原則

物理結構故障源於硬體損壞或人為誤操作。**首要原則:硬體故障先修硬體**。無硬體問題前提下,依故障對象分類施策。所有恢復操作建議在備份完成後執行,確保可回滾。

一、控制檔損壞恢復

1. 單一控制檔損壞 (多路鏡像環境)

  1. SHUTDOWN IMMEDIATE;
  2. 檢視 init.ora 確認所有控制檔路徑。
  3. OS 指令以完好控制檔覆蓋損壞檔:cp good.ctl bad.ctl
  4. STARTUP;
  5. 全庫備份。

2. 全部控制檔損壞

  1. SHUTDOWN IMMEDIATE;
  2. 從備份恢復最近控制檔 (磁帶/ RMAN)。
  3. STARTUP MOUNT; → ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS;
  4. 編輯產生的 Trace 檔,提取 CREATE CONTROLFILE 區段,修正至最新資料庫結構 (新增/刪除資料檔、日誌組等),存為 create_control.sql。
  5. SHUTDOWN ABORT; → STARTUP NOMOUNT; → @create_control.sql;
  6. 全庫備份。

二、Redo Log 損壞恢復

查詢狀態:SELECT * FROM V$LOGFILE; SELECT * FROM V$LOG;
狀態:INVALID (損壞)、INACTIVE、ACTIVE、CURRENT。

損壞日誌狀態恢復指令
INACTIVE (非作用中)ALTER DATABASE DROP LOGFILE GROUP n;
ALTER DATABASE ADD LOGFILE GROUP n ('path') SIZE m;
ACTIVE (作用中非當前)ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n;
CURRENT (當前作用中)ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n; 失敗則 不完全恢復 (時間點恢復)

完成後 ALTER DATABASE OPEN; + 全庫備份。

三、資料檔損壞恢復

非 SYSTEM 表空間 (資料庫可 OPEN)

  1. SELECT NAME FROM V$DATAFILE WHERE STATUS='OFFLINE'; (或 RECOVER 狀態)
  2. ALTER DATABASE DATAFILE 'path' OFFLINE;
  3. 從備份恢復該檔 (OS copy / RMAN)。
  4. ALTER DATABASE RECOVER DATAFILE 'path';
  5. ALTER DATABASE DATAFILE 'path' ONLINE;
  6. 全庫備份。

SYSTEM 表空間 (資料庫需 MOUNT)

  1. STARTUP MOUNT;
  2. 恢復檔案 (OS copy / RMAN)。
  3. ALTER DATABASE RECOVER DATAFILE 'path';
  4. ALTER DATABASE OPEN;
  5. 全庫備份。

四、表空間損壞恢復

邏輯同資料檔,單位為表空間:

-- 非 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;

五、全庫所有檔案損壞 (災難恢復)

無帶庫環境 (冷備份磁帶)

  1. 解包所有檔案至原路徑。
  2. STARTUP MOUNT;
  3. RECOVER DATABASE UNTIL CANCEL; → 輸入 CANCEL
  4. ALTER DATABASE OPEN RESETLOGS;
  5. 全庫冷備份。

帶庫環境 (RMAN)

  1. STARTUP NOMOUNT;
  2. RMAN> RUN { RESTORE CONTROLFILE; RESTORE DATABASE; RECOVER DATABASE; } (或執行腳本 @hot_database_restore.rcv)
  3. ALTER DATABASE OPEN RESETLOGS;
  4. 全庫備份。

六、經典緊急場景組合恢復 (有最近冷備份前提)

場景關鍵步驟
資料檔 + 控制檔損壞,無新 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

七、唯讀 Archive Log 損壞應對

  1. 立即全庫熱備份 (RMAN/OS copy)。
  2. 或正常關庫冷備份。
  3. 風險選項:不備份繼續跑,賭下個備份窗口前無需恢復需求。**極不推薦**。

八、邏輯錯誤恢復三大法 (物理結構完好)

  1. Exp/Imp:建臨時用戶 → 導入舊導出檔 → DML 修復 → 刪臨時用戶。
  2. LogMiner:建數據字典 → 加入目標日誌/歸檔 → DBMS_LOGMNR.START_LOGMNR 指定時間窗 → 查詢 V$LOGMNR_CONTENTS 獲取 SQL_REDO/SQL_UNDO → 執行修復。
  3. 備份拉庫:新機器裝庫 → 基於時間點恢復至誤操作前 → 導出遺失資料 → 遷回主庫。

所有邏輯恢復結束後,**務必對原庫執行全備份**。

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