首页 > 代码库 > 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.建议:使用逻辑导出导入重建数据库