本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger 的Oracle技术博客 本文链接地址: How to drop a Index with bbed? 这是oracle恢复课程的一点内容,有朋友在问,所以就贴出来,其实没有什么,很简单,供大家参考! 在某些情况下,o 本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger 的Oracle技术博客本文链接地址: How to drop a Index with bbed?这是oracle恢复课程的一点内容,有朋友在问,所以就贴出来,其实没有什么,很简单,供大家参考!在某些情况下,oracle的bootstrap$的一些对象出现异常之后,比如Index。我们无法进行rebuild,或许只能用一些极端的手段去将Index drop然后重建(当然还有其他的方法)。这里是利用bbed来drop Index的例子!++++ 创建测试表SQL> conn roger/rogerConnected.SQL> create table test_0824 as select object_id,object_name from dba_objects where rownum create index idx_test_0824 on test_0824(object_id);Index created.SQL>SQL> set autot traceonly expSQL> set lines 200SQL> select count(object_id) from test_0824;Execution Plan----------------------------------------------------------Plan hash value: 3721076966---------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |---------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 13 | 3 (0)| 00:00:01 || 1 | SORT AGGREGATE | | 1 | 13 | | || 2 | INDEX FAST FULL SCAN| IDX_TEST_0824 | 499 | 6487 | 3 (0)| 00:00:01 |---------------------------------------------------------------------------------------Note----- - dynamic sampling used for this statementSQL> SQL> select object_id from dba_objects where object_name='IDX_TEST_0824'; OBJECT_ID---------- 52969SQL> select dbms_rowid.rowid_object(rowid) obj#, 2 dbms_rowid.rowid_relative_fno(rowid) rfile#, 3 dbms_rowid.rowid_block_number(rowid) block#, 4 dbms_rowid.rowid_row_number(rowid) row# 5 from sys.ind$ where obj#=52969; OBJ# RFILE# BLOCK# ROW#---------- ---------- ---------- ---------- 2 1 21519 0SQL> conn /as sysdbaConnected.SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL>登录后复制可以看到,上面的SQL走了Index fast full scan,现在我们的目的就是把这个Index drop掉,让其走full table scan。下面我们开始利用BBED来写进行修改,如下步骤:+++++Session 2BBED> set file 1 block 21519 FILE# 1 BLOCK# 21519BBED> map File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 21519 Dba:0x0040540f------------------------------------------------------------ KTB Data Block (Table/Cluster) struct kcbh, 20 bytes @0 struct ktbbh, 72 bytes @20 struct kdbh, 14 bytes @92 struct kdbt[6], 24 bytes @106 sb2 kdbr[6] @130 ub1 freespace[7236] @142 ub1 rowdata[810] @7378 ub4 tailchk @8188 BBED> p *kdbr[0]rowdata[384]------------ub1 rowdata[384] @7762 0xacBBED> x /rnrowdata[384] @7762------------flag@7762: 0xac (KDRHFL, KDRHFF, KDRHFH, KDRHFK)lock@7763: 0x00cols@7764: 1kref@7765: 5mref@7767: 5hrid@7769:0x0040540f.0nrid@7775:0x0040540f.0col 0[4] @7781: 52968 BBED> p *kdbr[1]rowdata[256]------------ub1 rowdata[256] @7634 0x6cBBED> x /rnrowdata[256] @7634------------flag@7634: 0x6c (KDRHFL, KDRHFF, KDRHFH, KDRHFC)lock@7635: 0x00cols@7636: 36col 0[4] @7638: 52968col 1[2] @7643: 6col 2[2] @7646: 5col 3[4] @7649: 12363col 4[0] @7654: *NULL*col 5[0] @7655: *NULL*col 6[2] @7656: 2col 7[0] @7659: *NULL*col 8[2] @7660: 10col 9[2] @7663: 40col 10[2] @7666: 1col 11[3] @7669: 255col 12[6] @7673: 1073741825col 13[38] @7680: 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2d 0x2dcol 14[0] @7719: *NULL*col 15[0] @7720: *NULL*col 16[0] @7721: *NULL*col 17[0] @7722: *NULL*col 18[0] @7723: *NULL*col 19[0] @7724: *NULL*col 20[0] @7725: *NULL*col 21[0] @7726: *NULL*col 22[0] @7727: *NULL*col 23[0] @7728: *NULL*col 24[0] @7729: *NULL*col 25[0] @7730: *NULL*col 26[2] @7731: 2col 27[2] @7734: 2col 28[6] @7737: 536870912col 29[1] @7744: 0col 30[3] @7746: 736col 31[0] @7750: *NULL*col 32[0] @7751: *NULL*col 33[0] @7752: *NULL*col 34[0] @7753: *NULL*col 35[7] @7754: ######################################### BBED> p *kdbr[2]rowdata[0]----------ub1 rowdata[0] @7378 0x6cBBED> x /rnrowdata[0] @7378----------flag@7378: 0x6c (KDRHFL, KDRHFF, KDRHFH, KDRHFC)lock@7379: 0x02cols@7380: 33col 0[4] @7382: 52969col 1[4] @7387: 52969col 2[2] @7392: 6col 3[2] @7395: 5col 4[4] @7398: 12371col 5[1] @7403: 0col 6[2] @7405: 1col 7[2] @7408: 10col 8[2] @7411: 2col 9[3] @7414: 255col 10[0] @7418: *NULL*col 11[2] @7419: 1col 12[2] @7422: 2col 13[1] @7425: 0col 14[2] @7427: 1col 15[2] @7430: 2col 16[3] @7433: 499col 17[2] @7437: 1col 18[2] @7440: 1col 19[2] @7443: 2col 20[7] @7446: #########################################col 21[3] @7454: 499col 22[3] @7458: 499col 23[2] @7462: 1col 24[0] @7465: *NULL*col 25[0] @7466: *NULL*col 26[0] @7467: *NULL*col 27[2] @7468: 1col 28[0] @7471: *NULL*col 29[0] @7472: *NULL*col 30[0] @7473: *NULL*col 31[0] @7474: *NULL*col 32[7] @7475: ######################################### BBED> modify /x 04 offset 7767Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 21519 Offsets: 7767 to 7770 Dba:0x0040540f------------------------------------------------------------------------ 04000040 BBED> p *kdbr[2]rowdata[0]----------ub1 rowdata[0] @7378 0x6cBBED> d /v offset 7378 count 4 File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 21519 Offsets: 7378 to 7381 Dba:0x0040540f------------------------------------------------------- 6c022100 l l.!. BBED> modify /x 7c offset 7378 File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 21519 Offsets: 7378 to 7381 Dba:0x0040540f------------------------------------------------------------------------ 7c022100 BBED> sum applyCheck value for File 1, Block 21519:current = 0x6944, required = 0x6944BBED> verifyDBVERIFY - Verification startingFILE = /home/ora10g/oradata/aux/system01.dbfBLOCK = 21519Block Checking: DBA = 4215823, Block Type = KTB-managed data blockdata header at 0xb7e9125ckdbchk: the amount of space used is not equal to block size used=357 fsc=0 avsp=7638 dtl=8096Block 21519 failed with check code 6110DBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 1Total Blocks Failing (Data) : 1Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 0Total Blocks Influx : 0BBED>BBED> p kdbhstruct kdbh, 14 bytes @92 ub1 kdbhflag @92 0x00 (NONE) b1 kdbhntab @93 6 b2 kdbhnrow @94 6 sb2 kdbhfrre @96 -1 sb2 kdbhfsbo @98 50 sb2 kdbhfseo @100 7286 b2 kdbhavsp @102 7638 b2 kdbhtosp @104 7638 ++++8096-357=7739(转为16进制为1E3B)BBED> d /v offset 102 File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 21519 Offsets: 102 to 105 Dba:0x0040540f------------------------------------------------------- d61dd61d l BBED> modify /x 3b1e offset 102 File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 21519 Offsets: 102 to 105 Dba:0x0040540f------------------------------------------------------------------------ 3b1ed61d BBED> modify /x 3b1e offset 104 File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 21519 Offsets: 104 to 107 Dba:0x0040540f------------------------------------------------------------------------ 3b1e0000 BBED> sum applyCheck value for File 1, Block 21519:current = 0x6944, required = 0x6944BBED> verifyDBVERIFY - Verification startingFILE = /home/ora10g/oradata/aux/system01.dbfBLOCK = 21519Block Checking: DBA = 4215823, Block Type = KTB-managed data blockdata header at 0xb7e9125ckdbchk: space available on commit is incorrect tosp=7739 fsc=0 stb=4 avsp=7739Block 21519 failed with check code 6111DBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 1Total Blocks Failing (Data) : 1Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 0Total Blocks Influx : 0登录后复制修改之后发现还有点问题,说明还有一些地方没有修改对,下面继续:BBED> d /v offset 62 count 10 File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 21519 Offsets: 62 to 71 Dba:0x0040540f------------------------------------------------------- 0a00a35a 00000100 0400 l ........ BBED> modify /x 00 offset 62 File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 21519 Offsets: 62 to 71 Dba:0x0040540f------------------------------------------------------------------------ 0000a35a 00000100 0400 BBED> sum applyCheck value for File 1, Block 21519:current = 0x694e, required = 0x694eBBED> verifyDBVERIFY - Verification startingFILE = /home/ora10g/oradata/aux/system01.dbfBLOCK = 21519Block Checking: DBA = 4215823, Block Type = KTB-managed data blockdata header at 0xb7e9125ckdbchk: space available on commit is incorrect tosp=7739 fsc=0 stb=4 avsp=7739Block 21519 failed with check code 6111DBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 1Total Blocks Failing (Data) : 1Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 0Total Blocks Influx : 0登录后复制这里提示stb=4,那说明这个avsp 实际上应该是7739+4才对。BBED> p kdbhstruct kdbh, 14 bytes @92 ub1 kdbhflag @92 0x00 (NONE) b1 kdbhntab @93 6 b2 kdbhnrow @94 6 sb2 kdbhfrre @96 -1 sb2 kdbhfsbo @98 50 sb2 kdbhfseo @100 7286 b2 kdbhavsp @102 7739 b2 kdbhtosp @104 7739BBED>BBED> d /v offset 104 File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 21519 Offsets: 104 to 113 Dba:0x0040540f------------------------------------------------------- 3b1e0000 01000100 0100 l ;......... BBED> modify /x 3f1e offset 104 +++++offset向前推进4个offset,即7739+4(转为16进制为1E3F) File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 21519 Offsets: 104 to 113 Dba:0x0040540f------------------------------------------------------------------------ 3f1e0000 01000100 0100 BBED> sum applyCheck value for File 1, Block 21519:current = 0x694a, required = 0x694aBBED> verifyDBVERIFY - Verification startingFILE = /home/ora10g/oradata/aux/system01.dbfBLOCK = 21519DBVERIFY - 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 : 0BBED>登录后复制ok,修改完毕之后,下面我们来启动数据库,观察一下效果.+++++启动数据库SQL> startupORACLE instance started.Total System Global Area 167772160 bytesFixed Size 1272600 bytesVariable Size 71304424 bytesDatabase Buffers 92274688 bytesRedo Buffers 2920448 bytesDatabase mounted.Database opened.SQL> conn roger/rogerConnected.SQL> set lines 200SQL> set autot traceonly expSQL> select count(object_id) from test_0824;Execution Plan----------------------------------------------------------Plan hash value: 1820618955--------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |--------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 13 | 3 (0)| 00:00:01 || 1 | SORT AGGREGATE | | 1 | 13 | | || 2 | TABLE ACCESS FULL| TEST_0824 | 499 | 6487 | 3 (0)| 00:00:01 |--------------------------------------------------------------------------------Note----- - dynamic sampling used for this statementSQL>登录后复制ok,这个sql已经走全表扫描了,虽然是这样,但是如果你去重建该索引,可能会有问题,为什么呢 ? 因为索引信息不一致了。对于Index的信息会存放在数据字典表ind$中,而该字典表是一个bootstrap$的对象,因此我们还需要进行一些其他的操作。++++Session1(维护数据字典)SQL> select file#,block# from ind$ where obj#=52969; FILE# BLOCK#---------- ---------- 5 12371SQL> delete from obj$ where obj#=52969;1 row deleted.SQL> delete from seg$ where file#=5 and block#=12371;1 row deleted.SQL> delete from icol$ where obj#=52969;1 row deleted.SQL> commit;Commit complete.SQL> conn /as sysdbaConnected.SQL> delete from ind$ where obj#=52969;delete from ind$ where obj#=52969 *ERROR at line 1:ORA-00600: internal error code, arguments: [13011], [2], [4215823], [0], [4215823], [3], [], []ora-00600 [13011]错误,遇到过几次,很明显是index的信息不一致导致的。SQL> select owner,index_name from dba_indexes where table_name='IND$';OWNER INDEX_NAME------------------------------ ------------------------------SYS I_IND1SQL> alter index sys.i_ind1 rebuild;alter index sys.i_ind1 rebuild*ERROR at line 1:ORA-00701: object necessary for warmstarting database cannot be altered登录后复制我们发现bootstrap$对象中的index,是不能进行rebuild的,那么怎么办呢? 下面我们利用bbed来手工将其中的键值删掉。SQL> select object_id from dba_objects where object_name='I_IND1'; OBJECT_ID---------- 39SQL>SQL> oradebug setmypidStatement processed.SQL> alter session set events 'immediate trace name treedump level 39';Session altered.SQL> oradebug close_traceStatement processed.SQL> oradebug tracefile_name/home/ora10g/admin/aux/udump/aux_ora_27390.trcSQL> select dump(52969,16) from dual;DUMP(52969,16)-----------------------Typ=2 Len=4: c3,6,1e,46++++aux_ora_27390.trc----- begin tree dumpbranch: 0x4000f2 4194546 (0: nrow: 5, level: 1) leaf: 0x4000f3 4194547 (-1: nrow: 574 rrow: 574) leaf: 0x4000f4 4194548 (0: nrow: 461 rrow: 460) leaf: 0x4000f5 4194549 (1: nrow: 525 rrow: 522) leaf: 0x4000f6 4194550 (2: nrow: 533 rrow: 533) leaf: 0x4000f7 4194551 (3: nrow: 166 rrow: 166)----- end tree dump登录后复制我们新建的索引肯定在最后一个block中。对于生产恢复而言,本身ind$记录不会太多,所以我们大不了一个一个index block去找,也没几个block。BBED> set dba 0x4000f7 DBA 0x004000f7 (4194551 1,247)BBED> map File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 247 Dba:0x004000f7------------------------------------------------------------ KTB Data Block (Index Leaf) struct kcbh, 20 bytes @0 struct ktbbh, 72 bytes @20 struct kdxle, 32 bytes @92 b2 kd_off[166] @124 ub1 freespace[5196] @456 ub1 rowdata[2468] @5652 ub4 tailchk @8188 BBED> find /x c3061e TOP File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 247 Offsets: 5665 to 5674 Dba:0x004000f7------------------------------------------------------------------------ c3061e46 01000040 540f BBED> set offset 5656 +++++前面搜索到的offset为5665,减去行头1个offset再减去8(因为system表空间是MSSM) OFFSET 5664BBED> x /rnrowdata[12] @5664-----------flag@5664: 0x04 (NONE)lock@5665: 0xc3keydata[6]: 0x06 0x1e 0x46 0x01 0x00 0x00data key:col 0[64] @5673: 0x54 0x0f 0x00 0x00 0x04 0xc3 0x06 0x1e 0x3c 0x01 0x00 0x00 0x40 0x54 0x10 0x00 0x05 0x04 0xc3 0x06 0x1d 0x08 0x01 0x00 0x00 0x40 0x54 0x10 0x00 0x04 0x04 0xc3 0x06 0x1d 0x07 0x01 0x00 0x00 0x40 0x54 0x10 0x00 0x03 0x04 0xc3 0x06 0x1d 0x06 0x00 0x00 0x00 0x40 0x54 0x10 0x00 0x02 0x04 0xc3 0x06 0x1c 0x63 0x00 0x00 0x00 或者SQL> alter session set tracefile_identifier='001';Session altered.SQL> alter system dump datafile 1 block 247;System altered.SQL> oradebug tracefile_name/home/ora10g/admin/aux/udump/aux_ora_27390_001.trcSQL> ++aux_ora_27390_001.trcBlock header dump: 0x004000f7 Object id on Block? Y seg/obj: 0x27 csc: 0x0a.5ab0 itc: 2 flg: O typ: 2 - INDEX fsl: 0 fnx: 0x4000f8 ver: 0x01 Itl Xid Uba Flag Lck Scn/Fsc0x01 0x0001.02f.000000ee 0x0080b30a.00a8.01 CB-- 0 scn 0x0000.000569550x02 0x0001.004.00000190 0x01c00473.01c7.11 --U- 1 fsc 0x0000.00005ab3Leaf block dump===============header address 218998876=0xd0da85ckdxcolev 0KDXCOLEV Flags = - - -kdxcolok 0kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Ykdxconco 1kdxcosdc 1kdxconro 166kdxcofbo 368=0x170kdxcofeo 5564=0x15bckdxcoavs 5508kdxlespl 0kdxlende 0kdxlenxt 0=0x0kdxleprv 4194550=0x4000f6kdxledsz 6kdxlebksz 8032row#0[8019] flag: ------, lock: 0, len=13, data:(6): 00 40 c8 d3 00 01col 0; len 4; (4): c3 06 0e 0c........row#163[5642] flag: ------, lock: 0, len=13, data:(6): 00 40 54 10 00 01col 0; len 4; (4): c3 06 1c 62row#164[5629] flag: ------, lock: 0, len=13, data:(6): 00 40 54 10 00 02col 0; len 4; (4): c3 06 1c 63row#165[5564] flag: ------, lock: 2, len=13, data:(6): 00 40 54 0f 00 00col 0; len 4; (4): c3 06 1e 46----- end of leaf block dump -----登录后复制对于index,我们如果需要从index block中将键值删掉,那么需要修改如下几个地方:行头的lock标志位: 删掉一条记录,就加1,删除2条就加2.kdxlende: ? ?这个之前,我们讲过,表示被删index entry的数量由于system是MSSM方式,因此计算offset的公式应该是:bash =offset+68+(itl-1)*24既然知道了这一点,那么我们就开始动手进行bbed修改了,如下:BBED> set offset 5656 OFFSET 5656BBED> x /rnrowdata[4] @5656----------flag@5656: 0x00 (NONE)lock@5657: 0x02keydata[6]: 0x00 0x40 0x54 0x0f 0x00 0x00data key:col 0[4] @5665: 52969 BBED> modify /x 01 offset 5656 File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 247 Offsets: 5656 to 5665 Dba:0x004000f7------------------------------------------------------------------------ 01020040 540f0000 04c3 BBED> p kdxlestruct kdxle, 32 bytes @92 struct kdxlexco, 16 bytes @92 ub1 kdxcolev @92 0x00 ub1 kdxcolok @93 0x00 ub1 kdxcoopc @94 0x80 ub1 kdxconco @95 0x01 ub4 kdxcosdc @96 0x00000001 sb2 kdxconro @100 166 b2 kdxcofbo @102 368 b2 kdxcofeo @104 5564 b2 kdxcoavs @106 5508 b2 kdxlespl @108 0 sb2 kdxlende @110 0 ub4 kdxlenxt @112 0x00000000 ub4 kdxleprv @116 0x004000f6 ub1 kdxledsz @120 0x06 ub1 kdxleunuse @121 0x11BBED> modify /x 01 offset 110 File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 247 Offsets: 110 to 119 Dba:0x004000f7------------------------------------------------------------------------ 01000000 0000f600 4000 BBED> sum applyCheck value for File 1, Block 247:current = 0xf017, required = 0xf017BBED> verifyDBVERIFY - Verification startingFILE = /home/ora10g/oradata/aux/system01.dbfBLOCK = 247Block Checking: DBA = 4194551, Block Type = KTB-managed data block**** actual free space credit for itl 2 = 15 != # in trans. hdr = 0---- end index block validationBlock 247 failed with check code 6401 ++++很明显,这里提示第2个ITL 有问题,需要修改一下fsc值。 实际上oracle这里是根据block内的可用空间来进行计算的,也可以尝试去把avsp改小。DBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 0Total Blocks Failing (Data) : 0Total Blocks Processed (Index): 1Total Blocks Failing (Index): 1Total Blocks Empty : 0Total Blocks Marked Corrupt : 0Total Blocks Influx : 0BBED>BBED> p ktbbhstruct ktbbh, 72 bytes @20 ub1 ktbbhtyp @20 0x02 (KDDBTINDEX) union ktbbhsid, 4 bytes @24 ub4 ktbbhsg1 @24 0x00000027 ub4 ktbbhod1 @24 0x00000027 struct ktbbhcsc, 8 bytes @28 ub4 kscnbas @28 0x00005ab0 ub2 kscnwrp @32 0x000a b2 ktbbhict @36 7938 ub1 ktbbhflg @38 0x03 (KTBFONFL) ub1 ktbbhfsl @39 0x00 ub4 ktbbhfnx @40 0x004000f8 struct ktbbhitl[0], 24 bytes @44 struct ktbitxid, 8 bytes @44 ub2 kxidusn @44 0x0001 ub2 kxidslt @46 0x002f ub4 kxidsqn @48 0x000000ee struct ktbituba, 8 bytes @52 ub4 kubadba @52 0x0080b30a ub2 kubaseq @56 0x00a8 ub1 kubarec @58 0x01 ub2 ktbitflg @60 0xc000 (KTBFIBI, KTBFCOM) union _ktbitun, 2 bytes @62 b2 _ktbitfsc @62 0 ub2 _ktbitwrp @62 0x0000 ub4 ktbitbas @64 0x00056955 struct ktbbhitl[1], 24 bytes @68 struct ktbitxid, 8 bytes @68 ub2 kxidusn @68 0x0001 ub2 kxidslt @70 0x0004 ub4 kxidsqn @72 0x00000190 struct ktbituba, 8 bytes @76 ub4 kubadba @76 0x01c00473 ub2 kubaseq @80 0x01c7 ub1 kubarec @82 0x11 ub2 ktbitflg @84 0x2001 (KTBFUPB) union _ktbitun, 2 bytes @86 b2 _ktbitfsc @86 0 ub2 _ktbitwrp @86 0x0000 ub4 ktbitbas @88 0x00005ab3BBED> d /v offset 86 count 2 File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 247 Offsets: 86 to 87 Dba:0x004000f7------------------------------------------------------- 0000 l .. BBED> modify /x 0f offset 86 File: /home/ora10g/oradata/aux/system01.dbf (1) Block: 247 Offsets: 86 to 87 Dba:0x004000f7------------------------------------------------------------------------ 0f00 BBED> sum applyCheck value for File 1, Block 247:current = 0xf018, required = 0xf018BBED> verifyDBVERIFY - Verification startingFILE = /home/ora10g/oradata/aux/system01.dbfBLOCK = 247DBVERIFY - Verification completeTotal Blocks Examined : 1Total Blocks Processed (Data) : 0Total Blocks Failing (Data) : 0Total Blocks Processed (Index): 1Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 0Total Blocks Influx : 0BBED>登录后复制ok,现在bbed校验已经不再提示错误,修改完成之后,我们来重建索引即可。+++++Session 1SQL> conn roger/rogerConnected.SQL> create index idx_test_0824 on test_0824(object_id);Index created.SQL>登录后复制这种测试意义不大,供大家参考!Related posts:关于ora-1652的一点总结–续(详解rowid,index entry header)手工构造逻辑坏块一例存在datafile offline,如何进行异机恢复?如何修复未格式化的坏块?Archivelog 模式下,datafile header损坏,如何恢复?本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger 的Oracle技术博客 本文链接地址: How to drop a Index with bbed? 这是oracle恢复课程的一点内容,有朋友在问,所以就贴出来,其实没有什么,很简单,供大家参考! 在某些情况下,oracle的bootstrap$的一些对象出现异常之后,比如Index。我们无法进行rebuild,或许只能用一些极端的手段去将Index drop然后重建(当然还有其他的方法)。这里是利用bbed来drop Index的例子! ++++ 创建测试表 SQL> conn roger/roger Connected. SQL> create table test_0824 as select object_id,object_name from dba_objects where rownum create index idx_test_0824 on test_0824(object_id); Index created. SQL> SQL> set autot traceonly exp [...] 09-11 14:33