天天看點

ORA-03114烏龍處理

接到中心工單,派往客戶現場處理了一件特别烏龍的故障。

故障描述:應用程式執行某個select,update時應用程式的log報如下錯誤資訊,程式無法更新更新某個表:

[200065640] 01-24 18:01:01.233136 [     13490] [libUserFunDb30_0.ec][554] update t_clear_journal failed, CLEARTRSNO =[20130124107200065640] SQLCODE = [-3114] SQLTEXT=[ORA-03114: 未連接配接到 ORALCE] [libUserFunDb30_0.ec:554]

       alert裡面沒有 ora-03114錯誤資訊,應用程式所在的用戶端上執行sqlplus 登陸到資料庫,做一個操作select操作後,這個會話30分鐘不做任何操作。

       用戶端是Red Hat Enterprise Linux Server release 6.2 (Santiago),隻是安裝的10201_database_linux_x86_64.cpio 軟體(沒有裝庫)作為oracle client端使用。作業系統包依賴包:全部裝好

,oracle db是 10g rac 10.0.0.5 版本、作業系統 aix 5L3。

之前我記得接觸過PLSQL Developer中有一個參數tools中add debug information when compiling如果這個參數已經啟用,會引發ORA-03114的錯誤。詢問最近是否做過網絡改動,客戶回答沒有任何改動、而且其他一個域裡面的機器沒有任何問題。

我想還原一下環境,看看是否報錯。編寫了一個腳本:

export ORACLE_SID=gxb_pay

export ORACLE_BASE=/oracle

export ORACLE_HOME=/oracle/product/10.2.0

export PATH=$PATH:$ORACLE_HOME/bin

sqlplus "pay/xxx@gxb" << EOF

select  sysdate from dual;

exec dbms_lock.sleep(1800);

exec dbms_lock.sleep(3600);

EOF

然後檢視了監聽日志,tns配置,process,session數,使用者概要檔案中profile也沒有指定會話逾時時間,該看的都看了一遍。

果然如果停止半小時後,如果沒有新的交易,那麼會報ORA-03114錯誤。去應用處與應用人員核對,是半小時就會報錯,還是平時幾分鐘也有。應用人員沒有準确資訊回報,隻說一般半小時就會報錯。後詢問相關系統負責人,可能是系統負責人沒有接到任何的郵件通知,或者郵件裡面沒有标注會話等待30分鐘後,再進行連結就會報錯的字樣。他說可能是juniper防火牆政策問題,Cisco的防火牆2小時自己退出。juniper牆30分鐘自動退出。果然檢視日志,很多告警資訊。剩下的就是應用那邊完善應用代碼中檢測機制的問題了。果斷閃人~~~

本文轉自yangjunfeng 51CTO部落格,原文連結:http://blog.51cto.com/yangjunfeng/1126154