如何解决Oracle启动时的ORA-1545

如果Oracle数据库启动的时候报ORA-1545错误,我们该如何处置呢?

如何解决Oracle启动时的ORA-1545

看Oracle的错误文件,这个错误是因为回滚段出现问题导致的。一般情况下,如果我们在数据库实例启动的时候发现有ORA-1545,那么我们需要首先把数据库启动到mount 状态,然后检查v$datafile,看看是不是有数据文件处于OFFLINE状态。如果存在OFFLINE的文件,那么就对该文件执行ONLINE操作。如果这个步骤做完后,该问题已经解决,那么就恭喜你,你已经遇到了最为简单的情况(有些情况下,执行alter database datafile … online操作可能会报失败,不过不要着急,有可能此时你打开数据库的时候,这个故障已经消失了)。如果处于offline的文件物理不存在了,那么你可能就遇到了大麻烦,处理丢失的文件暂时不在我们今天的讨论范围。

如果上面的操作没有解决问题,那么下一步我们就需要来分析到底那个rbs存在问题。此时,设置10013/10015这两个EVENT是最为有效的方法。10013事件的作用是在数据库实例启动的时候DUMP出实例recovery阶段使用到的rbs的名称,10015事件的作用是在实例启动的时候DUMP出实例recovery阶段使用到的回滚段头的信息。通过这个信息我们可以发现存在问题的事务槽。

event = "10013 trace name context forever, level 10"

event = "10015 trace name context forever, level 10"


最简单的方法是按照上面的第五点的方法,把上面步骤中发现的存在问题的回滚段离线。离线后数据库一般就能正常打开了。不过这个时候,数据库中可能还存在不一致的地方,最简单的后果就是存在部分坏块。通过正常的方式去处置坏块就可以了。

最后是最坏的一种情况,那就是system 回滚段存在问题,这时候常规的处置方式就无法解决问题了,这意味着很可能字典表的数据存在无法恢复的事务。此时必须通过bbed手工修复回滚段段头的不一致的地方,欺骗数据库,从而强制打开数据库。这个被强制打开的数据库如果是某些关键的字典表存在坏块,也只能临时用来导出数据。有可能需要重建数据库了。10多年前,某著名快递公司的数据库因为停电机房过热导致存储自动关闭,数据库启动时就出现了SYSTEM 回滚段导致的ORA-1545,当时是老储用BBED把数据库强行拉起来的。具体如何用BBED去解决这个问题,我们以后找时间再聊。

如何解决Oracle启动时的ORA-1545》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:https://www.hashtobe.com/1149.html