萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 系統崩潰後資料庫災難恢復:LVM 掛載備份與 Oracle 重建實戰

Linux 系統核心崩潰、硬體故障或檔案系統損壞導致無法開機時,資料庫檔案的搶救與恢復是運維團隊的最高優先級任務。本文提供基於救援模式 + LVM 手動掛載 + 檔案級備份 + Oracle 重建的標準化災難恢復流程 (Runbook)。

一、災難現場評估與決策

災難恢復流程

二、標準恢復流程 (OS 崩潰、存儲完好)

階段 1:進入救援環境

  1. 插入 OS 安裝光碟/USB (版本必須與受損系統一致)
  2. 選擇 Troubleshooting → Rescue a [OS] system
  3. 選擇 Continue 自動掃描並掛載系統至 /mnt/sysimage
  4. 若自動失敗,手動掛載 (見下文)

階段 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 並還原

  1. 重新安裝相同版本 OS、相同磁碟分區佈局、相同 LVM VG/LV 名稱
  2. 安裝 Oracle Grid Infrastructure + Database 軟體 (相同版本、相同補丁集)
  3. 停止 Oracle 服務,還原備份檔案至對應 LV
  4. 修正檔案擁有者/權限:chown -R oracle:oinstall /u01/app/oracle/oradata
  5. 啟動 Listener、Database,執行 RECOVER DATABASE (若為非一致性備份)
  6. 驗證資料完整性:SELECT * FROM v$database_block_corruption;

三、關鍵工具與指令速查

故障類型症狀恢復策略
核心恐慌 / 開機掛起無法進入 OS,硬體正常救援模式掛載 LVM → 備份資料庫檔案 → 重裝 OS → 還原
檔案系統損壞fsck 報錯、掛載失敗唯讀掛載 → ddrescue 鏡像整盤 → 掛載鏡像備份
儲存硬體故障RAID 降級、磁碟離線更換硬體 → 重建 RAID → 從異地備份還原
邏輯錯誤 (TRUNCATE/DROP)OS 正常,資料誤刪閃回技術 / 時間點恢復 (PITR) / 邏輯備份還原
任務指令
掃描 LVMvgscan --mknodes / pvscan / lvscan
激活 VGvgchange -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;

五、預防性架構建議

  1. 異地備份:每日 RMAN 備份至異地存儲 (NEC/S3/NFS),保留 30 天
  2. Data Guard 實體備援:異地同步/非同步待機資料庫,RPO=0/RTO=分鐘級
  3. 快照備份:存儲層面快照 (NetApp SnapMirror, EMC SnapSure, LVM 快照) 輔助秒級恢復
  4. 定期演練:每季度完整災難恢復演練,驗證 RTO/RPO 指標
  5. 基礎設施即代碼:OS 安裝、LVM 佈局、Oracle 安裝參數化 (Ansible/Terraform),加速重建

災難恢復的核心不在「會不會修」,而在「有沒有備份」、「備份能不能還原」、「還原時間是否可接受」。建立標準化 Runbook、自動化備份驗證、定期演練,才是資料庫高可用的終極保障。

copyright © 萬盛學電腦網 all rights reserved