[BBED]斷電異常後修復Oracle資料檔案(ORA-00702: bootstrap verison)

xysoul_雲龍發表於2021-03-27

  首先,感謝網路時代及各位技術分享者,雖環境各有不同,提供了很多思路和技術點,讓後來者更好的去實踐。


 環境:Windows2012 資料中心版,Oracle11.2.0.4 單機

問題:

 啟動資料庫時,報如下錯誤

ORA-00704: bootstrap process failure
ORA-00702: bootstrap verison '' inconsistent with version '8.0.0.0.0'
Error 704 happened during db open, shutting down database
USER (ospid: 189078): terminating the instance due to error 704
Instance terminated by USER, pid = 189078

問題背景:系統掉電,重啟後就出現該問題。


警告日誌也沒太多參考資訊,跟蹤啟動過程

--跟蹤語句U如下

alter session set events '10046 trace name context forever,level 12';
oradebug setmypid
alter session set events '10046 trace name context forever,level 12';
oradebug tracefile_name


檢視跟蹤檔案

--跟蹤檔案最後輸出資訊如下
EXEC #80694976:c=0,e=26374,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,plh=867914364,tim=4808628360
WAIT #80694976: nam='db file sequential read' ela= 672 file#=1 block#=520 blocks=1 obj#=59 tim=4808629202
WAIT #80694976: nam='db file scattered read' ela= 815 file#=1 block#=521 blocks=3 obj#=59 tim=4808651345
FETCH #80694976:c=0,e=23124,p=4,cr=5,cu=0,mis=0,r=0,dep=1,og=4,plh=867914364,tim=4808651593
STAT #80694976 id=1 cnt=0 pid=0 pos=1 obj=59 op='TABLE ACCESS FULL BOOTSTRAP$ (cr=5 pr=4 pw=0 time=23124 us)'
ORA-00704: ????????
ORA-00702: ?????? '' ??? '8.0.0.0.0' ???
ORA-00704: ????????
ORA-00702: ?????? '' ??? '8.0.0.0.0' ???
*** 2019-11-20 21:47:07.570
USER (ospid: 324): terminating the instance due to error 704
EXEC #80717456:c=203125,e=2024015,p=12,cr=6,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=4809376651
ERROR #80717456:err=1092 tim=4809376759


意思,建立完表 BOOTSTRAP$ 後,做掃描,出現問題,讀塊讀到521。

檢查下塊520/521 屬於什麼物件(透過正常的資料庫查詢結果)

如上圖,可以看到,物件 BOOTSTRAP$ 包括資料檔案1的520-523塊。


檢查下該物件內容


如上圖,可以看到版本顯示,還可以看到一些建立其他物件的語句,也就是說,該表包含了OBJ$,C_OBJ$,TAB$等基表的建立語句,本次問題就是在建立完成後無法掃描該表,。其他基表無法建立報錯


問題比較明顯,就是 BOOTSTRAP$壞了,需要修復。透過dbv檢查,並沒有發現壞塊,透過其他資料,可以嘗試用bbed 複製一個好的 BOOTSTRAP$ 塊到該資料檔案下。

用dbca建立一個測試庫(目的,平臺、資料庫版本一樣),建立完畢後,備份system01.dbf 資料檔案,刪除該測試庫。


使用bbed工具進行修復

需要注意的是,linux 、windows 資料檔案塊有區別,具體如下:

#windows


#linux


簡單說明,就是windows 資料檔案頭是從塊2開始(塊1是系統標識,bbed無權檢視),linux是從塊1開始(塊0 是系統標識)。

例如: 在資料庫裡識別的520,linux下 bbed 寫 block 520,windows 需要寫block 521.


此為windows平臺,操作如下:

1 D:\bbed_df\SYSTEM01_new.DBF
20 D:\bbed_df\SYSTEM01.DBF
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_1
bbed PASSWORD=blockedit mode=edit blocksize=8192 listfile=D:\bbed_win\bbed_1.txt
copy file 1 block 521 to file 20 block 521
copy file 1 block 522 to file 20 block 522
copy file 1 block 523 to file 20 block 523
copy file 1 block 524 to file 20 block 524



如上圖,我們檢查的是 檔案20 塊 524, 驗證時, 寫的system01.dbf 的塊標識是523。


注:bbed使用網路上一堆資料,Oracle11g已經不支援了,需要用Oracle10g甚至9i的一些相關包,可以儲存備用,Windows毛病多,用的時候即使系統有環境變數,也需要再設定下ORACLE_HOME。

     bbed 功能確實很強大,也是在沒有備份情況下,很好的修復工具,這也是最後的嘗試。


     不論如何,建議定期備份,注意不是資料泵/exp方式,用rman,資料庫太多,就採購備份軟體,集中備份,萬一出現,備份那點成本也就不算成本了。


   備份很重要,相當重要  非常重要!


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29487349/viewspace-2765103/,如需轉載,請註明出處,否則將追究法律責任。

相關文章