两年没有接触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)
问题解决。