查看: 83|回复: 0

1.怎么计算出正确的checksum值?

[复制链接]
论坛徽章:
1
Oracle研习者高级
日期:2019-07-25 14:10:03
发表于 2019-7-14 14:51 | 显示全部楼层 |阅读模式

tm SQL RAC BI DBA

SQL> create table hdb12.test1(id int,name varchar2(10));

Table created.

SQL> insert into hdb12.test1 values(1,'hdb');

1 row created.

SQL> commit;

Commit complete.

select dbms_rowid.rowid_relative_fno(rowid) file_id,
       dbms_rowid.rowid_block_number(rowid) block_id,
       dbms_rowid.rowid_row_number(rowid)
       from hdb12.test1;

   FILE_ID   BLOCK_ID DBMS_ROWID.ROWID_ROW_NUMBER(ROWID)
---------- ---------- ----------------------------------
        12                26243                                       0

SQL> alter system flush buffer_cache;

System altered.

BBED> set file 12 block 26243
  FILE#            12
  BLOCK#           26243

BBED> map /v
File: /data/ORCL/datafile/hdb02.dbf (12)
Block: 26243                                 Dba:0x03006683
------------------------------------------------------------
KTB Data Block (Table/Cluster)

struct kcbh, 20 bytes                      @0      
    ub1 type_kcbh                           @0      
    ub1 frmt_kcbh                           @1      
    ub1 spare1_kcbh                         @2      
    ub1 spare2_kcbh                         @3      
    ub4 rdba_kcbh                           @4      
    ub4 bas_kcbh                            @8      
    ub2 wrp_kcbh                            @12      
    ub1 seq_kcbh                            @14      
    ub1 flg_kcbh                            @15      
    ub2 chkval_kcbh                         @16      
    ub2 spare3_kcbh                         @18      

struct ktbbh, 72 bytes                     @20      
    ub1 ktbbhtyp                            @20      
    union ktbbhsid, 4 bytes                 @24      
    struct ktbbhcsc, 8 bytes                @28      
    sb2 ktbbhict                            @36      
    ub1 ktbbhflg                            @38      
    ub1 ktbbhfsl                            @39      
    ub4 ktbbhfnx                            @40      
    struct ktbbhitl[2], 48 bytes            @44      

struct kdbh, 14 bytes                      @100     
    ub1 kdbhflag                            @100     
    sb1 kdbhntab                            @101     
    sb2 kdbhnrow                            @102     
    sb2 kdbhfrre                            @104     
    sb2 kdbhfsbo                            @106     
    sb2 kdbhfseo                            @108     
    sb2 kdbhavsp                            @110     
    sb2 kdbhtosp                            @112     

struct kdbt[1], 4 bytes                    @114     
    sb2 kdbtoffs                            @114     
    sb2 kdbtnrow                            @116     

sb2 kdbr[1]                                @118     

ub1 freespace[8058]                        @120     

ub1 rowdata[10]                            @8178   

ub4 tailchk                                @8188   


BBED> p chkval_kcbh
ub2 chkval_kcbh                             @16       0xd470

BBED> sum
Check value for File 12, Block 26243:
current = 0xd470, required = 0xd470

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

用dd命令导出12号文件
[oracle@orcl ~]$ dd if=/data/ORCL/datafile/hdb02.dbf of=/tmp/hdb1226243.dd count=1 skip=26243 bs=8192
1+0 records in
1+0 records out
8192 bytes (8.2 kB) copied, 0.00109806 s, 7.5 MB/s

用ue打开


dd if=/tmp/hdb1226243mod.dd of=/data/ORCL/datafile/hdb02.dbf seek=26243 bs=8192 count=1 conv=notrunc
1+0 records in
1+0 records out
8192 bytes (8.2 kB) copied, 0.000682266 s, 12.0 MB/s
[oracle@orcl tmp]$

SQL> startup
ORACLE instance started.

Total System Global Area 1252663296 bytes
Fixed Size                    2252824 bytes
Variable Size                  738201576 bytes
Database Buffers          503316480 bytes
Redo Buffers                    8892416 bytes
Database mounted.
Database opened.
SQL>

SQL> select * from hdb12.test1;
select * from hdb12.test1
                    *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 12, block # 26243)
ORA-01110: data file 12: '/data/ORCL/datafile/hdb02.dbf'


