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

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

Instance immediate crash after open

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

本文链接地址: Instance immediate crash after open

一个朋友公司的数据库出现异常,没有备份。 数据库open之后很快就crash掉,如下的alert log的信息:

可以看出,是smon进程无法对某个事务进行恢复导致,最后Pmon进程强行终止了Instance。

具体来讲,是无法恢复这个事务:transaction (14, 2) on object 15113

从信息来看,是smon 回滚事务存在异常,那么我们来分析下smon 进程的trace文件,确认下为什么无法恢复(14,2)这个事务。

根据事务(14,2),直接搜索:000e.002 定位到如下信息

可以看到,(14,2)这个事务包含了5个undo record,也就是需要进行5个操作,然后到最后record 1的时候无法进行了。
真的是这样吗?

我们首先来看下该undo block的dump信息:
xid: 0x000e.002.00034175  seq: 0x35dc cnt: 0x5   irb: 0x1

从这里我们可以看出,这个undo block包含了5个undo record,然而针对该事务而言,起点是irb:0x1,也就是第一个undo record。

这里明显是有问题的,我们可以看到如下的几个undo recor的rci值分别是:0x04 0x03 0x02 0x01 0x00

所以,从undo record的rci值来判断,这个事务应该是从undo record 5开始rollback到undo record 1结束。

但是undo block中提到的irb值居然是0x1 ?  这里irb:0x1 是第一个undo record,其rci值本身就为0了,怎么回滚?

因此,很明显这里是存在问题。

所以如果想要临时解决该数据库open之后不crash的问题,那么可以直接修改下这个undo block.修改下irb或rci的值。

备注:朋友这里的库,其他还有其他的文件存在坏块,这里暂不讨论。因为没有其他信息了。

Leave a Reply

You must be logged in to post a comment.