早上客户报告过来一个数据库错误:ORA-00600: 内部错误代码, 参数[13013], [5001], [78532], [38364264], [136], [38363282], [17].....
引发错误的SQL语句:
MERGE INTO t_store_d sd
USING (SELECT SUM(n.wareqty) wareqty, n.wareid, n.srcstallno, n.batid
FROM t_md_tally_accept_d n
WHERE n.acceptno = '15100120510001'
GROUP BY n.wareid, n.srcstallno, n.batid) t
ON (sd.compid = 2 AND sd.busno = 2051 AND sd.wareid = t.wareid AND sd.batid = t.batid AND sd.stallno = t.srcstallno)
WHEN MATCHED THEN
UPDATE SET sd.pendingqty = nvl(sd.pendingqty, 0) - t.wareqty;
其中,在alert日志里已经记录了出错信息:
Thu Oct 08 08:48:28 2015
Errors in file c:\app\administrator\diag\rdbms\oradata\oradata\trace\oradata_ora_12172.trc (incident=181894):
ORA-00600: 内部错误代码, 参数: [13013], [5001], [78532], [38364264], [136], [38364282], [17], [], [], [], [], []
Incident details in: c:\app\administrator\diag\rdbms\oradata\oradata\incident\incdir_181894\oradata_ora_12172_i181894.trc
Thu Oct 08 08:48:37 2015
Trace dumping is performing id=[cdmp_20151008084837]
Thu Oct 08 08:51:57 2015
Errors in file c:\app\administrator\diag\rdbms\oradata\oradata\trace\oradata_ora_10172.trc (incident=182210):
ORA-00600: 内部错误代码, 参数: [13013], [5001], [78532], [38364264], [136], [38364282], [17], [], [], [], [], []
Incident details in: c:\app\administrator\diag\rdbms\oradata\oradata\incident\incdir_182210\oradata_ora_10172_i182210.trc
怀疑是Oracle的bug, 看看能不能绕过去先。把MERGE语句改写成循环更新:
FOR rec IN (SELECT SUM(n.wareqty) wareqty,
n.wareid,
n.srcstallno,
n.batid
FROM t_md_tally_accept_d n
WHERE n.acceptno = :new.acceptno
GROUP BY n.wareid, n.srcstallno, n.batid) LOOP
UPDATE t_store_d sd
SET sd.pendingqty = nvl(sd.pendingqty, 0) - rec.wareqty
WHERE sd.compid = :new.compid
AND sd.busno = :new.objbusno
AND sd.wareid = rec.wareid
AND sd.stallno = rec.srcstallno
AND sd.batid = rec.batid;
END LOOP;
前端再尝试操作之后, 已经不出现此错误。
在飞总的群里提问, 飞总给出如下链接:
http://www.xifenfei.com/2012/03/%E8%AE%B0%E5%BD%95%E4%B8%80%E6%AC%A1ora-60013013%E5%A4%84%E7%90%86%E8%BF%87%E7%A8%8B.html
以下是查询导致出错的数据段信息。
select dbms_utility.data_block_address_file(38364264),
dbms_utility.data_block_address_block(38364264), dbms_utility.data_block_address_file(38364282),
dbms_utility.data_block_address_block(38364282) from dual;
利用这个SQL获得的数据文件编号, RDBA编号得到对应的数据段:
SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME, A.PARTITION_NAME, a.*
FROM DBA_EXTENTS A
WHERE FILE_ID = 9
AND 615546 BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1;
但是尝试验证表的逻辑结构没有出错: analyze table h2.t_store_d validate structure cascade
惜纷飞另外一次ORA-00600 13013错误解决:
http://www.xifenfei.com/2012/06/%E8%AE%B0%E5%BD%95%E5%8F%A6%E4%B8%80%E8%B5%B7ora-0060013013%E5%A4%84%E7%90%86.html
刘大的一次ORA-00600 13013
http://www.askmaclean.com/archives/oracle%E5%86%85%E9%83%A8%E9%94%99%E8%AF%AFora-00600130135001%E6%95%85%E9%9A%9C%E8%AF%8A%E6%96%AD%E4%B8%80%E4%BE%8B.html
问题至此告一段落
引发错误的SQL语句:
MERGE INTO t_store_d sd
USING (SELECT SUM(n.wareqty) wareqty, n.wareid, n.srcstallno, n.batid
FROM t_md_tally_accept_d n
WHERE n.acceptno = '15100120510001'
GROUP BY n.wareid, n.srcstallno, n.batid) t
ON (sd.compid = 2 AND sd.busno = 2051 AND sd.wareid = t.wareid AND sd.batid = t.batid AND sd.stallno = t.srcstallno)
WHEN MATCHED THEN
UPDATE SET sd.pendingqty = nvl(sd.pendingqty, 0) - t.wareqty;
其中,在alert日志里已经记录了出错信息:
Thu Oct 08 08:48:28 2015
Errors in file c:\app\administrator\diag\rdbms\oradata\oradata\trace\oradata_ora_12172.trc (incident=181894):
ORA-00600: 内部错误代码, 参数: [13013], [5001], [78532], [38364264], [136], [38364282], [17], [], [], [], [], []
Incident details in: c:\app\administrator\diag\rdbms\oradata\oradata\incident\incdir_181894\oradata_ora_12172_i181894.trc
Thu Oct 08 08:48:37 2015
Trace dumping is performing id=[cdmp_20151008084837]
Thu Oct 08 08:51:57 2015
Errors in file c:\app\administrator\diag\rdbms\oradata\oradata\trace\oradata_ora_10172.trc (incident=182210):
ORA-00600: 内部错误代码, 参数: [13013], [5001], [78532], [38364264], [136], [38364282], [17], [], [], [], [], []
Incident details in: c:\app\administrator\diag\rdbms\oradata\oradata\incident\incdir_182210\oradata_ora_10172_i182210.trc
怀疑是Oracle的bug, 看看能不能绕过去先。把MERGE语句改写成循环更新:
FOR rec IN (SELECT SUM(n.wareqty) wareqty,
n.wareid,
n.srcstallno,
n.batid
FROM t_md_tally_accept_d n
WHERE n.acceptno = :new.acceptno
GROUP BY n.wareid, n.srcstallno, n.batid) LOOP
UPDATE t_store_d sd
SET sd.pendingqty = nvl(sd.pendingqty, 0) - rec.wareqty
WHERE sd.compid = :new.compid
AND sd.busno = :new.objbusno
AND sd.wareid = rec.wareid
AND sd.stallno = rec.srcstallno
AND sd.batid = rec.batid;
END LOOP;
前端再尝试操作之后, 已经不出现此错误。
在飞总的群里提问, 飞总给出如下链接:
http://www.xifenfei.com/2012/03/%E8%AE%B0%E5%BD%95%E4%B8%80%E6%AC%A1ora-60013013%E5%A4%84%E7%90%86%E8%BF%87%E7%A8%8B.html
以下是查询导致出错的数据段信息。
select dbms_utility.data_block_address_file(38364264),
dbms_utility.data_block_address_block(38364264), dbms_utility.data_block_address_file(38364282),
dbms_utility.data_block_address_block(38364282) from dual;
利用这个SQL获得的数据文件编号, RDBA编号得到对应的数据段:
SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME, A.PARTITION_NAME, a.*
FROM DBA_EXTENTS A
WHERE FILE_ID = 9
AND 615546 BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1;
但是尝试验证表的逻辑结构没有出错: analyze table h2.t_store_d validate structure cascade
惜纷飞另外一次ORA-00600 13013错误解决:
http://www.xifenfei.com/2012/06/%E8%AE%B0%E5%BD%95%E5%8F%A6%E4%B8%80%E8%B5%B7ora-0060013013%E5%A4%84%E7%90%86.html
刘大的一次ORA-00600 13013
http://www.askmaclean.com/archives/oracle%E5%86%85%E9%83%A8%E9%94%99%E8%AF%AFora-00600130135001%E6%95%85%E9%9A%9C%E8%AF%8A%E6%96%AD%E4%B8%80%E4%BE%8B.html
问题至此告一段落
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8520577/viewspace-1813465/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8520577/viewspace-1813465/