Oracle数据库报错ORA-00600 [kddummy_blkchk] 处理过程

教程发布:风哥 教程分类:ITPUX技术网 更新日期:2022-02-12 浏览学习:364

ORA-00600 [kddummy_blkchk]故障现象介绍在对某个用户或某个表进行删除时,出现ORA-00600: internal error code, arguments: [kddummy_blkchk]错误,详细报表如下:SQL> drop user CS_SERVICES cascade ;drop user CS_SERVICES cascade*ERROR at line 1:ORA-00607: Internal error occurred while making a change to a data blockORA-00600: internal error code, arguments: [kddummy_blkchk], [45], [3],[18018], [], [], [], []

关于ORA-00600[kddummy_blkchk]这个报错的解释如下:当Oracle进程在读取数据块时会做一系列逻辑检测,当发现块当中存在逻辑讹误就会触发该ORA-00600 [kddummy_blkchk]等内部错误;[kddummy_blkchk]内部函数的功能大致与[kdBlkCheckError]相仿,它们都有3个参数argument:
ORA-600 [kddummy_blkchk] [file#] [block#] [check code]
ORA-600 [kdBlkCheckError] [file#] [block#] [check code]

file#即问题块所在datafile的文件号,block#即问题块的块号,check code为发现逻辑讹误时的检测种类代码;我们也可以通过file#和block#查找到存在问题的对象,我们这个报错中的file#为45,block#为3,检查种类代码为18018:select segment_name,segment_type,owner from dba_extents where file_id = 45 and 3 between block_id and block_id + blocks -1;

在我们能够打开数据库的情况下,针对由ORA-600[[kddummy_blkchk]或[kdBlkCheckError]引起的实例意外终止及启动实例失败等现象,
我们可以通过修改db_block_checking和db_block_checksum 2个参数为false,来阻止Oracle进程对数据块的一些逻辑检测工作:SQL> alter system set db_block_checking=false; System altered. SQL> alter system set db_block_checksum=false; System altered.

再次删除这个用户或表,成功。SQL> drop user CS_SERVICES cascade ;
10g中默认参数db_block_checksum为TRUE,所以建议你在解决这个问题后,将该参数还原。

如果以上报错是在数据库无法打开的情况下,如遇此类argument[a]对应为system表空间的ORA-600[kddummy_blkchk]内部错误,可以尝试使用10513来进一步阻止数据库打开后smon进程的事务恢复(transaction recovery)行为:[color=orange]SQL> alter system set event='10513 trace name context forever,level 2' scope=spfile; 重启数据库,并进一步对存在问题块的表执行了导出导入的工作,最终解决了问题。

本文标签:
网站声明:本文由风哥整理发布,转载请保留此段声明,本站所有内容将不对其使用后果做任何承诺,请读者谨慎使用!
【上一篇】
【下一篇】