ORA-00600: internal error code, arguments: [13030], [20]一例解决

两年没有接触oracle了,中午,一环境update from的时候出现ORA-00600: internal error code, arguments: [13030], [20]异常,经查,官网所述为涉及到了v$表所致,典型举例比较多的是v$session,但我们不涉及任何v$表的查询。原sql类似如下:

UPDATE (
    SELECT
        a.f_assign aassign,
        b.f_offsetincome bf_offsetincome
    FROM
        XXX a,
        YYY b,
        ZZZ c
    WHERE a.c_fundcode = b.c_fundcode
  ...........................
AND a.c_tacode = b.c_tacodeAND a.d_cdate = c.d_sysdate AND a.c_tacode = c.c_tacode ) SET aassign = bassign, af_offsetincome = bf_offsetincome

alert.log如下:

Errors in file /home/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_26226.trc (incident=1767236):
ORA-00600: �ڲ��������, ����: [13030], [20], [], [], [], [], [], [], [], [], [], []
Errors in file /home/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_26226.trc (incident=1767237):
ORA-00600: �ڲ��������, ����: [13030], [20], [], [], [], [], [], [], [], [], [], []
trc如下:
*** 2018-06-25 11:06:35.426
*** SESSION ID:(7639.3314) 2018-06-25 11:06:35.426
*** CLIENT ID:() 2018-06-25 11:06:35.426
*** SERVICE NAME:(ora11g) 2018-06-25 11:06:35.426
*** MODULE NAME:(hsserver@localhost.localdomain (TNS V1-V3)) 2018-06-25 11:06:35.426
*** ACTION NAME:() 2018-06-25 11:06:35.426
 
updrow: CR error table 0 - rowid: 00094651.01800487.22 code 20
updRT frame @0xcb286058
kccArr_qedmDml 0xcb285f10
nKccs_qedmDml 38
kaf_qedmDml 0xcee756f8
nKaf_qedmDml 16
kct_qedmDml 0xc5b016b0
rowid_qedmDml 0xd0bb50c8
kau_qedmDml (nil)
delayedKau_qedmDml (nil)
return_qedmDml (nil)
trigger_qedmDml (nil)
olc_qedmDml (nil)
ntbCtx_qedmDml (nil)
insTrig_qedmDml (nil)
hier_qedmDml (nil)
dynCon_qedmDml (nil)
check_qedmDml (nil)
rlsCheck_qedmDml (nil)
fga_qedmDml (nil)
cses_qedmDml (nil)
elrtx_qedmDml (nil)
pmap_qedmDml (nil)
lbnr (nil)
upes_qedmUpd 0xcb285ec8
nCols_qedmUpd 9
kdu_qedmUpd 0xc8efea10
kauxu_qedmUpd (nil)
rhsCols_qedmUpd (nil)
nRhsCols_qedmUpd 0RHS Columns:
hiLogCol_qedmUpd 1
hiCmpCol_qedmUpd 37
hiCpyCol_qedmUpd 37
hiUpdCol_qedmUpd 37
kaf_qedmUpd (nil)
nKaf_qedmUpd 0
iotKeys_qedmUpd (nil)
ntabOpn_qedmUpd (nil)
rhc_qedmUpd (nil)
cpykafidx_qedmUpd 0xc8efe5a0
cpykafidxcc_qedmUpd 0
cpykccidx_qedmUpd 0xc8efe5c0
cpykccidxcc_qedmUpd 0
flags_qedmUpd 0x80800
rpkKauxu_qedmUpd (nil)
Incident 1689338 created, dump file: /home/oracle/diag/rdbms/ora11g/ora11g/incident/incdir_1689338/ora11g_ora_26226_i1689338.trc
ORA-00600: �ڲ��������, ����: [13030], [20], [], [], [], [], [], [], [], [], [], []
ora11g_ora_26226_i1689338.trc如下:
Dump continued from file: /home/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_26226.trc
ORA-00600: �ڲ��������, ����: [13030], [20], [], [], [], [], [], [], [], [], [], []

========= Dump for incident 1689338 (ORA 600 [13030]) ========

*** 2018-06-25 11:06:35.699
dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0)
----- Current SQL Statement for this session (sql_id=5b2qrzuc0ym55) -----
 update (select a.f_assign aassign,                 a.f_unassign aunassign,                 a.f_encashratio aencashratio,                 a.f_changeratio achangeratio,                 a.c_vastflag avastflag,                 a.f_subscriberatio asubscriberatio,                 a.c_excessflag aexcessflag,                 a.f_structuredratio astructuredratio,                 a.f_offsetincome af_offsetincome,                  b.f_assign bassign,                 b.f_unassign bunassign,                 b.f_encashratio bencashratio,                 b.f_changeratio bchangeratio,                 b.c_vastflag bvastflag,                 b.f_subscriberatio bsubscriberatio,                 b.c_excessflag bexcessflag,                 b.f_structuredratio bstructuredratio,                 b.f_offsetincome bf_offsetincome            from ta_tnetvalueday a, ta_tnetvaluedaytmp b, ta_ttainfo c           where ( a.c_tacode='F6' )             and a.c_tenantid = '*'             and a.d_cdate = b.d_cdate             and a.d_netvaluedate = b.d_netvaluedate             and a.c_fundcode = b.c_fundcode             and a.c_tacode = b.c_tacode             and a.c_tenantid = b.c_tenantid             and a.d_cdate = c.d_sysdate             and a.c_tacode = c.c_tacode             and a.c_tenantid = c.c_tenantid)     set aassign = bassign,         aunassign = bunassign,         aencashratio = bencashratio,         achangeratio = bchangeratio,         avastflag = bvastflag,         asubscriberatio = bsubscriberatio,         aexcessflag = bexcessflag,         astructuredratio = bstructuredratio,         af_offsetincome =  bf_offsetincome 

----- Call Stack Trace -----
calling              call     entry                argument values in hex      
location             type     point                (? means dubious value)     
-------------------- -------- -------------------- ----------------------------

经查:

https://grepora.com/tag/ora-600/

http://yangtingkun.net/?p=492

https://grepora.com/2017/04/12/ora-00600-internal-error-code-arguments-13030-20/

http://db.geeksinsight.com/2013/03/12/ora-00600-internal-error-code-arguments-13030-20/

均不是上述问题所致,但通过类似信息可知,应该是部分数据不一致的问题所致,故改写sql如下:

UPDATE XXX a 
SET (
  f_assign,
  f_offsetincome
) = (
  SELECT
    b.f_assign,
    b.f_unassign,
    b.f_structuredratio,
    b.f_offsetincome
  FROM
    YYY b,ZZZ c
  WHERE
    a.d_cdate = b.d_cdate
  AND a.d_netvaluedate = b.d_netvaluedate
    AND a.c_tenantid = c.c_tenantid
)
WHERE exists (select 1
  FROM
    YYY b,ZZZ c
  WHERE
    a.d_cdate = b.d_cdate
  AND a.d_netvaluedate = b.d_netvaluedate
    AND a.c_tacode = c.c_tacode
    AND a.c_tenantid = c.c_tenantid)

问题解决。