1/7用友股份-LE支持服务业务本部技术方案--《Undo表空间导致数据库无法启动》建立日期:2013-07-01修改日期:xxxx-xx-xx文档属性:客户文控编号:LE-DY-JS-2013-00912/7文档控制创建记录适用范围审阅人日期审阅签字所属部门发布范围内部员工伙伴客户发布人姓名所属部门发布时间日期作者所属部门邮件地址版本2013-7-01雷鹏产品支持部V1.0版本领域模块备注3/7目录Undo表空间导致数据库无法启动.............................................................................4一.系统环境...................................................................................................................4二.问题描述.................................................................................................................4三.检查分析.................................................................................................................4四.解决方法.................................................................................................................5五.其他.........................................................................................................................64/7Undo表空间导致数据库无法启动一.系统环境Oracle10.2.0.1平台:window二.问题描述数据库服务器断电,导致数据库系统突然中断,第二天数据库无法启动,启动时报错。三.检查分析Window平台,先启动oracle服务,启动成功。打开cmd,sqlplus/assysdba连接到未启动的实例。Startupnomount;成功Alterdatabasemount;成功Alterdatabaseopen;报错查看告警日志:5/7Ora-00600,内部错误,4193,查询metalink,4193和undo表空间的逻辑错误有关系。四.解决方法思路:undo表空间有问题,那么就重建一个,把默认的undo表空间替换成重建的。目前数据库无法open,无法建表空间。那么先不用undo表空间,用system回滚段来进行undo管理,createapfilefromspfile;编辑修改pfile文件内容:undo_management='MANUAL'用修改后的pfile能正常打开数据库。6/7createundotablespacedatafilesize2000M;创建新的undo表空间。alterdatabasedatafile文件路径autoextendon;设置自动扩展。关闭数据库,startupmount,用spfile启动到mount阶段,修改Undo表空间为新建altersystemsetundo_tablespace=''scope=spfile;altersystemsetundo_management='AUTO'scope=spfile;在关闭数据库,在重新正常启动,startup,启动成功。五.其他后续问题:数据库打开后,持续观察,alert日志还会报错7/7Ora-006006006错误,因为重建了undo表空间,所以在回滚事务时可能会发生错误,根据ojbectid找到对应的索引,进行重建。前台执行一个操作报错:ORA-08102未找到索引关键字索引有问题,需要重建,前台报错会把object_id输出,进行查询select*fromdba_objectswhereobject_id=?'可以找到是什么索引出的问题。此时不能简单的alterindexXXrebuild;开始rebuild后仍然报错。最好drop掉索引重建后,不报错。或者用rebuildonlinerebuildonline会重新读表来创建索引,而rebuild可能会读取原先的索引段而不会去读表。