oracle数据库校验码

来源:互联网 发布:vb对象的属性是指 编辑:程序博客网 时间:2024/06/10 12:47
查看数据块的校验码(注意:我的机器的endian format为little)

校验码的位置在数据块的 第 16、17两个字节

BBED> set dba 1, 42        DBA             0x0040002a (4194346 1,42)BBED> set offset 16 count 2        OFFSET          16        COUNT           2BBED> dump File: /u01/app/oracle/oradata/normal/system01.dbf (1) Block: 42               Offsets:   16 to   17           Dba:0x0040002a------------------------------------------------------------------------ bdef--这就是校验码的值(check sum)——需要倒过来 bdef -> efbdBBED> sum applyCheck value for File 1, Block 42:current = 0xefbd, required = 0xefbd--这里的值就是上面dump出来的值
数据块头尾校验,其校验值存放在数据块的 8818字节中,占4个字节。
数据块头尾校验值组成是:
数据块的 SEQ(offset 14 开始的 1个字节)+ 数据库类型(offset 0开始的 1个字节)
最低 SCN_BASE注意:如果操作系统的endian format 为 little,则从offset 8开始的2个字节,
如果endian format 为 big,则从offset 10 开始的2个字节
)组成

下面我们一一查看各个值
--数据库SEQ值BBED> dump offset 14 count 1 File: /u01/app/oracle/oradata/normal/system01.dbf (1) Block: 42               Offsets:   14 to   14           Dba:0x0040002a------------------------------------------------------------------------ 01  --数据块类型BBED> dump offset 0 count 1 File: /u01/app/oracle/oradata/normal/system01.dbf (1) Block: 42               Offsets:    0 to    0           Dba:0x0040002a------------------------------------------------------------------------ 06 --最低SCN_BASEBBED> dump offset 8 count 2 File: /u01/app/oracle/oradata/normal/system01.dbf (1) Block: 42               Offsets:    8 to    9           Dba:0x0040002a------------------------------------------------------------------------ 3a04 --数据块头尾校验值BBED> dump offset 8188 count 4 File: /u01/app/oracle/oradata/normal/system01.dbf (1) Block: 42               Offsets: 8188 to 8191           Dba:0x0040002a------------------------------------------------------------------------ 01063a04 
上面验证了
数据块头尾校验值 = 数据库SEQ值 + 数据块类型 + 最低SCN_BASE
01063a04 = 01 +06 +  3a04


注意:如果出现坏块,则:
数据块头尾校验值 !=  数据库SEQ值 + 数据块类型 + 最低SCN_BASE
因此,可以使用bbed修改 数据块头尾校验值 让他和 (数据库SEQ值 + 数据块类型 + 最低SCN_BASE)值一样
(提醒:慎用bbed)

0 0