ITPub博客

首页 > 数据库 > Oracle > 记录一次ORA-00600:13013错误的处理

记录一次ORA-00600:13013错误的处理

原创 Oracle 作者:abstractcyj 时间:2015-10-08 11:12:07 0 删除 编辑
早上客户报告过来一个数据库错误: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

问题至此告一段落

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8520577/viewspace-1813465/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
曾从事java方向开发多年。近年已经转入数据库方向。主要擅长SQL优化,Oracle数据库问题诊断,Oracle备份与恢复等。服务于医药物流,医院等行业

注册时间:2010-01-26

  • 博文量
    602
  • 访问量
    1091629