BBED模拟表数据块损坏


1.创建测试表 

SQL> create table xccheese(id number(10),name varchar2(10));   

Table created.


SQL>  insert into xccheese values(111111,'aaaaa');   

1 row created.


SQL>  insert into xccheese values(222222,'bbbbb'); 

1 row created.


SQL>  commit; 

Commit complete.


SQL> select * from xccheese;

ID NAME

---------- ----------

    111111 aaaaa

    222222 bbbbb



2. 通过 rowid查看行数据的文件号(rel_fno)、块号(blockno,)和行号(rowno) 


SQL> select rowid, 

                   dbms_rowid.rowid_relative_fno(rowid) rel_fno,        

                     dbms_rowid.rowid_block_number(rowid) blockno,  

                    dbms_rowid.rowid_row_number(rowid) rowno 

   from xccheese;   


ROWID       REL_FNO  BLOCKNO      ROWNO

------------------ ---------- ---------- ----------

AAATiLAABAAATTZAAA     1    79065   0

AAATiLAABAAATTZAAB     1    79065   1


3. 生成 BBED需要的数据文件列表 


SQL> select file#||' '||name||' '||bytes from v$datafile ; 


FILE#||''||NAME||''||BYTES

--------------------------------------------------------------------------------

1 /oradata/node1/system01.dbf 2537553920

2 /oradata/node1/sysaux01.dbf 629145600

3 /oradata/node1/undotbs01.dbf 519045120

4 /oradata/node1/users01.dbf 5242880


 

[oracle@node1 lib]$ cat filelist.txt 

1 /oradata/node1/system01.dbf 2537553920

2 /oradata/node1/sysaux01.dbf 629145600

3 /oradata/node1/undotbs01.dbf 519045120

4 /oradata/node1/users01.dbf 5242880

 

[oracle@node1 lib]$ cat bbed.par 

blocksize=8192

listfile=/u01/bbed/filelist.txt

mode=edit


blocksize: 数据库查询的块大小(show parameter db_block_size)

listfile:列表文件

mode: 设置bbed是编辑模式还是浏览模式(edit or browse) 浏览模式不能进行块的修改(以防止浏览时误操作)。也可以在BBED命令行执行  set mode edit。



4. 登陆 BBED 

[oracle@node1 lib]$ ./bbed parfile=/u01/bbed/bbed.par 

Password: blockedit

BBED: Release 2.0.0.0.0 - Limited Production on Wed Nov 4 23:10:44 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

************* !!! For Oracle Internal Use only !!! ***************从这句话也能看出bbed是内部使用的工具 

BBED>                                                                       


--密码默认是 blockedit,为了安全bbed设置有密码,可见bbed操作是十分危险的,生产库不到万不得已最好不要使用。 


5.修改数据块


BBED>  modify 1000 file 1 block 79065

Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y

 File: /oradata/node1/system01.dbf (1)

 Block: 79065            Offsets:    0 to  511           Dba:0x004134d9

------------------------------------------------------------------------

 03e80000 d9344100 97950c00 00000106 b36e0000 01000000 8b380100 91950c00 

 00000000 02000300 00000000 08001c00 c2020000 fd00c000 66004200 02200000 

 97950c00 00000000 00000000 00000000 00000000 00000000 00000000 00010200 

 ffff1600 841f6e1f 6e1f0000 0200921f 841f0000 00000000 00000000 00000000 

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 


 <32 bytes per line>

 

6.提交使修改生效

BBED> sum apply      --使应用生效 

Check value for File 1, Block 79065:

current = 0x24b6, required = 0x24b6


7.验证坏块

BBED> verify      --验证  发现这个块损坏了 

DBVERIFY - Verification starting

FILE = /oradata/node1/system01.dbf

BLOCK = 79065


Block 79065 is corrupt

Corrupt block relative dba: 0x004134d9 (file 0, block 79065)

Bad header found during verification

Data in bad block:

 type: 3 format: 0 rdba: 0x004134d9

 last change scn: 0x0000.000c9597 seq: 0x1 flg: 0x06

 spare1: 0x0 spare2: 0x0 spare3: 0x0

 consistency value in tail: 0x95970601

 check value in block header: 0x24b6

 computed block checksum: 0x0

DBVERIFY - Verification complete

Total Blocks Examined         : 1

Total Blocks Processed (Data) : 0

Total Blocks Failing   (Data) : 0

Total Blocks Processed (Index): 0

Total Blocks Failing   (Index): 0

Total Blocks Empty            : 0

Total Blocks Marked Corrupt   : 1

Total Blocks Influx           : 0

Message 531 not found;  product=RDBMS; facility=BBED


8. 使用DBV工具验证


[oracle@node1 backup]$ dbv file=/oradata/node1/system01.dbf blocksize=8192

DBVERIFY: Release 11.2.0.4.0 - Production on Mon Nov 23 02:46:27 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

DBVERIFY - Verification starting : FILE = /oradata/node1/system01.dbf

Page 79065 is marked corrupt

Corrupt block relative dba: 0x004134d9 (file 1, block 79065)

Bad header found during dbv: 

Data in bad block:

 type: 3 format: 0 rdba: 0x004134d9

 last change scn: 0x0000.000c9597 seq: 0x1 flg: 0x06

 spare1: 0x0 spare2: 0x0 spare3: 0x0

 consistency value in tail: 0x95970601

 check value in block header: 0x24b6

 computed block checksum: 0x0

DBVERIFY - Verification complete

Total Pages Examined         : 309760

Total Pages Processed (Data) : 274065

Total Pages Failing   (Data) : 0

Total Pages Processed (Index): 10360

Total Pages Failing   (Index): 0

Total Pages Processed (Other): 3292

Total Pages Processed (Seg)  : 1

Total Pages Failing   (Seg)  : 0

Total Pages Empty            : 22042

Total Pages Marked Corrupt   : 1

Total Pages Influx           : 0

Total Pages Encrypted        : 0

Highest block SCN            : 899559 (0.899559)

9. 执行块读取操作

SQL> select * from xccheese;

select * from xccheese

              *

ERROR at line 1:

ORA-01578: ORACLE data block corrupted (file # 1, block # 79065)

ORA-01110: data file 1: '/oradata/node1/system01.dbf'