alert日志
Sun Jul 14 14:11:16 2019
Hex dump of (file 12, block 26243) in trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_5454.trc
Corrupt block relative dba: 0x03006683 (file 12, block 26243)
Bad check value found during multiblock buffer read
Data in bad block:
type: 6 format: 2 rdba: 0x03006683
last change scn: 0x0000.001aa310 seq: 0x1 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xa3100601
check value in block header: 0xd470
computed block checksum: 0x100
Reading datafile '/data/ORCL/datafile/hdb02.dbf' for corruption at rdba: 0x03006683 (file 12, block 26243)
Reread (file 12, block 26243) found same corrupt data (no logical check)
Sun Jul 14 14:11:17 2019
Corrupt Block Found
         TSN = 9, TSNAME = HDB_TBS
         RFN = 12, BLK = 26243, RDBA = 50357891
         OBJN = 91260, OBJD = 91260, OBJECT = TEST1, SUBOBJECT =
         SEGMENT OWNER = HDB12, SEGMENT TYPE = Table Segment
Corrupt Block Found
         TSN = 9, TSNAME = HDB_TBS
         RFN = 12, BLK = 26243, RDBA = 50357891
         OBJN = 91260, OBJD = 91260, OBJECT = TEST1, SUBOBJECT =
         SEGMENT OWNER = HDB12, SEGMENT TYPE = Table Segment
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_5454.trc  (incident=36154):
ORA-01578: ORACLE data block corrupted (file # 12, block # 26243)
ORA-01110: data file 12: '/data/ORCL/datafile/hdb02.dbf'
Incident details in: /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_36154/orcl_ora_5454_i36154.trc
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_5454.trc  (incident=36155):
ORA-01578: ORACLE data block corrupted (file # 12, block # 26243)
ORA-01110: data file 12: '/data/ORCL/datafile/hdb02.dbf'
Incident details in: /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_36155/orcl_ora_5454_i36155.trc
Sun Jul 14 14:11:20 2019
Dumping diagnostic data in directory=[cdmp_20190714141120], requested by (instance=1, osid=5454), summary=[incident=36154].
Sun Jul 14 14:11:21 2019
Sweep [inc][36154]: completed
Hex dump of (file 12, block 26243) in trace file /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_36154/orcl_m000_5488_i36154_a.tr
c
Corrupt block relative dba: 0x03006683 (file 12, block 26243)
Bad check value found during validation
Data in bad block:
type: 6 format: 2 rdba: 0x03006683
last change scn: 0x0000.001aa310 seq: 0x1 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xa3100601
check value in block header: 0xd470
computed block checksum: 0x100
Reread of blocknum=26243, file=/data/ORCL/datafile/hdb02.dbf. found same corrupt data
Reread of blocknum=26243, file=/data/ORCL/datafile/hdb02.dbf. found same corrupt data
Reread of blocknum=26243, file=/data/ORCL/datafile/hdb02.dbf. found same corrupt data
Reread of blocknum=26243, file=/data/ORCL/datafile/hdb02.dbf. found same corrupt data
Reread of blocknum=26243, file=/data/ORCL/datafile/hdb02.dbf. found same corrupt data
Dumping diagnostic data in directory=[cdmp_20190714141121], requested by (instance=1, osid=5454), summary=[incident=36155].
Checker run found 1 new persistent data failures
Sun Jul 14 14:11:48 2019
Sweep [inc][36155]: completed
Sweep [inc2][36155]: completed
Sweep [inc2][36154]: completed


check value in block header: 0xd470
computed block checksum: 0x100

重新计算checksum值,异或操作
d4 70  = 1101 0100 0111 0000
00 01  = 0000 0000 0000 0001
       = 1101 0100 0111 0001= d4 71

重新用bbed,修改
BBED> p chkval_kcbh
ub2 chkval_kcbh                             @16       0xd470

BBED> dump offset 16 count 32
File: /data/ORCL/datafile/hdb02.dbf (12)
Block: 26243            Offsets:   16 to   47           Dba:0x03006683
------------------------------------------------------------------------
70d40000 01000000 7c640100 0ea31a00 00000000 02003200 80660003 07000400

<32 bytes per line>
BBED> modify /x 71 offset 16
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /data/ORCL/datafile/hdb02.dbf (12)
Block: 26243            Offsets:   16 to   47           Dba:0x03006683
------------------------------------------------------------------------
71d40000 01000000 7c640100 0ea31a00 00000000 02003200 80660003 07000400

<32 bytes per line>

BBED> dump offset 16 count 32
File: /data/ORCL/datafile/hdb02.dbf (12)
Block: 26243            Offsets:   16 to   47           Dba:0x03006683
------------------------------------------------------------------------
71d40000 01000000 7c640100 0ea31a00 00000000 02003200 80660003 07000400

<32 bytes per line>

BBED> p chkval_kcbh
ub2 chkval_kcbh                             @16       0xd471

BBED> sum apply
Check value for File 12, Block 26243:
current = 0xd570, required = 0xd570

SQL> select * from hdb12.test1;

        ID NAME
---------- ----------
         2 hdb

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

 

GMT+8, 2019-9-19 22:31 , Processed in 0.106697 second(s), 30 queries .

关闭

扫一扫加入
本版微信群