用sql_trace解決ORA-03111: 通訊通道收到中斷錯誤

e71hao發表於2017-05-09
問題描述:收到開發報告錯誤,用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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章