oracle9i 恢复 bad的回滚段导致的不能启动 备忘

停电等意外关机会使oracle数据库出现bad回滚段,导致数据库无法启动。解决办法是去掉回滚段启动。




现象:
startup时出现ORA-01092错误
查看TRC日志文件,是ORA-00600错误。
ORA-00600: internal error code, arguments: [kteuPropTime-2], [], [], [], [], [], [], []
由于ORACLE9.2.0.1里的BUG(BUG#: 2431450),使的SMON在工作过程中导致ORACLE实例crash,留下一个或多个bad的回滚段。
当试图在宕掉的数据库重新startup时,SMON要进行事务恢复,从bad的回滚段里读取信息时失败,再次使ORACLE实例crash,
从而数据库无法正常OPEN。
二、解决步骤
1,首先要找出bad的回滚段。
在初始化参数文件里增加下面2行
_smu_debug_mode=1
event="10015 trace name context forever, level 10"
(_smu_debug_mode简单的收集诊断信息。Event 10015是回滚段恢复跟踪事件。)
修改好参数文件后shutdown immediate数据库后,再startup数据库。此时数据库能mount,但仍然无法Open.
还会遇到ORA-01092错误。但这次ORACLE会把bad的回滚段信息写到跟踪文件里。udump
在跟踪文件里发现是_SYSSMU1$回滚段bad。
2,在初始化参数文件里去掉刚才增加的2行
_smu_debug_mode=1
event="10015 trace name context forever, level 10"
增加新的一行
_corrupted_rollback_segments=(_SYSSMU1$)
修改好参数文件后shutdown数据库,再startup数据库。此时数据库能OPen。
3,在SQLPLUS里登陆数据库
select segment_id,segment_name,tablespace_name,status
from dba_rollback_segs
where owner='PUBLIC';
SQL> /
         1 _SYSSMU1$                      UNDOTBS1                       NEEDS RECOVERY                                                                                                                 
         2 _SYSSMU2$                      UNDOTBS1                       ONLINE                                                                                                                        
         3 _SYSSMU3$                      UNDOTBS1                       ONLINE                                                                                                                        
         4 _SYSSMU4$                      UNDOTBS1                       ONLINE                                                                                                                        
         5 _SYSSMU5$                      UNDOTBS1                       ONLINE                                                                                                                        
         6 _SYSSMU6$                      UNDOTBS1                       ONLINE                                                                                                                        
         7 _SYSSMU7$                      UNDOTBS1                       ONLINE                                                                                                                        
         8 _SYSSMU8$                      UNDOTBS1                       ONLINE                                                                                                                        
         9 _SYSSMU9$                      UNDOTBS1                       ONLINE                                                                                                                        
        10 _SYSSMU10$                     UNDOTBS1                       ONLINE                                                                                                                        
10 rows selected.
果然是_SYSSMU1$回滚段的状态是‘NEEDS RECOVERY’。其它9个回滚段是ONLINE的。
此时数据库已经能够正常使用,不过SMON会每隔5分钟写一条日志信息:
SMON:about to recover undo segment 1
SMON: mark undo segment 1 as needs recovery
4,删除bad的回滚段
在SQLPLUS里
drop rollback segment "_SYSSMU1$";
5,再修改修改好参数文件,去掉
_corrupted_rollback_segments=(_SYSSMU1$)
这一行,然后shutdown,再startup。
这样数据库又恢复了正常。

 

原始内容地址:http://chenhanzhao555.blog.163.com/blog/static/8557636320086221931754/

你可能感兴趣的:(oracle,sql,工作,Blog)