--改动file header ------------------------------------------------------------------------- cd $ORACLE_H0ME/rdbms/lib ./bbed blockedit set filename '/u01/app/oracle/product/10.2.0/db_1/dbs/test01.dbf' show map /v p kcvfhckp BBED> modify /x 005a --拷贝 文件 那块 要好好測试 和认知 BBED> showv FILE# 1 BLOCK# 1 OFFSET 0 DBA 0x00400001 (4194305 1,1) FILENAME /u01/app/oracle/oradata/test/block.dbf BIFILE bifile.bbd LISTFILE list BLOCKSIZE 8192 MODE Edit EDIT Unrecoverable IBASE Dec OBASE Dec WIDTH 80 COUNT 512 LOGFILE log.bbd SPOOL No BBED> map /v File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Dba:0x00400001 ------------------------------------------------------------ Data File Header struct kcvfh, 676 bytes @0 struct kcvfhbfh, 20 bytes @0 struct kcvfhhdr, 76 bytes @20 ub4 kcvfhrdb @96 struct kcvfhcrs, 8 bytes @100 ub4 kcvfhcrt @108 ub4 kcvfhrlc @112 struct kcvfhrls, 8 bytes @116 ub4 kcvfhbti @124 struct kcvfhbsc, 8 bytes @128 ub2 kcvfhbth @136
ub2 kcvfhsta @138 //强制打开数据库的时候 有的资料上说这个也要改动
图片来源(oracle 实战攻略)
struct kcvfhckp, 36 bytes @484 改动的三个部分! 9i 140 处
ub4 kcvfhcpc @140 ub4 kcvfhrts @144 ub4 kcvfhccc @148 struct kcvfhbcp, 36 bytes @152 ub4 kcvfhbhz @312 struct kcvfhxcd, 16 bytes @316 word kcvfhtsn @332 ub2 kcvfhtln @336 text kcvfhtnm[30] @338 ub4 kcvfhrfn @368 struct kcvfhrfs, 8 bytes @372 ub4 kcvfhrft @380 struct kcvfhafs, 8 bytes @384 ub4 kcvfhbbc @392 ub4 kcvfhncb @396 ub4 kcvfhmcb @400 ub4 kcvfhlcb @404 ub4 kcvfhbcs @408 ub2 kcvfhofb @412 ub2 kcvfhnfb @414 ub4 kcvfhprc @416 struct kcvfhprs, 8 bytes @420 struct kcvfhprfs, 8 bytes @428 ub4 kcvfhtrt @444 ub4 tailchk @8188 BBED> p kcvfhckp struct kcvfhckp, 36 bytes @484 struct kcvcpscn, 8 bytes @484 ub4 kscnbas @484 0x000ddc27 -- ub2 kscnwrp @488 0x0000 ub4 kcvcptim @492 0x2d2fe78a -- ub2 kcvcpthr @496 0x0001 union u, 12 bytes @500 struct kcvcprba, 12 bytes @500 ub4 kcrbaseq @500 0x00000011 ub4 kcrbabno @504 0x00000002 ub2 kcrbabof @508 0x0010 ub1 kcvcpetb[0] @512 0x02 ub1 kcvcpetb[1] @513 0x00 ub1 kcvcpetb[2] @514 0x00 ub1 kcvcpetb[3] @515 0x00 ub1 kcvcpetb[4] @516 0x00 ub1 kcvcpetb[5] @517 0x00 ub1 kcvcpetb[6] @518 0x00 ub1 kcvcpetb[7] @519 0x00 BBED> p kcvfhcpc ub4 kcvfhcpc @140 0x00000032 -- BBED> p kcvfhccc ub4 kcvfhccc @148 0x00000031 -- --改动以上几个数据就能够了 BBED> set offset 484 count 16 OFFSET 484 COUNT 16 BBED> dump /v File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 484 to 499 Dba:0x00400001 ------------------------------------------------------- 27dc0d00 00005a00 8ae72f2d 01000000 l '?...Z..?-.... <16 bytes per line>' --一下是详细的实验步骤 --shutdown database and reopen to mount SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 184549376 bytes Fixed Size 1218412 bytes Variable Size 92276884 bytes Database Buffers 88080384 bytes Redo Buffers 2973696 bytes Database mounted. --update datafile header BBED> show FILE# 1 BLOCK# 1 OFFSET 0 DBA 0x00400001 (4194305 1,1) FILENAME /u01/app/oracle/oradata/test/block.dbf BIFILE bifile.bbd LISTFILE list BLOCKSIZE 8192 MODE Edit EDIT Unrecoverable IBASE Dec OBASE Dec WIDTH 80 COUNT 512 LOGFILE log.bbd SPOOL No BBED> p kcvfhckp struct kcvfhckp, 36 bytes @484 struct kcvcpscn, 8 bytes @484 ub4 kscnbas @484 0x000df330 ub2 kscnwrp @488 0x0000 ub4 kcvcptim @492 0x2d3006c5 ub2 kcvcpthr @496 0x0001 union u, 12 bytes @500 struct kcvcprba, 12 bytes @500 ub4 kcrbaseq @500 0x00000011 ub4 kcrbabno @504 0x00002da7 ub2 kcrbabof @508 0x0010 ub1 kcvcpetb[0] @512 0x02 ub1 kcvcpetb[1] @513 0x00 ub1 kcvcpetb[2] @514 0x00 ub1 kcvcpetb[3] @515 0x00 ub1 kcvcpetb[4] @516 0x00 ub1 kcvcpetb[5] @517 0x00 ub1 kcvcpetb[6] @518 0x00 ub1 kcvcpetb[7] @519 0x00 BBED> p kcvfhcpc ub4 kcvfhcpc @140 0x00000033 BBED> p kcvfhccc ub4 kcvfhccc @148 0x00000032 BBED> set offset 484 count 16 OFFSET 484 COUNT 16 BBED> dump /v File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 484 to 499 Dba:0x00400001 ------------------------------------------------------- 30f30d00 00000000 c506302d 01000a00 l 0?.....?0-.... <16 bytes per line> BBED> modify /x 20 Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 484 to 499 Dba:0x00400001 ------------------------------------------------------------------------ 20f30d00 00000000 c506302d 01000a00 <32 bytes per line> BBED> set offset 492 OFFSET 492 BBED> dump File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 492 to 507 Dba:0x00400001 ------------------------------------------------------------------------ c506302d 01000a00 11000000 a72d0000 <32 bytes per line> BBED> modify /x c0 File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 492 to 507 Dba:0x00400001 ------------------------------------------------------------------------ c006302d 01000a00 11000000 a72d0000 <32 bytes per line> BBED> set offset 140 OFFSET 140 BBED> dump File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 140 to 155 Dba:0x00400001 ------------------------------------------------------------------------ 33000000 ea63292d 32000000 00000000 <32 bytes per line> BBED> modify /x 31 File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 140 to 155 Dba:0x00400001 ------------------------------------------------------------------------ 31000000 ea63292d 32000000 00000000 <32 bytes per line> BBED> set offset 148 OFFSET 148 BBED> modify BBED-00203: incomplete/malformed command BBED> modify /x 30 File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 148 to 163 Dba:0x00400001 ------------------------------------------------------------------------ 30000000 00000000 00000000 00000000 <32 bytes per line> BBED> sum apply------------------------------------------------------------------------------------- Check value for File 1, Block 1: current = 0xa51f, required = 0xa51f --alter database open SQL> alter database open; alter database open * ERROR at line 1: ORA-01113: file 5 needs media recovery ORA-01110: data file 5: '/u01/app/oracle/oradata/test/block.dbf' --modify the file header from system BBED> set offset 484 count 16 OFFSET 484 COUNT 16 BBED> dump /v File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 484 to 499 Dba:0x00400001 ------------------------------------------------------- 30f30d00 00000000 c506302d 01000a00 l 0?.....?0-.... <16 bytes per line> BBED> modify /x 20 Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 484 to 499 Dba:0x00400001 ------------------------------------------------------------------------ 20f30d00 00000000 c506302d 01000a00 <32 bytes per line> BBED> set offset 492 OFFSET 492 BBED> dump File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 492 to 507 Dba:0x00400001 ------------------------------------------------------------------------ c506302d 01000a00 11000000 a72d0000 <32 bytes per line> BBED> modify /x c0 File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 492 to 507 Dba:0x00400001 ------------------------------------------------------------------------ c006302d 01000a00 11000000 a72d0000 <32 bytes per line> BBED> set offset 140 OFFSET 140 BBED> dump File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 140 to 155 Dba:0x00400001 ------------------------------------------------------------------------ 33000000 ea63292d 32000000 00000000 <32 bytes per line> BBED> modify /x 31 File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 140 to 155 Dba:0x00400001 ------------------------------------------------------------------------ 31000000 ea63292d 32000000 00000000 <32 bytes per line> BBED> set offset 148 OFFSET 148 BBED> modify BBED-00203: incomplete/malformed command BBED> modify /x 30 File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 148 to 163 Dba:0x00400001 ------------------------------------------------------------------------ 30000000 00000000 00000000 00000000 <32 bytes per line> BBED> sum apply Check value for File 1, Block 1: current = 0xa51f, required = 0xa51f BBED> set offset 484 OFFSET 484 BBED> dump /v count 16 File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 484 to 499 Dba:0x00400001 ------------------------------------------------------- 20f30d00 00000000 c006302d 01000a00 l ?.....?0-.... <16 bytes per line> BBED> modify /x 30 File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 484 to 499 Dba:0x00400001 ------------------------------------------------------------------------ 30f30d00 00000000 c006302d 01000a00 <32 bytes per line> BBED> set offset 492 OFFSET 492 BBED> dump /v File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 492 to 507 Dba:0x00400001 ------------------------------------------------------- c006302d 01000a00 11000000 a72d0000 l ?0-........?.. <16 bytes per line> BBED> modify /c5 BBED-00201: invalid switch (/c5) BBED> modify /x c5 File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 492 to 507 Dba:0x00400001 ------------------------------------------------------------------------ c506302d 01000a00 11000000 a72d0000 <32 bytes per line> BBED> set offset 140 OFFSET 140 BBED> dump /v File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 140 to 155 Dba:0x00400001 ------------------------------------------------------- 31000000 ea63292d 30000000 00000000 l 1...阠)-0....... <16 bytes per line> BBED> modify /x 33 File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 140 to 155 Dba:0x00400001 ------------------------------------------------------------------------ 33000000 ea63292d 30000000 00000000 <32 bytes per line> BBED> set offset 148 OFFSET 148 BBED> dump /v File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 148 to 163 Dba:0x00400001 ------------------------------------------------------- 30000000 00000000 00000000 00000000 l 0............... <16 bytes per line> BBED> modify /x 32 File: /u01/app/oracle/oradata/test/block.dbf (1) Block: 1 Offsets: 148 to 163 Dba:0x00400001 ------------------------------------------------------------------------ 32000000 00000000 00000000 00000000 <32 bytes per line> BBED> sum apply Check value for File 1, Block 1: current = 0xa50a, required = 0xa50a --open the database SQL> alter database open; Database altered. SQL> -------------------------------------------------------------------- --数据有坏块 时候是否影响启动 --corrupt the block BBED> p kcbh struct 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 0x0140000c ub4 bas_kcbh @8 0x000de97d ub2 wrp_kcbh @12 0x0000 ub1 seq_kcbh @14 0x02 ub1 flg_kcbh @15 0x04 (KCBHFCKV) ub2 chkval_kcbh @16 0x1c9c ub2 spare3_kcbh @18 0x0000 BBED> corrupt Block marked media corrupt. BBED> v DBVERIFY - Verification starting FILE = /u01/app/oracle/oradata/test/block.dbf BLOCK = 12 Block Checking: DBA = 4194316, Block Type = KTB-managed data block Found block already marked corrupted DBVERIFY - Verification complete Total Blocks Examined : 1 Total Blocks Processed (Data) : 1 Total Blocks Failing (Data) : 0 Total Blocks Processed (Index): 0 Total Blocks Failing (Index): 0 Total Blocks Empty : 0 Total Blocks Marked Corrupt : 0 Total Blocks Influx : 0 BBED> p kcbh struct 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 0x0040000c ub4 bas_kcbh @8 0x00000000 ub2 wrp_kcbh @12 0x0000 ub1 seq_kcbh @14 0xff --原来是02 ub1 flg_kcbh @15 0x04 (KCBHFCKV) ub2 chkval_kcbh @16 0x1d91 ub2 spare3_kcbh @18 0x0000 BBED> sum apply Check value for File 1, Block 12: current = 0x1d91, required = 0x1d91 --reopen the database SQL> alter database open; Database altered. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 184549376 bytes Fixed Size 1218412 bytes Variable Size 92276884 bytes Database Buffers 88080384 bytes Redo Buffers 2973696 bytes Database mounted. Database opened. SQL> --一般坏块不影响数据库的启动 --改动回来 用corropt改动不会来 奶奶的 还是简单改改ff吧 revert 能够的 注意呀 奶奶的 --跟踪文件中的错误 Bad header found during buffer read Data in bad block: type: 6 format: 2 rdba: 0x0040000c last change scn: 0x0000.00000000 seq: 0x2 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x00000602 check value in block header: 0x1d91 computed block checksum: 0x0 Reread of rdba: 0x0140000c (file 5, block 12) found same corrupted data -----------------------------------------------------------------------