資料庫三大運行狀態與恢復前提
| 狀態 | 操作內容 | 適用場景 |
| NOMOUNT | 讀取參數檔、啟動 SGA、背景進程 | 建立資料庫、恢復控制檔、RMAN 還原控制檔 |
| MOUNT | 讀取控制檔、獲取物理結構 | 備份控制檔、歸檔模式切換、資料檔/Redo 恢復、不完全恢復 |
| OPEN | 檢查檔案一致性、前滾/回滾、開放用戶存取 | 正常業務、邏輯備份匯出 |
三大備份類型
- 冷備份:資料庫關閉(SHUTDOWN NORMAL/IMMEDIATE)下複製**所有資料檔、控制檔、線上 Redo、參數檔**。最簡單、最安全、需停機。
- 熱備份:資料庫 OPEN 狀態下,表空間進入 BACKUP MODE 複製資料檔、**必須歸檔模式**。業務不停機,操作複雜度高。
- 邏輯備份:Data Pump Export (`expdp`),按表/用戶/全庫導出,**資料庫需 OPEN**,RESTRICTED SESSION 保證一致性。跨版本/平台遷移首選。
恢復分類:完全 vs 不完全
- 完全恢復:套用所有 Redo,恢復至故障時刻,**零遺失**。首選方案。
- 不完全恢復:恢復至過去某時間點/SCN,**部分遺失**。適用:歸檔缺失、誤操作回溯、測試環境刷新。
**核心原理:** 恢復 = **前滾** + **回滾**。只能從舊備份前滾至目標點,**不能**從新備份回滾至過去。
五大錯誤分類與自動/手工恢復策略
| 錯誤類別 | 典型案例 | 恢復責任 | 策略 |
| SQL 語句失敗 | 約束違反、空間不足 | Oracle 自動 | 語句級回滾,無需 DBA |
| 進程/會話失敗 | 用戶進程異常終止 | Oracle 自動 | PMON 清理、釋放鎖、回滾事務 |
| 實例失敗 | 掉電、SHUTDOWN ABORT | Oracle 自動 | 下次啟動 SMON 實例恢復 |
| 用戶操作失敗 | 誤刪表、誤更新 | DBA 手工 | TSPITR(表空間時間點恢復)、LogMiner 反向 SQL、不完全恢復 |
| 儲存設備失敗 | 磁碟壞軌、控制檔損壞 | DBA 手工 | 分檔案類型恢復(見下文) |
儲存設備失敗:分檔案類型恢復實戰
1. 控制檔
- 多路徑鏡像:單一損壞 → 註釋參數檔故障路徑 → 重啟。
- 全損:NOMOUNT → `CREATE CONTROLFILE` 重建(需 Redo/Datafile 路徑、MAX 參數)或 覆蓋備份控制檔 → `RECOVER DATABASE USING BACKUP CONTROLFILE` → `OPEN RESETLOGS`。
2. 線上 Redo Log
- 非活動組損壞:有鏡像成員 → 好成員覆蓋壞成員 → `ALTER DATABASE CLEAR LOGFILE GROUP n`;無鏡像 → `CLEAR UNARCHIVED LOGFILE GROUP n`(需備份後)。
- 當前組損壞:需不完全恢復 → 從備份還原所有資料檔 → MOUNT → `RECOVER DATABASE UNTIL CANCEL` → `OPEN RESETLOGS` → **立即冷備份**。**已提交資料可能遺失**,生產環境**必須多成員多路徑**。
3. 資料檔
| 類型 | 恢復狀態 | 關鍵步驟 |
| SYSTEM 表空間 | 必須 MOUNT | 還原檔案 → `RECOVER DATABASE/DATAFILE` → OPEN |
| 非 SYSTEM 無 Undo | MOUNT 或 OPEN | OPEN 狀下:`ALTER DATABASE DATAFILE ... OFFLINE` → OPEN 業務 → `RECOVER DATAFILE` → `ONLINE` |
| 非 SYSTEM 含 Undo | MOUNT 或 OPEN | OPEN 狀下需建立**臨時 Undo Segment**(SYSTEM 表空間)維持 DML,恢復後手工 ONLINE 原 Undo |
無備份但控制檔建立早於資料檔且無 RESETLOGS:`ALTER DATABASE CREATE DATAFILE ... AS ...` 重建空檔 → `RECOVER` 全量前滾。
4. 歸檔日誌
- 損壞/路徑不可用 → SHUTDOWN → **立即冷備份** → 修改參數檔歸檔目的地 → 啟動 → **新備份成為基準**,後續恢復不再依賴舊歸檔。
- 生產環境**必須**配置多路徑歸檔(`LOG_ARCHIVE_DEST_1..5`、`LOG_ARCHIVE_DUPLEX_DEST`)甚至遠端傳輸(Data Guard/NFS)。
恢復操作四大鐵律
- 災難發生後,**先完整冷備份**再動手(防操作失誤無退路)。
- 使用 `RESETLOGS` 開啟後,**立即完整冷備份**(舊備份失效)。
- 恢復過程中**絕不可**讓備份 Redo 覆蓋當前 Redo。
- 複雜環境**強制使用 RMAN**(目錄庫、腳本化、驗證、並行、壓縮、加密)。