接到中心工单,派往客户现场处理了一件特别乌龙的故障。
故障描述:应用程序执行某个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);
select sysdate from dual;
exec dbms_lock.sleep(3600);
select sysdate from dual;
exec dbms_lock.sleep(3600);
EOF
然后查看了监听日志,tns配置,process,session数,用户概要文件中profile也没有指定会话超时时间,该看的都看了一遍。
果然如果停止半小时后,如果没有新的交易,那么会报ORA-03114错误。去应用处与应用人员核对,是半小时就会报错,还是平时几分钟也有。应用人员没有准确信息反馈,只说一般半小时就会报错。后询问相关系统负责人,可能是系统负责人没有接到任何的邮件通知,或者邮件里面没有标注会话等待30分钟后,再进行链接就会报错的字样。他说可能是juniper防火墙策略问题,Cisco的防火墙2小时自己退出。juniper墙30分钟自动退出。果然查看日志,很多告警信息。剩下的就是应用那边完善应用代码中检测机制的问题了。果断闪人~~~