BBED標記壞塊以及修複壞塊,bbed標記
建立測試表:
ZBDBA@orcl11g>select * from zbdba;NAME------------------------------------------------------------zbdbahuihuiZBDBA@orcl11g>ZBDBA@orcl11g>ZBDBA@orcl11g>ZBDBA@orcl11g>ZBDBA@orcl11g>select rowid,dbms_rowid.rowid_object(rowid) robject, 2 dbms_rowid.rowid_relative_fno(rowid) fno, 3 dbms_rowid.rowid_block_number(rowid) bno, 4 dbms_rowid.rowid_row_number(rowid) rno from zbdba where rownum=1;ROWID ROBJECT FNO BNO RNO------------------ ---------- ---------- ---------- ----------AAASMNAAGAAAAC/AAA 74509 6 191 0
使用bbed修改塊狀態:
BBED> set file 6 block 191 FILE# 6 BLOCK# 191BBED> mapFile: /opt/oracle/oradata/orcl11g/zbdba01.dbf (6)Block: 191 Dba:0x018000bf------------------------------------------------------------KTB Data Block (Table/Cluster)struct kcbh, 20 bytes @0 struct ktbbh, 72 bytes @20 struct kdbh, 14 bytes @100 struct kdbt[1], 4 bytes @114 sb2 kdbr[2] @118 ub1 freespace[8047] @122 ub1 rowdata[19] @8169 ub4 tailchk @8188 BBED> p kcbhstruct kcbh, 20 bytes @0 ub1 type_kcbh @0 0x06 ub1 frmt_kcbh @1 0xa2 ub1 spare1_kcbh @2 0x00 ub1 spare2_kcbh @3 0x00 ub4 rdba_kcbh @4 0x018000bf ub4 bas_kcbh @8 0x005036cd ub2 wrp_kcbh @12 0x0000 ub1 seq_kcbh @14 0x01 ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV) ub2 chkval_kcbh @16 0x426d ub2 spare3_kcbh @18 0x0000BBED> modify /x ff offset 14Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) yFile: /opt/oracle/oradata/orcl11g/zbdba01.dbf (6)Block: 191 Offsets: 14 to 525 Dba:0x018000bf------------------------------------------------------------------------ff066d42 00000100 00000d23 01009636 50000000 00000200 3200b800 8001130002001800 0000e90b 80021100 38000220 0000cd36 50000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000001 0200ffff 1600851f6f1f6f1f 00000200 8f1f851f 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000<32 bytes per line>BBED> p kcbhstruct kcbh, 20 bytes @0 ub1 type_kcbh @0 0x06 ub1 frmt_kcbh @1 0xa2 ub1 spare1_kcbh @2 0x00 ub1 spare2_kcbh @3 0x00 ub4 rdba_kcbh @4 0x018000bf ub4 bas_kcbh @8 0x005036cd ub2 wrp_kcbh @12 0x0000 ub1 seq_kcbh @14 0xff ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV) ub2 chkval_kcbh @16 0x426d ub2 spare3_kcbh @18 0x0000BBED> sum applyCheck value for File 6, Block 191:current = 0x4293, required = 0x4293
再回資料庫查看該表:
ZBDBA@orcl11g>select * from zbdba;select * from zbdba *ERROR at line 1:ORA-01578: ORACLE data block corrupted (file # 6, block # 191)ORA-01110: data file 6: '/opt/oracle/oradata/orcl11g/zbdba01.dbf'
常規壞塊的處理方式:
1、event 10231
2、rowid抽取
3、DBMS_REPAIR
這裡我用bbed修複該塊:
BBED> p kcbhstruct kcbh, 20 bytes @0 ub1 type_kcbh @0 0x06 ub1 frmt_kcbh @1 0xa2 ub1 spare1_kcbh @2 0x00 ub1 spare2_kcbh @3 0x00 ub4 rdba_kcbh @4 0x018000bf ub4 bas_kcbh @8 0x005036cd ub2 wrp_kcbh @12 0x0000 ub1 seq_kcbh @14 0xff ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV) ub2 chkval_kcbh @16 0x4293 ub2 spare3_kcbh @18 0x0000BBED> p tailchkub4 tailchk @8188 0x36cd0601
這裡tailchk資訊正確,無需修改
BBED> modify /x 01 offset 14Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) yFile: /opt/oracle/oradata/orcl11g/zbdba01.dbf (6)Block: 191 Offsets: 14 to 525 Dba:0x018000bf------------------------------------------------------------------------01069342 00000100 00000d23 01009636 50000000 00000200 3200b800 8001130002001800 0000e90b 80021100 38000220 0000cd36 50000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000001 0200ffff 1600851f6f1f6f1f 00000200 8f1f851f 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000<32 bytes per line>BBED> p kcbhstruct kcbh, 20 bytes @0 ub1 type_kcbh @0 0x06 ub1 frmt_kcbh @1 0xa2 ub1 spare1_kcbh @2 0x00 ub1 spare2_kcbh @3 0x00 ub4 rdba_kcbh @4 0x018000bf ub4 bas_kcbh @8 0x005036cd ub2 wrp_kcbh @12 0x0000 ub1 seq_kcbh @14 0x01 ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV) ub2 chkval_kcbh @16 0x4293 ub2 spare3_kcbh @18 0x0000BBED> sum applyCheck value for File 6, Block 191:current = 0x426d, required = 0x426dBBED> verifyDBVERIFY - Verification startingFILE = /opt/oracle/oradata/orcl11g/zbdba01.dbfBLOCK = 191DBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 1Total Blocks Failing (Data) : 0Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 0Total Blocks Influx : 0Message 531 not found; product=RDBMS; facility=BBED
再次去資料庫查詢:
ZBDBA@orcl11g>select * from zbdba;NAME------------------------------------------------------------zbdbahuihui
u盤有壞塊可以不可以不修複?
壞塊 數量少,是可以修複的, 方法是 把隨身碟量產一次,使隨身碟成為系統啟動盤;
【注意:是"量產" 隨身碟 】
壞塊多的話,應該是不可能修複的,除非拿到生產廠家去修複~~~~~~
怎隱藏壞塊
你硬碟上的資料要是無關緊要,就先完全格式化一下,這樣可以標記出壞扇區,再執行Scandisk/all;如果要保留資料,那就用Scandisk/all掃描一遍硬碟,讓其標記出壞扇區。然後按Pause暫停掃描,現在可以看到有幾個用紅色“B”標記的壞塊,這就開始修複工作。
首先,記下每個壞塊在這個圖中的相對位置,即每個壞塊之前的“好塊”有多大,占整個硬碟的百分幾,得出這些資料後,就可到PQMagic中進行分區了。以我的硬碟(3.2G)為例來進行說明。
壞塊前面的好塊占整個硬碟的百分比150%22.5%第一個壞塊之前的好塊大小為50%×3.2G=1.6G;第二個壞塊之前的好塊大小為2.5%×3.2G=80M;剩下的部分為完好的扇區大小為1.52G。於是先將硬碟歸划出這三個分區,再大致計算一下一個壞塊大約為幾M,在包含有壞塊的分區中將其分離出,並隱藏。如果覺得計算壞塊大小麻煩,那就這樣做:估計一下壞塊大小,比如說40M(起先大一些沒關係),然後將其分隔開,能順利完成,表明沒碰到壞塊,且壞塊已被分到新分區中,為40M,若覺得丟掉40M太浪費了,還可以將此分區縮小,看看壞塊大約靠近哪邊,就往遠離壞塊的一邊先縮排,一點一點的縮小,直到碰到壞塊不能改變大小。這樣做,運氣好的話,可以將壞塊縮到很小的範圍,不過不推薦將壞區縮得太小,因為如果太小,使用資料時,壞塊有可能影響到好的扇區,引起更多的壞塊。當今的硬碟都如此巨大,丟掉一兩百兆空間算什麼,關鍵是能安全使用硬碟的其它部分。
這種方法很有效,避免了計算大量資料的煩腦,且不易出錯,容易操作。這是我在自己修理硬碟時發現的方法,感覺不錯,拿出來與大家共用。