ORA-600(ktspfupdst-1)错误

客户9208数据库出现ORA-600[ktspfupdst-1]错误。
错误信息为:

Sat Mar 31 02:50:48 2012
Errors IN file /oracle/app/admin/orcl/udump/orcl1_ora_1896900.trc:
ORA-00600: internal error code, arguments: [ktspfupdst-1], [], [], [], [], [], [], []
ORA-00604: error occurred at recursive SQL level 1
ORA-01013: USER requested cancel OF CURRENT operation

其实从错误信息本身就可以初步判断,问题应该和用户取消当前的操作有关。问题多半是由于用户取消当前操作后,Oracle在进行恢复处理时,引发了异常。
详细TRACE信息为:

*** 2012-03-31 02:50:48.509
ksedmp: internal OR fatal error
ORA-00600: internal error code, arguments: [ktspfupdst-1], [], [], [], [], [], [], []
ORA-00604: error occurred at recursive SQL level 1
ORA-01013: USER requested cancel OF CURRENT operation
CURRENT SQL statement FOR this SESSION:
INSERT INTO TAB001_3
(
  COL_CODE      ,
  A_CODE          ,
  C_CODE        ,
  S_ID            ,
  SER_NUM        ,
  S_TYPE          ,
  C_ID            ,
  A_ID            ,
  N_TYPE           ,
  B_ID           ,
  P_ID            , 
  P_ID_N       ,
  S_STAT        ,
  U_TIME        ,
  P_MODE           ,
  S_KIND          ,
  V_TYPE         ,
  O_MODE          ,
  A_TIME       ,
  C_TIME      ,
  AC_TIME        ,
  A_R_TIME   ,
  S_MODE          ,
  T_CODE      ,
  S_NUMBER         ,
  P_CODE       ,
  D_CODE      ,
  S_FLAG      ,
  S_TIME      ,
  DE_CODE     ,
  D_C_CODE  ,
  D_STAFF         ,
  CI_TYPE       ,
  O_TIME          ,
  SU_FLAG          ,
  SU_FLAG       ,
  D_A_CODE,
  CH_CODE          ,
  GR_ID           ,
  RE_CODE        )
SELECT '30',c.b_region,'',a.id_no,TRIM(a.p_no),'',a.c_id,a.c_no,'',a.s_code,'',
       '',decode(substr(a.r_code,2,1),'A','1','K','1','C','2','I','4','J','4','a','5','b','5','3'),
       to_char(a.r_time,'yyyymmddhh24miss'),decode(b.c_flag,'A','2','B','1'),
       '','01','1',to_char(a.o_time,'yyyymmddhh24miss'),to_char(a.o_time,'yyyymmddhh24miss'),'',to_char(a.o_time,'yyyymmddhh24miss'),
       'S','','','','','2','',
       '','','','',to_char(a.o_time,'yyyymmddhh24miss'),'U',decode(substr(a.r_code,2,1),'A','0','K','0','1'),
       c.b_region,'',a.g_id,c.r_code
  FROM tab2 a,tab3 b, tab4 c
 WHERE a.s_code = b.s_code
   AND substr(a.b_code,0,2) = b.r_code
   AND b.r_code = c.r_code
   AND MOD(a.id_no,10) = 3
----- Call Stack Trace -----
calling              CALL     entry                argument VALUES IN hex
location             TYPE     point                (? means dubious VALUE)
-------------------- -------- -------------------- ----------------------------
ksedmp+0148          bl       ksedst               1029746FC ?
ksfdmp+0018          bl       01FD4014
kgerinv+00e8         bl       _ptrgl
kgeasnmierr+004c     bl       kgerinv              000000001 ? 000000000 ?
                                                   000000005 ? 000000001 ?
                                                   000000001 ?
ktspfupdst+0540      bl       kgeasnmierr          110006308 ? 1103994E8 ?
                                                   102A9239C ? 000000000 ?
                                                   000000005 ? 000000010 ?
                                                   000000020 ? 000000006 ?
