ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 分配LOB空间失败导致ORA-600(kddummy_blkchk)错误

分配LOB空间失败导致ORA-600(kddummy_blkchk)错误

原创 Linux操作系统 作者:yangtingkun 时间:2012-03-13 23:52:07 0 删除 编辑

测试环境发现一个ORA-600错误,简单重现了一下。

 

 

错误信息如下:

Fri Mar 2 23:28:49 2012
Corrupt Block Found
TSN = 4, TSNAME = USERS
RFN = 4, BLK = 395, RDBA = 16777611
BJN = 0, BJD = 53647, BJECT = /6ee738c_AccessorUtilities, SUBOBJECT =
SEGMENT WNER = PUBLIC, SEGMENT TYPE = Invalid Type
Fri Mar 2 23:32:48 2012
Errors in file /home/xxx/db/admin/ora1020410/udump/ora1020410_ora_13198.trc:
ORA-00600: internal error code, arguments: [kddummy_blkchk], [4], [419], [18038], [], [], [], []

对应的TRACE文件信息为:

*** 2012-03-02 23:28:48.194
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [kddummy_blkchk], [4], [395], [18038], [], [], [], []
Current SQL statement for this session:
ALTER TABLE fnd_lobs MODIFY LOB (file_data) (allocate extent (size 4000m))
----- Call Stack Trace -----
calling              call     entry                argument values in hex     
location             type     point                (? means dubious value)    
-------------------- -------- -------------------- ----------------------------
ksedst()+31          call     ksedst1()            000000000 ? 000000001 ?
                                                   7FFF0F118E10 ? 7FFF0F118E70 ?
                                                   7FFF0F118DB0 ? 000000000 ?
ksedmp()+610         call     ksedst()             000000000 ? 000000001 ?
                                                   7FFF0F118E10 ? 7FFF0F118E70 ?
                                                   7FFF0F118DB0 ? 000000000 ?
ksfdmp()+21          call     ksedmp()             000000003 ? 000000001 ?
                                                   7FFF0F118E10 ? 7FFF0F118E70 ?
                                                   7FFF0F118DB0 ? 000000000 ?
kgerinv()+161        call     ksfdmp()             000000003 ? 000000001 ?
                                                   7FFF0F118E10 ? 7FFF0F118E70 ?
                                                   7FFF0F118DB0 ? 000000000 ?
kseinpre()+56        call     kgerinv()            0068CAD20 ? 007247B10 ?
                                                   7FFF0F118E70 ? 7FFF0F118DB0 ?
                                                   000000000 ? 000000000 ?
ksesin()+177         call     kseinpre()           7FFF0F118E70 ? 7FFF0F118DB0 ?
                                                   7FFF0F119B70 ? 7FFF0F118DB0 ?
                                                   000000000 ? 000000000 ?
kco_blkchk()+1451    call     ksesin()             0058F5B08 ? 000000003 ?
                                                   000000000 ? 000000004 ?
                                                   000000000 ? 00000018B ?
kcoapl()+1411        call     kco_blkchk()         7FFF0F11B600 ? 000000000 ?
                                                   7FFF0F11B668 ? 000002000 ?
                                                   000000000 ? 000000001 ?
kcbapl()+336         call     kcoapl()             7FFF0F11B600 ? 0A7C8A000 ?
                                                   000000001 ? 000000004 ?
                                                   000002000 ? 000000000 ?
kcrfw_redo_gen()+12  call     kcbapl()             7FFF0F11B600 ? 0A7FE0968 ?
402                                                7F924BFF6E14 ? 000000000 ?
                                                   000000000 ? 000000000 ?
kcbchg1_main()+5258  call     kcrfw_redo_gen()     000000002 ? 7FFF0F11A4C8 ?
                                                   7FFF0F11A650 ? 7F924BFF6E14 ?
                                                   000000000 ? 000000001 ?
kcbchg1()+125        call     kcbchg1_main()       000000000 ? 000000002 ?
                                                   7FFF0F11AD08 ? 7FFF0F11AD38 ?
                                                   000000000 ? 000000000 ?
ktuchg()+1533        call     kcbchg1()            000000000 ? 000000002 ?

查询了一下MOS,可以看到和文档Bug 8198906 - OERI [kddummy_blkchk] / OERI [5467] for an aborted transaction of allocating extents [ID 8198906.8]描述的内容最为接近,在分配EXTENTS的过程中被中止,会导致这个错误的产生,而确认影响的版本就是当前的版本。

为了验证确实属于这个问题,下面尝试重现问题:

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production

SQL> CREATE TABLE T_LOB (ID NUMBER, CONTENTS CLOB);

Table created.

SQL> ALTER TABLE T_LOB MODIFY LOB (CONTENTS) (ALLOCATE EXTENT (SIZE 1M));

Table altered.

SQL> SELECT TABLESPACE_NAME FROM USER_TABLES WHERE TABLE_NAME = 'T_LOB';

TABLESPACE_NAME
------------------------------
USERS

SQL> SELECT SUM(BYTES)/1024/1024 FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME = 'USERS';

SUM(BYTES)/1024/1024
--------------------
            6616.375

SQL> CONN TEST/TEST
Connected.
SQL> ALTER TABLE T_LOB MODIFY LOB (CONTENTS) (ALLOCATE EXTENT (SIZE 4096M));

Table altered.

SQL> ALTER TABLE T_LOB MODIFY LOB (CONTENTS) (ALLOCATE EXTENT (SIZE 8192M));
ALTER TABLE T_LOB MODIFY LOB (CONTENTS) (ALLOCATE EXTENT (SIZE 8192M))
*
ERROR at line 1:
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [kddummy_blkchk], [4], [273907],
[18038], [], [], [], []

可以看到如果分配EXTENT的大小不超过表空间的大小,那么操作可以成功,而如果分配EXTENT的大小超过了表空间的大小,则Oracle分配操作失败,这就引发了bug的产生,并导致了ORA-600[kddummy_blkchk]

Oracle10.2.0.511.2.0.1fixed了这个bug,而这个bug影响的版本比较广,10.2.0.410.2.0.39.2.0.89.2.0.6这几个常用版本均在确认影响的版本内。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-718695/,如需转载,请注明出处,否则将追究法律责任。

下一篇: ORA-600(kzdugt)错误
请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10355694