| 故障類型 | 症狀 | 恢復策略 |
| 核心恐慌 / 開機掛起 | 無法進入 OS,硬體正常 | 救援模式掛載 LVM → 備份資料庫檔案 → 重裝 OS → 還原 |
| 檔案系統損壞 | fsck 報錯、掛載失敗 | 唯讀掛載 → ddrescue 鏡像整盤 → 掛載鏡像備份 |
| 儲存硬體故障 | RAID 降級、磁碟離線 | 更換硬體 → 重建 RAID → 從異地備份還原 |
| 邏輯錯誤 (TRUNCATE/DROP) | OS 正常,資料誤刪 | 閃回技術 / 時間點恢復 (PITR) / 邏輯備份還原 |
二、標準恢復流程 (OS 崩潰、存儲完好)
階段 1:進入救援環境
- 插入 OS 安裝光碟/USB (版本必須與受損系統一致)
- 選擇 Troubleshooting → Rescue a [OS] system
- 選擇 Continue 自動掃描並掛載系統至
/mnt/sysimage
- 若自動失敗,手動掛載 (見下文)
階段 2:手動掃描與激活 LVM (關鍵步驟)
# 1. 掃描 VG
vgscan --mknodes
# 輸出範例:Found volume group "vg_oradb" using metadata type lvm2
# 2. 查看 VG 狀態
vgdisplay vg_oradb
# 確認 VG 狀態為 "readable" 或 "writable"
# 3. 激活 VG (關鍵!救援模式預設不自動激活)
vgchange -ay vg_oradb
# 輸出:1 logical volume(s) in volume group "vg_oradb" now active
# 4. 查看 LV
lvdisplay vg_oradb
# 確認 LV 路徑,如 /dev/vg_oradb/lv_oradata, /dev/vg_oradb/lv_fra, /dev/vg_oradb/lv_redolog
階段 3:掛載邏輯卷並備份資料庫檔案
# 建立掛載點
mkdir -p /mnt/recover/oradata
mkdir -p /mnt/recover/fra
mkdir -p /mnt/recover/redolog
# 掛載 LV (建議唯讀掛載防止二次損壞)
mount -o ro /dev/vg_oradb/lv_oradata /mnt/recover/oradata
mount -o ro /dev/vg_oradb/lv_fra /mnt/recover/fra
mount -o ro /dev/vg_oradb/lv_redolog /mnt/recover/redolog
# 確認關鍵檔案存在
ls -la /mnt/recover/oradata/*.dbf
ls -la /mnt/recover/redolog/*.log
ls -la /mnt/recover/fra/
階段 4:資料外傳 (網路/移動儲存)
# 方案 A:rsync 過網路 (推薦,支援斷點續傳、壓縮、驗證)
rsync -avz --progress /mnt/recover/ backup-user@backup-server:/backup/oracle/$(hostname)/
# 方案 B:tar + ssh 管道 (單檔案流)
tar czf - /mnt/recover/oradata | ssh backup-user@backup-server "cat > /backup/oradata_$(date +%F).tar.gz"
# 方案 C:掛載外接 USB/NFS
mount /dev/sdb1 /mnt/usb
cp -a /mnt/recover/* /mnt/usb/
umount /mnt/usb
階段 5:重裝 OS 並還原
- 重新安裝相同版本 OS、相同磁碟分區佈局、相同 LVM VG/LV 名稱
- 安裝 Oracle Grid Infrastructure + Database 軟體 (相同版本、相同補丁集)
- 停止 Oracle 服務,還原備份檔案至對應 LV
- 修正檔案擁有者/權限:
chown -R oracle:oinstall /u01/app/oracle/oradata
- 啟動 Listener、Database,執行
RECOVER DATABASE (若為非一致性備份)
- 驗證資料完整性:
SELECT * FROM v$database_block_corruption;
三、關鍵工具與指令速查
| 任務 | 指令 |
| 掃描 LVM | vgscan --mknodes / pvscan / lvscan |
| 激活 VG | vgchange -ay / vgchange -ay (全部) |
| 唯讀掛載 | mount -o ro /dev/vg/lv /mnt |
| 檢查檔案系統 | xfs_repair -n /dev/vg/lv (XFS) / fsck -n /dev/vg/lv (ext4) |
| 磁碟鏡像 (損壞盤面) | ddrescue -f -n /dev/sdX /mnt/backup/disk.img /mnt/backup/disk.map |
| 從鏡像掛載分區 | losetup -fP /mnt/backup/disk.img → mount /dev/loop0p2 /mnt |
四、Oracle 具體恢復場景
場景 A:冷備份 (資料庫正常關閉後備份)
# 還原所有 datafile、controlfile、redolog
# 啟動資料庫
STARTUP MOUNT;
ALTER DATABASE OPEN; -- 無需 RECOVER
場景 B:熱備份 / 非一致性備份 (需應用 Redo)
STARTUP MOUNT;
RECOVER DATABASE; -- 自動應用線上/歸檔 redo
ALTER DATABASE OPEN;
場景 C:控制檔遺失 / 重建控制檔
STARTUP NOMOUNT;
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ARCHIVELOG
MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/ORCL/redo01.log' SIZE 500M,
GROUP 2 '/u01/app/oracle/oradata/ORCL/redo02.log' SIZE 500M
DATAFILE
'/u01/app/oracle/oradata/ORCL/system01.dbf',
'/u01/app/oracle/oradata/ORCL/sysaux01.dbf',
...
CHARACTER SET AL32UTF8;
RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
ALTER DATABASE OPEN RESETLOGS;
五、預防性架構建議
- 異地備份:每日 RMAN 備份至異地存儲 (NEC/S3/NFS),保留 30 天
- Data Guard 實體備援:異地同步/非同步待機資料庫,RPO=0/RTO=分鐘級
- 快照備份:存儲層面快照 (NetApp SnapMirror, EMC SnapSure, LVM 快照) 輔助秒級恢復
- 定期演練:每季度完整災難恢復演練,驗證 RTO/RPO 指標
- 基礎設施即代碼:OS 安裝、LVM 佈局、Oracle 安裝參數化 (Ansible/Terraform),加速重建
災難恢復的核心不在「會不會修」,而在「有沒有備份」、「備份能不能還原」、「還原時間是否可接受」。建立標準化 Runbook、自動化備份驗證、定期演練,才是資料庫高可用的終極保障。
copyright ©
萬盛學電腦網 all rights reserved