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

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

数据文件头部位图block损坏怎么办

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

本文链接地址: 数据文件头部位图block损坏怎么办

近期某客户的一个核心出现异常;其中某个数据文件头部位图block损坏,导致业务收到现在。那么针对这种情况,该如何处理呢?

通常的做法有如下3种:

1、使用dbms_space_admin去重建表空间的bitmap block信息;这种方案通常情况下执行都不会成功。

2、将问题文件上面的对象全部move到其他表空间种,并drop该datafile。

3、移动整个问题表空间的对象,然后drop重建整个表空间;一般来讲,如果表空间比较大,这个方案通常不可行。

因此,我们可能多数情况下都会选择第2种方案。

这里我们先来模拟一下客户环境种的实际错误情况。

1、创建测试表空间并增加数据文件

 

2、dump datafile bitmap信息

从上述dump的trace种我们可以看到file 6文件头部前面的file space bitmap block信息。

3、bbed修改文件头

这里我们修改frist和end rdba地址即可。

4、尝试通过move表然后drop 数据文件

 

那么如果处理这个问题呢。首先我们确实需要讲损坏文件上面的对象都挪走或者drop掉(如果可以drop的话).

当把对象都move或者drop后;我们再进行drop datafile操作时,发现仍然会提示坏块。这种情况下,其实处理也比较简单。

既然对都不存在了,那么可以完全可以把该文件理解为一个空文件。通过在同一个表空间种增加一个空的数据文件的方式,然后copy同样的block

进行覆盖即可。

接下来最后我们来试试能否drop这个不需要的文件。

可以看到,我们非常顺利删除了这个问题文件。

很久没写文章了;比较简单的测试;供大家参考!

Leave a Reply

You must be logged in to post a comment.