ORA-00600 [25027]问题处理

报错内容为ORA-00600: 内部错误代码, 参数: [25027], [25], [0], [], [], [], [], [], [], [], [], []

查看trace文件中的内容也很简单,如下:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
ORACLE_HOME = /u01/app/oracle/product/11.2.0.3
System name:    Linux
Release:        2.6.18-348.3.1.el5
Version:        #1 SMP Mon Mar 11 19:39:25 EDT 2013
Machine:        x86_64
*** 2014-09-25 11:14:22.890
*** SESSION ID:(4.20757) 2014-09-25 11:14:22.890
*** CLIENT ID:() 2014-09-25 11:14:22.890
*** SERVICE NAME:(SYS$USERS) 2014-09-25 11:14:22.890
*** MODULE NAME:() 2014-09-25 11:14:22.890
*** ACTION NAME:() 2014-09-25 11:14:22.890
DDE: Problem Key ‘ORA 600 [25027]’ was flood controlled (0x4) (incident: 89280)
ORA-00600: 内部错误代码, 参数: [25027], [25], [0], [], [], [], [], [], [], [], [], []

问题分析:
    该问题是由于Oracle的一个bug导致(参考文档 ID 1608861.1)
    是由于含有LOB字段的表在插入数据时,一个块(Block)在ASSM metadata L1 bitmap block中被标示为格式化的,但是在LOG段中被标识为未格式化的。
    ora-600[25027][x][0] 中的x表示的是该LOB字段所在的表空间的ts#,即表空间号
    第三个参数[0]可能并不总是0 
可以使用DBMS_SPACE_ADMIN.ASSM_SEGMENT_VERIFY 存储过程,

使用verify_option=>DBMS_SPACE_ADMIN.SEGMENT_VERIFY_SPECIFIC and attrib=>DBMS_SPACE_ADMIN.BITMAPS_CHECK来验证。

解决方法:
1.将表export导出,drop表,再imp进去
2.对lob段做move到新的表空间
  Alter table move lob(&lob_column) store as (tablespace &tbsp);
3.patch 18024115 & alter system set “_fix_control”=’18024115:ON’;  //表内容过大时候只能进行打补丁

官网内容:
Symptoms
Insert into table with lob fails with ora-600[25027][x][0] where x is ts# for the tablespace that has the lob.

Tracefile shows the stack function similar to:

krtd2abh  kcbgcur  ktspgfblk3  ktsplbfmb  ktsplbrecl  ktspgsp_main  kdlgsp_init  kdl_write1  kdlf_write   koklicbf  koklcre

Cause
The cause of this error can be LOST IO which may cause other errors like ORA-600 [kdlpdba:kcbz_objdchk] during INSERT.

The problem described in bug 13869187 is because a Block is marked as Formatted in the ASSM metadata L1 bitmap block but the block is unformatted for the LOB segment. 

The 3rd argument may not be always 0 (zero) as the problem is that if the block is unformatted, Oracle still tries to locate a pdba assuming that the block is formatted and that pdba offset may be zero when the block is empty (affected block has never formatted:block flag contains 1 – KCBHFNEW and type is zero).  If the block is formatted for a former dropped object, then the argument can be different than  zero.

DBMS_SPACE_ADMIN.ASSM_SEGMENT_VERIFY with verify_option=>DBMS_SPACE_ADMIN.SEGMENT_VERIFY_SPECIFIC and
attrib=>DBMS_SPACE_ADMIN.BITMAPS_CHECK; however it may be canceled when visiting the first problematic block; thus may not identify all affected blocks.

Syntax example of executing the above procedure:

exec DBMS_SPACE_ADMIN.ASSM_SEGMENT_VERIFY(‘SYS’,’T_C2_LOB’,’LOB’,null,DBMS_SPACE_ADMIN.SEGMENT_VERIFY_SPECIFIC,DBMS_SPACE_ADMIN.BITMAPS_CHECK)

For more details reference Bug 18607613

Solution
The error is fixed by:

recreating the table using exp-drop-import.

OR

Move the lob in a new tablespace.

Alter table move lob(&lob_column) store as (tablespace &tbsp);

@OR

@If the table or the lob are too big taking too long to recreate PATCH 18024115 could be installed, if available, and enabled by

@alter system set “_fix_control”=’18024115:ON’;

@See Doc ID 18024115.8

成功后,遇到此错误,会自动进行修复。