数据库突然断电后,不能打开。或者偶尔能打开,但是很快就关闭。 原因可能很多。但是解决问题只有一种办法:看trace日志,alert错误日志
简单写下我的解决过程:
1,在alert日志中:
错误如下两种:
ORA-00600: internal error code, arguments: [4193], [1526], [1543], [], [], [], [], []
ORA-00600: internal error code, arguments: [4194], [151], [543], [], [], [], [], []
2,查看alert日志:
Errors in file e:\oracle\product\10.2.0\db_1\admin\orcl\udump\orcl_ora_2540.trc:
ORA-00600: 内部错误代码, 参数: [4194], [37], [26], [], [], [], [], []
3,去查看orcl_ora_2540.trc日志文件,
通过错误信息确定当前出错的回滚段:0~10,
4,修改pfile(注意保存以前pfile):
加入如下代码:
*.undo_management='MANUAL‘(将auto修改为MANUAL) _corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
5,现在输入命令:
SQL>startup;
就可以看到数据库正常启动了。
6,新建新的undo表空间
create undo tablespace undotbs2 datafile 'D:\ORACLE\PRODUCT\10.0.2\ORADATA\orcl\undotbs2.dbf';(自己的目录)
7,重定位到新的表空间:
alter system set undo_tablespace=undotbs2;
8,删除旧的表空间:
drop tablespace undotbs2;
9,修改pfile,将undo_management 由手动改回自动,修改undo_tablespace指向新的表空间,去掉
_corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
修改如下:
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS2'
*.user_dump_dest='E:\oracle\product\10.2.0\db_1/admin/orcl/udump'
10,输入命令:
startup pfile=’……ora'
11,create spfile from pfile (注意备份)。( spfile = E:\ORACLE\PRODUCT\10.2.0\DB_1\DBS\SPFILEORCL.ORA)
12,shutdown immediate;
13,startup ;ok
附:一些有用的命令:
host lsnrctl status;查看当前例程状态
show parameter undo; 查看当前使用的undo表空间
SELECT SEGMENT_NAME, OWNER, TABLESPACE_NAME, STATUS FROM DBA_ROLLBACK_SEGS;