首页 > 代码库 > undo回滚异常导致实例奔溃,无法正常open

undo回滚异常导致实例奔溃,无法正常open

接到地市反馈某一个数据库打不开了

1.登陆主机,查看数据库告警日志

最早数据库出现问题时的日志是在2014年6月7日


数据库在切换redo时异常关闭,之后数据库一直为开启使用

2.数据库在2014年6月8日 OPEN后,有recovery的进程报错


目前已经找不到这些文件,无法核实当时的异常信息源,接着往下看日志

3.数据库在2014年6月9日11:36:45时又异常关闭


4.同样的现象出现在2014年8月11日13:26:07,数据库异常关闭


5.数据库在2014年8月11日13:18:46再次启动



整个数据库打开的过程中,控制文件正常加载,redo正常recovery,且前滚已经结束,在做后滚的时候数据库出现异常

6.可以从v$database、v$datafile_header、v$datafile看出数据库的scn已经处于一致状态,说明前滚已经结束,可以正常OPEN

。。。后面的数据文件省略


。。。后面的数据文件省略

7.查看pmon和smon的trace文件

PMON TRACE:/opt/oracle/app/admin/hfjyfx/bdump/hfjyfx_pmon_8198.trc


SMON TRACE:/opt/oracle/app/admin/hfjyfx/bdump/hfjyfx_smon_8210.trc


说明数据库在前滚结束,OPEN数据库的同时,由于UNDO里面的事务回滚时(undo segment 12),无法对file 63 block 1531279进程更新,导致回滚失败,实例异常终止。


【解决方案】

1.使用隐含参数屏蔽异常回滚段_offline_rollback_segments=_SYSSMU12$


2.修改undo_tablespace=SYSTEM/undo_management=MANUAL


3.启动数据库,快速删除包含_SYSSMU12$ undo表空间


4.新建undo表空间


5.修改undo_tablespace=new_undo/undo_management=AUTO,除掉隐含参数


6.使用新参数文件重启数据库


7.建议:使用逻辑导出导入重建数据库