首页 > 代码库 > 修改file header (测)

修改file header (测)

--修改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
-----------------------------------------------------------------------