用sql_trace解决ORA-03111: 通信通道收到中断错误

问题描述:收到开发报告错误,用java程序执行插入一个表造数据,结果报错:ora-03111: 通信通道收到中断错误。插入500条数据没有错误,插入1000条数据,报错。
 
问题分析:我以为是oracle实例有什么问题,查看alert.log日志,一切正常。我想用10046事件追踪,但是,启动程序到程序报错,连接就中断了。还没有开始追踪,连接就中断了,追踪不了。想了偏门方法,让其他会话都暂停使用数据库,开启全库sql_trace功能1分钟。alter system set sql_trace=true; alter system set sql_trace=false;

接着把跟踪文件拿到了,进行分析,找到oraclesid_s001_xxxxx.trc,我摘抄如下:

PARSING IN CURSOR #3 len=361510 dep=0 uid=106 oct=2 lid=106 tim=8153407429486 hv=1586716944 ad='44d3edb78' sqlid='b6j1f4jg96s8h'
INSERT INTO BUS_SOURCE_TRANSDATA

    ID,CREATETIME,SOURCE_FILENAME,
TRANS_TYPE,LOCAL_SEQ,POSID,
SAMID,SAM_SEQ,TERMID,DRIVER_NO,
CITYCODE,ISSUER_CODE,CARD_INNER_NO,
CARD_CSN,CARDDEBITCNT,CARD_MODELL,
CARDKIND,CHILDCARDKIND,BEFOR_BAL,
TRADE_AMT,PREFERENTIAL_TYPE,
RECEIVABLE_AMT,TRANS_DATE,
TRANS_TIME,TAC,CARD_INNER_VERNO,COMPANY_CODE)
 
select
:1 ,
:2 ,
:3 ,
:4 ,
:5 ,
:6 ,
:7 ,
:8 ,
:9 ,
:10 ,
:11 ,
:12 ,
:13 ,
:14  card_csn,
:15 ,
:16 ,
:17 ,
:18 ,
:19 ,
:20 ,
:21 ,
:22 ,
:23 ,
:24 ,
:25 ,
:26 ,
:27 
FROM dual

union all 
select
:28 ,
:29 ,
:30 ,
:31 ,
:32 ,
:33 ,
:34 ,
:35 ,
:36 ,
:37 ,
:38 ,
:39 ,
:40 ,
:41  card_csn,
:42 ,
:43 ,
:44 ,
:45 ,
:46 ,
:47 ,
:48 ,
:49 ,
:50 ,
:51 ,
:52 ,
:53 ,
:54 
FROM dual
..........中间有997个union all
END OF STMT
PARSE #3:c=5959238,e=5971060,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=8153407429485

然后就结束了。是的,连PARSE EXEC FETCH STAT CLOSE 状态都没有经历就结束了。
从这里看出来,应该是这个sql语句超过长度了,连接断开,报异常错误:ORA-03111: 通信通道收到中断错误

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

转载于:http://blog.itpub.net/30393770/viewspace-2138752/

你可能感兴趣的:(用sql_trace解决ORA-03111: 通信通道收到中断错误)