问题描述
一个数据库,不知怎样就陷入了ORA-600 2831 和 kcfofl_01错误中,表空间无法删除,频繁出现如下错误:
Sun Jun 27 20:27:36 2010 drop tablespace sdat Sun Jun 27 20:27:36 2010 Errors in file d:\oracle\admin\eygle\udump\eygle_ora_4976.trc: ORA-00600: 内部错误代码, 参数: [kcfofl_01], [0], [0x0], [0], [0], [], [], [] Sun Jun 27 20:27:38 2010 ORA-600 signalled during: drop tablespace sdat... Sun Jun 27 20:27:38 2010 Errors in file d:\oracle\admin\eygle\udump\eygle_ora_4976.trc: ORA-00600: 内部错误代码, 参数: [2831], [0], [0x0], [0x0], [1], [0], [], [] ORA-00600: 内部错误代码, 参数: [kcfofl_01], [0], [0x0], [0], [0], [], [], []
专家解答
这个错误体现在表空间无法正常删除,那我们就尝试手工去清除文件及表空间信息:
SQL> delete from file$ where file#=10; 已删除1行。 SQL> select ts#,name from ts$; TS# NAME ---------- ------------------------------ 0 SYSTEM 1 UNDOTBS1 2 SYSAUX 3 TEMP 4 USERS 5 UNDOTBS2 6 DADI 7 PERFSTAT 8 SDAT 已选择9行。 SQL> delete from ts$ where ts#=8; delete from ts$ where ts#=8 *
第 1 行出现错误:
ORA-00600: 内部错误代码, 参数: [2831], [0], [0x0], [0x0], [1], [0], [], []
在试图删除ts$记录时数据库出现错误,2831阻止了删除操作,数据库后台Crash时,检查alert文件,可以发现如下错误提示:
Sun Jun 27 20:32:59 2010 ORACLE Instance eygle (pid = 8) - Error 600 encountered while recovering transaction (8, 8). Sun Jun 27 20:33:00 2010 Errors in file d:\oracle\admin\eygle\bdump\eygle_smon_1364.trc: ORA-00600: internal error code, arguments: [2831], [0], [0x0], [0x0], [1], [0], [], []
注意到这里的提示,在回滚段8上存在一个需要恢复的事务,导致了异常,我不再管这个错误的具体含义,只是确认这个表空间可以清理掉,就开始向下进行,阻止这个事务的恢复,设置隐含参数:
*._corrupted_rollback_segments='_SYSSMU1$' *._corrupted_rollback_segments='_SYSSMU2$' *._corrupted_rollback_segments='_SYSSMU3$' *._corrupted_rollback_segments='_SYSSMU4$' *._corrupted_rollback_segments='_SYSSMU5$' *._corrupted_rollback_segments='_SYSSMU6$' *._corrupted_rollback_segments='_SYSSMU7$' *._corrupted_rollback_segments='_SYSSMU8$' *._corrupted_rollback_segments='_SYSSMU9$' *._corrupted_rollback_segments='_SYSSMU10$' *._offline_rollback_segments='_SYSSMU1$' *._offline_rollback_segments='_SYSSMU2$' *._offline_rollback_segments='_SYSSMU3$' *._offline_rollback_segments='_SYSSMU4$' *._offline_rollback_segments='_SYSSMU5$' *._offline_rollback_segments='_SYSSMU6$' *._offline_rollback_segments='_SYSSMU7$' *._offline_rollback_segments='_SYSSMU8$' *._offline_rollback_segments='_SYSSMU9$' *._offline_rollback_segments='_SYSSMU10$'
此时进行表空间的清理工作,是可以进行的:
SQL> delete from ts$ where ts#=8; 已删除 1 行。 SQL> rollback; 回退已完成。 SQL> select ts# from ts$; TS# ---------- 0 1 2 3 4 5 6 7 8 已选择9行。 SQL> select ts#,name from ts$; TS# NAME ---------- ------------------------------ 0 SYSTEM 1 UNDOTBS1 2 SYSAUX 3 TEMP 4 USERS 5 UNDOTBS2 6 DADI 7 PERFSTAT 8 SDAT 已选择9行。
尝试DROP表空间出错,数据库崩溃:
SQL> drop tablespace SDAT; drop tablespace SDAT
第 1 行出现错误:
ORA-00600: 内部错误代码, 参数: [kcfofl_01], [0], [0x0], [0], [0], [], [], []
SQL> alter tablespace SDAT online; alter tablespace SDAT online
第 1 行出现错误:
ORA-00603: ORACLE 服务器会话因致命错误而终止
启动数据库再试试删除,又出错了:
SQL> delete from ts$ where ts#=8; delete from ts$ where ts#=8
第 1 行出现错误:
ORA-00600: 内部错误代码, 参数: [kcfofl_01], [0], [0x0], [1], [0], [], [], []
为什么呢?因为又有一个事务挂起了,需要恢复:
SQL> select name from v$rollname; NAME ------------------------------ SYSTEM _SYSSMU11$ _SYSSMU12$ _SYSSMU13$
再消灭这些回滚段后,可以再次执行删除操作:
SQL> shutdown immediate; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup ORACLE 例程已经启动。 Total System Global Area 1719664640 bytes Fixed Size 1299604 bytes Variable Size 377490284 bytes Database Buffers 1333788672 bytes Redo Buffers 7086080 bytes 数据库装载完毕。 数据库已经打开。 SQL> delete from ts$ where ts#=8; 已删除 1 行。 SQL> commit; 提交完成。
这之后还可能出UNDO的错误提示,将UNDO表空间重建可以消除:
Wed Jul 28 12:37:43 2010 Errors in file d:\oracle\admin\eygle\bdump\eygle_smon_2668.trc: ORA-00607: Internal error occurred while making a change to a data block ORA-00600: internal error code, arguments: [kddummy_blkchk], [2], [121], [38508], [], [], [], [] Wed Jul 28 12:37:45 2010 Errors in file d:\oracle\admin\eygle\bdump\eygle_smon_2668.trc: ORA-00600: internal error code, arguments: [kddummy_blkchk], [2], [121], [38508], [], [], [], []
再然后,表空间的维护工作可以顺利进行:
SQL> create tablespace test ; 表空间已创建。 SQL> drop tablespace test; 表空间已删除。
直接操作数据字典有风险,验证需要严谨!
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。