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

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

如何修复未格式化的坏块?

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

本文链接地址: 如何修复未格式化的坏块?

最近需要迁移的3套rac数据中,检查发现都出现了坏块,而且部分坏块是未格式化的坏块,例如:

可以看到该坏块数据是写紊乱了,将file 147 block 805315的数据写入到file 34 block 3819968 中了。
通过如下sql查询可以发现属于未格式化的坏块,不属于任何对象:

虽然未格式化的坏块可能不会存在什么危险,在后面有业务数据插入时会进行将其格式化掉,但是由于坏块的存在,
导致rman备份无法成功,进而也就影响到我们这次的迁移测试了。

我这里利用vmware环境来模拟该问题,并给出解决方案,供大家参考!

—-方法1 利用alter table xxx allocate extent

从上面信息可以看出,目前datafile 5中所分配的最大block号为2057+128-1=2184,换句话说以后的block都是空块。
我这里利用bbed来制造一个未格式化的坏块,也就是尚未利用的坏块(可能是已经分配但没有数据).

这里利用bbed随便修改一下,制造一个坏块如下:

下面我们来想办法格式化这个未格式化的坏块:

可以看到2200这个坏块已经包含在extent里面了,此时,我们来dbv检查一下。

—-方法2 利用dd+bbed修复

下面我们使用dd来复制一个正常的未格式化block,将该坏块替换掉。

很显然,我们copy一个block过来替换以后,还不行,还得进行修改,此时你dbv检查可以看到仍然是坏块,如下:

下面我们利用bbed再进行适当修改即可,如下:

我们可以看到成功修复了该坏块。

One Response to “如何修复未格式化的坏块?”

  1. Dong_2 Says:

Leave a Reply

You must be logged in to post a comment.