[Oracle]ORA-600[kdBlkCheckError]LOB坏块处理

Posted 健哥的数据花园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Oracle]ORA-600[kdBlkCheckError]LOB坏块处理相关的知识,希望对你有一定的参考价值。

[Oracle]ORA-600[kdBlkCheckError]LOB坏块处理

客户环境报如下错误:

ORA - 00600: Internal error code, arguments: [kdBlkCheckError], [2], [10388], [63068], [], [], [], [], [], [], [], []

alert log 中有这样的信息:

Thu Sep 07 19:14:00 2017
Corrupt Block Found
        CONT = 0, TSN = 1, TSNAME = SYSAUX
        RFN = 2, BLK = 10123, RDBA = 7364815
        OBJN = 10388, OBJD = 10388, OBJECT = SYS_LOB0000010129C00001$$, SUBOBJECT =
        SEGMENT OWNER = SYS, SEGMENT TYPE = Lob Segment

查看Trace,看到关联的SQL问也是 OPATCH_XINV_TAB 表。

----- Current SQL Statement for this session (sql_id=20x4skym5bskj) -----
 INSERT INTO OPATCH_XINV_TAB(XML_INVENTORY) SELECT * FROM OPATCH_XML_INV

查询相关的情报,可以看到 OPATCH_XINV_TAB 的 XML_INVENTORY 列, 使用了 LOB字段。

 SQL> set pages 10000 line 200
 SQL> select * from dba_lobs where segment_name = ‘SYS_LOB0000010129C00001$$‘;
 
 OWNER
 ----------------
 TABLE_NAME
 ----------------
 COLUMN_NAME
 --------------------------------
 SEGMENT_NAME                                          TABLESPACE_NAME ...
 ---------------- ------------------------------
 SYS
 OPATCH_XINV_TAB
 XML_INVENTORY
 SYS_LOB0000010129C00001$$                             SYSAUX

由于没有备份,只能考虑对LOB 进行清除处理。但是还是建议客户在清除处理之前,进行现场的备份。

然后,执行清理操作:

 alter table SYS.OPATCH_XINV_TAB move LOB(XML_INVENTORY) store as (tablespace SYSAUX);

这样清除之后,坏块就会变成不属于任何对象,知道被作为空闲块再次使用时,被再次格式化。

但是,在这个坏块被格式化之前,如果执行了rman 的坏块检查,或者dbv ,是会发现这个块并报错的。
如果对这个错不爽,可以尝试手工格式化。

具体做法需要参考文档:

  How to Format Corrupted Block Not Part of Any Segment (Doc ID 336133.1)

以上是关于[Oracle]ORA-600[kdBlkCheckError]LOB坏块处理的主要内容,如果未能解决你的问题,请参考以下文章

导入数据的时候,遇到oracle错误600,ora-00600,内部错误代码,参数[kcbnew-3],[4],[

oracle 断电后ORA-600处理

记一次ORA-600[13011]

Oracle 启动后一会儿就挂掉故障处理—ORA-600 17182----惜分飞

Oracle数据库问题已解决:Bug 20250147 - ORA-600 [kjxmgmb_nreq:!bat]

Oracle数据库问题已解决:Bug 20250147 - ORA-600 [kjxmgmb_nreq:!bat]