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

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

很久没恢复过Oracle 9的数据库了

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

本文链接地址: 很久没恢复过Oracle 9的数据库了

上周末一位同事反馈说某客户维保的一套数据库无法启动了;本来没有什么兴趣继续看了。但听说是Oracle 9的老库;很多年没玩这么老的版本了。远程支持一下吧;整个恢复非常简单,就不做过多描述了。先来看看当时的报错信息:

从上述报错信息来看很明显是坏块,而且是undotbs出现了问题;后面的ora-00600 [kcbzpb_1]其实也坏块导致;大家从函数名称就可以猜出来了。从目前来看是Oracle在open时通过undo进行事务恢复时遇到坏块导致异常终止了。

如果是10g或者11g的库,那你在recover database时可以allow xx corruption的方式来跳过部分坏块(10g只能允许1个,11g可以允许跳过多个坏块);通过破坏事务一致性的方法来完成恢复。很可惜这是oracle 9.0 版本。

处理方法也简单,设置undo_managment参数即可并加上强制open参数;在open时发现报错数据块scn问题:

这个错误也是老生常谈了;以前blog写过太多了,这里不再进行描述了。

处理方法有几种:

1、bbed修改block的事务(这里8388913就是dba 地址,为10进制,转换一下即可)

2、推进整个db的scn来绕过这个错误(oradebug、event 10015等等均可)

由于这里是Oracle 9,可以使用event 10015,所以我直接使用该event了。非常顺利就open了。

打开数据库后重建一下undo tablespace即可;同事客户开始进行数据库导出重建的工作。

备注:event 10015 在11.2.0.3.2+版本不再支持,已经被废弃,可以通过oradebug poke来推进scn。

Leave a Reply

You must be logged in to post a comment.