加载中…
个人资料
孙成子子
孙成子子
  • 博客等级:
  • 博客积分:0
  • 博客访问:5,523
  • 关注人气:31
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Oracle bbed 五个实用试验之修复坏块

(2016-05-11 00:31:30)
标签:

bbed

block

oracle

corrput

it

分类: bbed

本文介绍bbed五个实用试验之修复坏块,之前已经写过两边前载

《Oracle bbed 安装及五个实用试验之数据修改》
《Oracle bbed 五个实用试验之恢复删除的行》


在前面文章中有介绍《oracle_数据库坏块类型以及坏块处理》

在五个例子中记录坏块修复,当出现ora-01578错误时,oracle会设置块的序列号为0xff,
在块中位置为kcbh.seq_kcbh.

SQL> SELECT * FROM sun.bb1;
SELECT * FROM sun.bb1
                  *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 6, block # 209)
ORA-01110: data file 6: '/u01/app2/ora11/oradata/sunr/bbts01.dbf'

BBED> set dba 6,209
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        0x018000d1
   ub4 bas_kcbh                             @8        0x002051f9
   ub2 wrp_kcbh                             @12       0x0000
   ub1 seq_kcbh                             @14       0xff
   ub1 flg_kcbh                             @15       0x06 (KCBHFDLC, KCBHFCKV)
   ub2 chkval_kcbh                          @16       0x6b61
   ub2 spare3_kcbh                          @18       0x0000

BBED>  m /x 01 offset 14
再根据bas_kcbh+type_kcbh+seq_kcbh修复tailchk值,由于是litter_endian倒序修改
51f9+06+01  变为  0106f951

BBED> m /x 0106f951 offset 8188

至此修复成功。

介绍在什么情况下会将buffer_cache中的块写到磁盘,且buffer_cache中是否有指定块。
在实验中经常要执行alter system flush buffer_cache命令来重新读取磁盘数据,那么如何判断数据是否在buffer_cache中呢?

SELECT dirty FROM v$bh WHERE file#=6 And block#=19;
有数据表上在BUFFER_CACHE中,dirty字段为N为已写入磁盘。


通过以下几种方式制造坏块并进行修复

SQL> select a.*,rowid,                                                                                    
  2  Dbms_rowid.rowid_object(rowid) objid,                                                                
  3  dbms_rowid.rowid_relative_fno(rowid)rel_fno,                                                         
  4  dbms_rowid.rowid_block_number(rowid) blockno,                                                        
  5  dbms_rowid.rowid_row_number(rowid) rownumb                                                           
  6  from sun.bb1 a;                                                                                      
                                                                                    
        ID NAME       ROWID                   OBJID    REL_FNO    BLOCKNO    ROWNUMB
---------- ----------------------------- ---------- ---------- ---------- ----------
         1 SUN        AAAFE6AAGAAAADRAAA      20794          6        209          0
         2 CHENG      AAAFE6AAGAAAADRAAB      20794          6        209          1        

a> 通过rman制造坏块    
RMAN> blockrecover datafile 6 block 209  clear;
SQL> SELECT * FROM sun.bb1;
SELECT * FROM sun.bb1
                  *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 6, block # 209)
ORA-01110: data file 6: '/u01/app2/ora11/oradata/sunr/bbts01.dbf'


BBED> sum apply
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
Check value for File 6, Block 209:
current = 0x3141, required = 0x3141

BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app2/ora11/oradata/sunr/bbts01.dbf
BLOCK = 209


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
Message 531 not found;  product=RDBMS; facility=BBED



b> bbed制造坏块
BBED> corrupt dba 6,209
Block marked media corrupt.

BBED> 
BBED> 
BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app2/ora11/oradata/sunr/bbts01.dbf
BLOCK = 209

Block Checking: DBA = 25166033, 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
Message 531 not found;  product=RDBMS; facility=BBED


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        0x018000d1
   ub4 bas_kcbh                             @8        0x00000000
   ub2 wrp_kcbh                             @12       0x0000
   ub1 seq_kcbh                             @14       0xff
   ub1 flg_kcbh                             @15       0x04 (KCBHFCKV)
   ub2 chkval_kcbh                          @16       0x3361
   ub2 spare3_kcbh                          @18       0x0000

BBED> m /x 01 offset 14
 File: /u01/app2/ora11/oradata/sunr/bbts01.dbf (6)
 Block: 209              Offsets:   14 to  525           Dba:0x018000d1
------------------------------------------------------------------------
 01046133 00000100 00003a51 0000f451 20000000 00000200 3200c100 80010800 


BBED> sum apply
Check value for File 6, Block 209:
current = 0x339f, required = 0x339f

BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app2/ora11/oradata/sunr/bbts01.dbf
BLOCK = 209

Block 209 is corrupt
Corrupt block relative dba: 0x018000d1 (file 0, block 209)
Fractured block found during verification
Data in bad block:
 type: 6 format: 2 rdba: 0x018000d1
 last change scn: 0x0000.00000000 seq: 0x1 flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x000006ff
 check value in block header: 0x339f
 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           : 2
Message 531 not found;  product=RDBMS; facility=BBED


BBED> map
 File: /u01/app2/ora11/oradata/sunr/bbts01.dbf (6)
 Block: 209                                   Dba:0x018000d1
------------------------------------------------------------
 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[8044]                        @122     
 ub1 rowdata[22]                            @8166    
 ub4 tailchk                                @8188    


BBED> m /x 01060000 offset 8188
 File: /u01/app2/ora11/oradata/sunr/bbts01.dbf (6)
 Block: 209              Offsets: 8188 to 8191           Dba:0x018000d1
------------------------------------------------------------------------
 01060000 

 <32 bytes per line>

BBED> sum apply
Check value for File 6, Block 209:
current = 0x3361, required = 0x3361

BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app2/ora11/oradata/sunr/bbts01.dbf
BLOCK = 209


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
Message 531 not found;  product=RDBMS; facility=BBED



可以看到bbed的corrupt命令跟案例中的解决方式相同,修改seq_kcbh和tailchk


  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有