love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL/PostgreSQL数据恢复、性能优化、迁移升级、紧急救援等服务

ora-00600 [kddummy_blkchk] solution

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

本文链接地址: ora-00600 [kddummy_blkchk] solution

一个朋友的rac数据库遇到一个问题,报错ora-00600 [kddummy_blkchk],开始以为是普通的坏块,检查
之后发现只是的,完整的错误如下:

同如下sql去查询和dbv检查都是不行的:

在老熊的指点下,我翻了去年的笔记,才发现了:

这里我们先来回顾一下oracle LMT情况下,datafile的物理结构

file header,bitmapped file space header,head portion of bitmapp blocks以及
useful file blocks,tail portail of bitmap blocks。

从上面的查询block_id=9 我们可以看出,oracle保留了前面9个block(block 0~8)

下面我们来看看这9个block的具体情况:

block 0: OS header
block 1: datafile header
block 2: bitmapped file space header
block 3~8: Head portion of bitmap blocks

这段话来自我2010年的笔记,从上面的错误我们可以知道这个block是file 23的第3个block,
也就是这里的head portion of bitmap block,这是用来位图标记的,简单的说,就是通过
这几个位图块来记录整个datafile 里面extent的分配使用情况。

所以,这几个位图块是不会出现在dba_extents里面的,查询当然也就查不到了,如下:

下面我这里来手工模拟下这个ora-00600错误。

这里用bbed来适当破坏一下file 5的第3个block,其实破坏第3~8个block都是一样的效果。

block破坏完成以后,启动数据库。

我们可以看到,虽然说该block有问题,但是针对该block的查询是正常的,但是涉及到dml操作就会报错,因为
需要alloacion 空间,分配空间就需要去读和更改这几个bitmap block。

当然,处理方式也就不难了,我们可以直接把datafile上面的对象move到其他表空间,然后将这个表空间drop或
datafile drop即可。

这里需要说明的是,这些位图block出问题,是不能通过dbms_repair包去进行fix的。

3 Responses to “ora-00600 [kddummy_blkchk] solution”

  1. Dong_2 Says:

    太牛了,要是我想不到这个方法!

  2. Yi_tang Says:

    膜拜大师!

  3. Ayahumalonginus Says:

    牛人,讲解得很清楚

Leave a Reply

You must be logged in to post a comment.