首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 災難級恢復實錄:主機宕機、磁盤越界訪問、控制文件損壞三重打擊下的數據搶救

     編輯:Oracle 資料庫相關知識

事故時間線

聖誕節前夕,某公司數據庫連環崩潰:

1. 主機宕機 + 磁盤越界錯誤

Dec 24 13:52:13 kernel: sda5: rw=0, want=18298437640, limit=163846872
Dec 24 13:52:13 kernel: attempt to access beyond end of device
... (大量同類錯誤,want 地址遠超 limit)

判斷:文件系統/磁盤控制器故障導致邏輯地址映射錯亂,數據文件物理損壞風險極高。

2. DBVERIFY 掃描大量壞塊

DBVERIFY - Verification starting : FILE = o1_mf_system_29448mn7_.dbf
Page 40 is influx - most likely media corrupt
Corrupt block relative dba: 0x00400028 (file 1, block 40)
Fractured block found during dbv:
type: 6 format: 2 rdba: 0x00400028
last change scn: 0x0000.18990f0e
consistency value in tail: 0xbc120601
check value in block header: 0xc0cb
computed block checksum: 0xb003
... (連續多頁報 Fractured block)

FRACTURED BLOCK 表示塊頭尾一致性校驗失敗,典型的介質損壞特徵。

3. 控制文件損壞導致無法 MOUNT

ALTER DATABASE MOUNT
Errors in file .../stat_ora_4630.trc:
ORA-00600: internal error code, arguments: [kccpb_sanity_check_2], [11258908], [10375171], [0x0], [], [], [], []
ORA-600 signalled during: ALTER DATABASE MOUNT...
Corrupt block 1 found during reading backup piece, file=/.../snapcf_stat.f, corr_type=2

ORA-600 [kccpb_sanity_check_2] 表明控制文件備份片讀取時校驗失敗,無法識別數據文件結構。

恢復策略研判 (待續 Part 2)

  1. 硬件層:更換故障磁盤/控制器,鎖定損壞 LUN,避免擴散。
  2. 文件系統層:fsck/chkdsk 修復元數據,盡量掛載唯讀搶數據。
  3. Oracle 層:
    • 若有 RMAN 備份 + 歸檔 → RESTORE CONTROLFILE → RECOVER DATABASE。
    • 無備份 → 重建控制文件 (CREATE CONTROLFILE) → RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL → 開啟 RESETLOGS。
    • 系統表空間壞塊 → 事件 10231 跳過導出核心表 → 重建系統對象 (極高風障,建議 Oracle Support 介入)。

教訓總結

  • 節假日變更凍結、巡檢加密、備份異地多副本 (3-2-1 原則)。
  • 磁盤監控 (SMART、RAID 狀態) 必須接入告警平台,「attempt to access beyond end of device」 早發現早處置。
  • 控制文件多路復用 (≥3 路徑、不同控制器/機架) 是生存底線。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved