ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 使用DBLink出现ora-03113处理过程

使用DBLink出现ora-03113处理过程

原创 Linux操作系统 作者:mahanso 时间:2012-08-16 20:00:39 0 删除 编辑
今天碰到一个数据oracle9i,dblink到另一个数据库,dblink单表查询时候没有问题SELECT * FROM XX.RES_EQUIP_HIS@AAA,但是执行联合查询时候
SELECT * FROM XX.RES_EQUIP_HIS@AAA A,
         XX.CM_USER_EQPT            B
   WHERE  A.SALE_DATE BETWEEN
         to_date(to_number(to_char(sysdate, 'yyyymmdd')) - 1 || '000000','yyyymmddhh24miss') AND
         to_date(to_number(to_char(sysdate, 'yyyymmdd')) - 1 || '235959','yyyymmddhh24miss')AND 
         A.PHONE_SEQUENCE = B.EQPT_SN;
         
返回错误:ORA-03113: 通信通道的文件结束。

当我遇到这个问题,感觉像网络问题,我首先查看了2表的描述和2张表上的索引,A.PHONE_SEQUENCE和B.EQPT_SN都有索引,A.SALE_DATE也有索引。

有时dblink查询的时候报ORA-03113,不能查看执行计划,我做了2个测试。

一、单独执行:

SELECT * FROM XX.RES_EQUIP_HIS@AAA A
   WHERE  A.SALE_DATE BETWEEN
         to_date(to_number(to_char(sysdate, 'yyyymmdd')) - 1 || '000000','yyyymmddhh24miss') AND
         to_date(to_number(to_char(sysdate, 'yyyymmdd')) - 1 || '235959','yyyymmddhh24miss');
可以执行成功。

二、单独执行:
SELECT * FROM XX.RES_EQUIP_HIS@AAA A,
         XX.CM_USER_EQPT            B
   WHERE A.PHONE_SEQUENCE = B.EQPT_SN;

可以执行成功

我判断应该是to_date(to_number(to_char(sysdate, 'yyyymmdd')) - 1 || '000000','yyyymmddhh24miss')没有走索引导致。

我又测试了下面sql:
   SELECT count(*) FROM XX.RES_EQUIP_HIS@AAA A,
         XX.CM_USER_EQPT            B
   WHERE  A.PHONE_SEQUENCE = B.EQPT_SN 
   and A.SALE_DATE >= to_date('20120815000000','yyyymmddhh24miss') 
   AND A.SALE_DATE < to_date('20120815235959','yyyymmddhh24miss');
   
运行成功。

所以判断,问题出在由于之前A.SALE_DATE没有做索引,查询的数据量太大了,有可能导致网络诸塞,引起 03113

总结:出现ora-03113解决方法:
1、减少查询数据的量或者正确使用索引
2、升级数据库版本

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

下一篇: sar命令详解(转)
请登录后发表评论 登录
全部评论

注册时间:2010-10-18

  • 博文量
    160
  • 访问量
    640852