love wife & love life —Roger的Oracle&MySQL技术博客

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

How to drop a Index with bbed?

本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger的Oracle&MySQL技术博客

本文链接地址: How to drop a Index with bbed?

这是oracle恢复课程的一点内容,有朋友在问,所以就贴出来,其实没有什么,很简单,供大家参考!
在某些情况下,oracle的bootstrap$的一些对象出现异常之后,比如Index。我们无法进行rebuild,或许只能用一些极端的手段去将Index drop然后重建(当然还有其他的方法)。这里是利用bbed来drop Index的例子!

可以看到,上面的SQL走了Index fast full scan,现在我们的目的就是把这个Index drop掉,让其走full table scan。

下面我们开始利用BBED来写进行修改,如下步骤:

修改之后发现还有点问题,说明还有一些地方没有修改对,下面继续:

这里提示stb=4,那说明这个avsp 实际上应该是7739+4才对。

ok,修改完毕之后,下面我们来启动数据库,观察一下效果.

ok,这个sql已经走全表扫描了,虽然是这样,但是如果你去重建该索引,可能会有问题,为什么呢 ? 因为索引信息不一致了。
对于Index的信息会存放在数据字典表ind$中,而该字典表是一个bootstrap$的对象,因此我们还需要进行一些其他的操作。

我们发现bootstrap$对象中的index,是不能进行rebuild的,那么怎么办呢? 下面我们利用bbed来手工将其中的键值删掉。

我们新建的索引肯定在最后一个block中。对于生产恢复而言,本身ind$记录不会太多,所以我们大不了一个一个index block去找,也没几个block。

对于index,我们如果需要从index block中将键值删掉,那么需要修改如下几个地方:
行头的lock标志位: 删掉一条记录,就加1,删除2条就加2.kdxlende:    这个之前,我们讲过,表示被删index entry的数量
由于system是MSSM方式,因此计算offset的公式应该是:bash =offset+68+(itl-1)*24

既然知道了这一点,那么我们就开始动手进行bbed修改了,如下:

ok,现在bbed校验已经不再提示错误,修改完成之后,我们来重建索引即可。

这种测试意义不大,供大家参考!

Leave a Reply

You must be logged in to post a comment.