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

Oracle 操作失誤大恢復續篇:控制文件重建 RESETLOGS、ORA-600 kcvhvdf_1、BBED 修復文件頭、事件 10015 推 SCN 完整鏈路

     編輯:Oracle 資料庫基礎

前言

承接上文 (ID 93154),記錄誤執行 ZERODBID(0) 後,控制文件重建 RESETLOGS 遭遇 ORA-600 [kcvhvdf_1],轉而採用 BBED 批量修復數據文件頭 DBID 與 Fuzzy 標記,再次重建控制文件成功,但 OPEN RESETLOGS 卡在 ORA-600 [2662] (SCN 不一致),最終通過事件 10015 推進 SCN 完成恢復的完整技術鏈路。

關鍵轉折:BBED 批量修復數據文件頭

針對所有數據文件 (system, undo, sysaux, users, example, company, streams) 執行:


BBED> SET FILENAME '.../system01.dbf'
BBED> SET BLOCK 1
BBED> MODIFY /X 0x58C7A0F7 OFFSET 28  -- DBID 1488207495
BBED> MODIFY /X 0x2000 OFFSET 20      -- Fuzzy=正常關閉
-- 重複其餘 7 個文件

二次重建控制文件 (成功)


STARTUP NOMOUNT;
CREATE CONTROLFILE REUSE DATABASE "LDBRA" RESETLOGS ARCHIVELOG
  MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292
  LOGFILE
    GROUP 1 '/ora10g/app/oradata/ldbra/redo01.log' SIZE 50M,
    GROUP 2 '/ora10g/app/oradata/ldbra/redo02.log' SIZE 50M,
    GROUP 3 '/ora10g/app/oradata/ldbra/redo03.log' SIZE 50M
  DATAFILE
    '/ora10g/app/oradata/ldbra/system01.dbf',
    '/ora10g/app/oradata/ldbra/undotbs01.dbf',
    '/ora10g/app/oradata/ldbra/sysaux01.dbf',
    '/ora10g/app/oradata/ldbra/users01.dbf',
    '/ora10g/app/oradata/ldbra/example01.dbf',
    '/ora10g/app/product/10.2.0/db_1/dbs/company.dbf',
    '/ora10g/app/product/10.2.0/db_1/dbs/streams.dbf'
  CHARACTER SET ZHS16GBK;
-- Control file created.

OPEN RESETLOGS 遭遇 ORA-600 [2662]


ALTER DATABASE OPEN RESETLOGS;
-- 實例掛起,Alert 日志:
-- ORA-00600: internal error code, arguments: [2662], [2268], [3799096903], [2268], [3799098345], [8388617], [], []

參數解讀:
[2662] = SCN 推進錯誤 (控制文件 SCN < 數據文件 SCN)
2268 / 3799096903 = 控制文件 SCN (基數/換算值)
2268 / 3799098345 = 數據文件 SCN (較大)
需將控制文件 SCN 推進至 ≥ 3799098345。

事件 10015 強制推進 SCN (關鍵一招)


-- 在 MOUNT 狀態下執行
ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 1';
-- 或指定目標 SCN (高版本支持)
-- ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 3799099000';
ALTER DATABASE OPEN RESETLOGS;
-- Database altered.

實例成功開啟!

收尾:添加臨時文件


ALTER TABLESPACE TEMP ADD TEMPFILE '/ora10g/app/oradata/ldbra/temp01.dbf' SIZE 50M REUSE;
-- Tablespace altered.

完整恢復鏈路回顧

  1. 誤執行 ZERODBID(0) → DBID 歸零 → CKPT 終止實例。
  2. 常規重建控制文件失敗 (ORA-600 kcvhvdf_1)。
  3. BBED 修改所有數據文件頭:KCCFHDBI (DBID) + KCCFHFLG (Fuzzy=0x2000)。
  4. 再次重建控制文件 RESETLOGS 成功。
  5. OPEN RESETLOGS 卡 ORA-600 [2662] (SCN 滯後)。
  6. 會話級事件 10015 ADJUST_SCN 推進控制文件 SCN。
  7. OPEN RESETLOGS 成功 → 添加 TEMP 文件 → 恢復完成。

風險控制與最佳實踐

  • 全鏈路冷備份:每步操作前 OS 拷貝所有數據文件、控制文件、Redo Log。
  • BBED 僅讀練習:平時在測試庫用 BBED MODE=READ 熟悉文件頭結構,寫模式極謹慎。
  • 事件 10015 僅限 MOUNT 狀態會話級使用,不可寫入 SPFILE 影響全庫。
  • 事後驗證:DBV、ANALYZE ... VALIDATE STRUCTURE、核心業務查詢對比、導出導入關鍵表。
  • 根因治理:收回 SYS 直接調用內部包權限,變更 DBID 強制走 NID 流程並審批。

總結

從 DBID 歸零到實例正常開啟,跨越了「元數據修復 → 結構重建 → SCN 推進」三大關卡。這條鏈路雖屬極端個案,但其中的「備份先行、分層驗證、工具精通、流程固化」思維,普適於所有高難度故障恢復場景。

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