« Linux下硬盘格式化的相关命令Partprobe | Blog首页 | Toad 引发的ORA-00600 17281错误 »
Oracle数据库恢复:解决ORA-600 2831错误
作者:eygle | 【转载请注出处】|【云和恩墨 领先的zData数据库一体机 | zCloud PaaS云管平台 | SQM SQL审核平台 | ZDBM 数据库备份一体机】
链接:https://www.eygle.com/archives/2010/07/ora_600_2831.html
一个数据库,不知怎样就陷入了ORA-600 2831 和 kcfofl_01错误中,表空间无法删除,频繁出现如下错误:链接:https://www.eygle.com/archives/2010/07/ora_600_2831.html
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;在试图删除ts$记录时数据库出现错误,2831阻止了删除操作,数据库后台Crash时,检查alert文件,可以发现如下错误提示:
已删除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], [], []
Sun Jun 27 20:32:59 2010注意到这里的提示,在回滚段8上存在一个需要恢复的事务,导致了异常,我不再管这个错误的具体含义,只是确认这个表空间可以清理掉,就开始向下进行,阻止这个事务的恢复,设置隐含参数:
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], [], []
*._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;尝试DROP表空间出错,数据库崩溃:
已删除 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行。
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;
表空间已删除。
直接操作数据字典有风险,验证需要严谨!
-The End-
历史上的今天...
>> 2020-07-28文章:
>> 2011-07-28文章:
>> 2008-07-28文章:
>> 2007-07-28文章:
>> 2006-07-28文章:
>> 2005-07-28文章:
By eygle on 2010-07-28 15:25 | Comments (0) | Backup&Recovery | Case | 2588 |