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

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

数据库open报错ORA-01555: snapshot too old

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

本文链接地址: 数据库open报错ORA-01555: snapshot too old

今天正在东莞蜜月的时候,一个学生说他管理的测试库出问题了,无法open,我们先来看看是什么问题:

从上面的错误来看,该数据库之所以open失败,是由于Oracle在bootstrap阶段执行递归SQL时出现ora-01555错误,
这样bootstrap过程无法继续下去,也就导致数据库无法open。我们可以看到报错的SQL语句如下:
select ctime, mtime, stime from obj$ where obj# = :1

这是很熟悉的一个SQL,通过10046 trace跟踪Oracle open的过程你会发现该SQL。

针对该错误,或许有人以为是回滚段的问题,实际上并不是,这种情况下推进下SCN 就可以很顺利的把数据库open。

但是这里有个问题:该兄弟的数据库是Oracle 11.2.0.4,已经不支持传统的10015 event的方式了。

下面我们通过oradebug 来解决该问题:

这里简单解释一下,4 为长度,0x859AFA是16进制,我在原来的v$datafile_header.checkpoint_change#的基础之上
加上上1000000得到该值。

我们可以看到,顺利打开了数据库。最后再出观察下alert log发现居然有ora-00600 4194错误。

这是一个非常常见的错误了,最简单的方式就是通过重建undo或处理回滚段来解决,这里我们用最简单的方式:

重建undo之后,再停库,修改undo参数即可顺利打开数据库,如下:

 

处理完成之后alert log不再抛出任何错误。

Leave a Reply

You must be logged in to post a comment.