ktspstchg+00e4       bl       ktspfupdst           000000060 ? 300000004 ?
                                                   FFFFFFFFFFF6E48 ?
                                                   50601CE000000ED ?
                                                   3B401B34C5D02F2A ?
                                                   B92000004000020 ?
kdoiur+062c          bl       ktspstchg            000000000 ? 700000C39D779E8 ?
                                                   000000000 ?
kcoubk+00e4          bl       _ptrgl
ktundo+0988          bl       kcoubk               1010CCD80 ? FFFFFFFFFFF76C0 ?
                                                   100ED51C0 ? FFFFFFFFFFF7150 ?
                                                   1101FAF78 ? 1102567C0 ?
                                                   700000C396A1300 ? 000000002 ?
ktubko+03bc          bl       ktundo               1840DFB30 ?
                                                   3B401B3400000002 ?
                                                   000000000 ? 000000000 ?
                                                   FFFFFFFFFFF85D8 ?
                                                   700000C80A1E880 ? 2FFFF8540 ?
                                                   FFFFFFFFFFF8780 ?
ktuabt+0638          bl       ktubko               DF000000DF ?
                                                   FFFFFFFFFFF8690 ? 000000000 ?
                                                   FFFFFFFFFFF85D8 ? 102973880 ?
                                                   700000C844FA418 ?
ktcrab+02b4          bl       ktuabt               700000C80A1E840 ? 200017CD8 ?
ktcrsp+026c          bl       ktcrab               100F698E4 ? 000000001 ?
ksures+0074          bl       ktcrsp               700000C844FA448 ?
opiexe+3380          bl       01FD4138
opiall0+102c         bl       opiexe               400000000 ? 110002A48 ?
                                                   FFFFFFFFFFFA0A0 ?
kpoal8+0a78          bl       opiall0              5EFFFFBED4 ? 22103A43F8 ?
                                                   FFFFFFFFFFFA5B8 ? 000000000 ?
                                                   FFFFFFFFFFFA508 ? 1103A4B00 ?
                                                   6FF00000738 ?
                                                   24000000007FFF ?
opiodr+08cc          bl       _ptrgl
ttcpip+0cc4          bl       _ptrgl
opitsk+0d60          bl       ttcpip               11000CF90 ? 000000000 ?
                                                   000000000 ? 000000000 ?
                                                   000000000 ? 000000000 ?
                                                   000000000 ? 000000000 ?
opiino+0758          bl       opitsk               000000000 ? 000000000 ?
opiodr+08cc          bl       _ptrgl
opidrv+032c          bl       opiodr               3C00000018 ? 4101FAF78 ?
                                                   FFFFFFFFFFFF7B0 ? 0A000F350 ?
sou2o+0028           bl       opidrv               3C0C000000 ? 4A00E8B50 ?
                                                   FFFFFFFFFFFF7B0 ?
main+0138            bl       01FD3A28
__start+0098         bl       main                 000000000 ? 000000000 ?

可以看到,当前执行的是一条插入语句。查询MOS发现,问题和ORA-00600 [ktspfupdst-1] During DML on ASSM Segment [ID 388599.1]描述的完全一致。
首先当前插入的表所在表空间使用的是ASSM,其次这个插入操作被取消,而且所有堆栈信息与bug 3370468描述的完全一致。
虽然这个bug在9.2.0.5被fixed,但是不排除在9.2.0.8被重新引入的可能性。Oracle给出的解决方案除了升级到10.2以及10.1.0.3以上外,还可以尝试用dbms_repair.segment_fix_status过程来修正问题对象。
如果只是单次的问题,且无法重现,最简单的方法莫过于直接MOVE,确保ASSM空间管理的异常不会导致表中后续数据的插入和读取。

This entry was posted in BUG and tagged , , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *