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

早上客户报告过来一个数据库错误: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博客 ” ,链接:http://blog.itpub.net/8520577/viewspace-1813465/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8520577/viewspace-1813465/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值