在ITPUB上看到的一个UPDATE RETURN引发的ORA-600错误。
告警日志中错误如下:
Mon Jan 16 09:50:13 2012 Errors IN file /DATA/dir1/app/oracle/admin/moyzkf1/udump/moyzkf1_ora_27801.trc: ORA-00600: internal error code, arguments: [13030], [1], [], [], [], [], [], [] |
从对应的TRACE中可以看出,执行的是一个UPDATE RETURN语句:
*** 2012-01-16 09:50:13.236 *** SERVICE NAME:(moyzkf1) 2012-01-16 09:50:13.179 *** SESSION ID:(1981.62963) 2012-01-16 09:50:13.179 updrow: CR error TABLE 0 - rowid: 0001b9c9.0360371b.2 code 1 *** 2012-01-16 09:50:13.236 ksedmp: internal OR fatal error ORA-00600: internal error code, arguments: [13030], [1], [], [], [], [], [], [] CURRENT SQL statement FOR this SESSION: UPDATE T_Y_CN20111002_PRIZE SET REMAIN = REMAIN - 1 WHERE ID = (SELECT ID FROM (SELECT ID FROM T_Y_CN20111002_PRIZE WHERE GRADE = :B3 AND REMAIN > 0 AND :B2 BETWEEN BEGINDATE AND ENDDATE AND INSTR(NVL(COVEREDPROVINCES, ',' || :B1 || ','), ',' || :B1 || ',') > 0 ORDER BY DBMS_RANDOM.VALUE(1, 100000)) WHERE ROWNUM < 2) AND REMAIN > 0 AND CAST(DBMS_RANDOM.VALUE(1, PROBABILITY) AS INTEGER) = CAST(DBMS_RANDOM.VALUE(1, PROBABILITY) AS INTEGER) RETURN ID, TITLE, PRESENTFIGURES INTO :O0 ,:O1 ,:O2 ----- PL/SQL Call Stack ----- object line object handle NUMBER name 0x24fdcddf8 1007 package body P_YZKF.PKG_Y_CN20111002 0x29bb96108 1 anonymous block ----- Call Stack Trace ----- calling CALL entry argument VALUES IN hex location TYPE point (? means dubious VALUE) -------------------- -------- -------------------- ---------------------------- ksedst()+31 CALL ksedst1() 000000000 ? 000000001 ? 7FFFCCDF1840 ? 7FFFCCDF18A0 ? 7FFFCCDF17E0 ? 000000000 ? ksedmp()+610 CALL ksedst() 000000000 ? 000000001 ? 7FFFCCDF1840 ? 7FFFCCDF18A0 ? 7FFFCCDF17E0 ? 000000000 ? ksfdmp()+21 CALL ksedmp() 000000003 ? 000000001 ? 7FFFCCDF1840 ? 7FFFCCDF18A0 ? 7FFFCCDF17E0 ? 000000000 ? kgeriv()+176 CALL ksfdmp() 000000003 ? 000000001 ? 7FFFCCDF1840 ? 7FFFCCDF18A0 ? 7FFFCCDF17E0 ? 000000000 ? kgesiv()+119 CALL kgeriv() 006728580 ? 01D3DFEA0 ? 000000000 ? 000000000 ? 7FFFCCDF17E0 ? 000000000 ? ksesic1()+215 CALL kgesiv() 006728580 ? 01D3DFEA0 ? 0000032E6 ? 000000001 ? 7FFFCCDF25C0 ? 000000000 ? updrow()+4930 CALL ksesic1() 0000032E6 ? 000000000 ? 000000001 ? 000000000 ? 000000000 ? 000000001 ? qerupRowProcedure() CALL updrow() 25EC23040 ? 000007FFF ? +80 2B16DFD2A018 ? 000000000 ? 000000000 ? 000000001 ? qerupFetch()+667 CALL qerupRowProcedure() 25EC23040 ? 000007FFF ? 2B16DFD2A018 ? 000000000 ? 000000000 ? 000000001 ? updaul()+1065 CALL qerupFetch() 000000001 ? 000000000 ? 25EC1AC58 ? 000007FFF ? 000000000 ? 25EC1AF18 ? updThreePhaseExe()+ CALL updaul() 25EC23040 ? 7FFFCCDF3850 ? 3016 000000000 ? 2B16DFA5AC78 ? 000000000 ? 25EC1AF18 ? |
查询MOS确认感觉和ORA-600 [13030] On Update Statement [ID 744937.1]描述的Bug 7411865 – OERI:13030 / ORA-1407 / block corruption from UPDATE .. RETURNING DML with trigger非常接近,只有一点感觉有所出入,就是当前的版本是10203,而Bug 7411865是10204补丁集解决bug 5115882时,引入的新的错误。因此,如果当前的10203没有专门取应用patch 5115882,那么应不会碰到这个错误。
因此根据这个推断,Bug 4549673 ORA-30926 / OERI:13030 during update描述的就更为接近一些。
判断到底是哪个问题其实并不复杂,只需要将数据库升级到10.2.0.4既可。在10204中Bug 4549673被fixed,而7411865则仍然存在。
如果将版本升级到10.2.0.4.2或10.2.0.5则这两个bug都会被fixed。