共计 1425 个字符,预计需要花费 4 分钟才能阅读完成。
故障描述:应用程序执行某个 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 分钟自动退出。果然查看日志,很多告警信息。剩下的就是应用那边完善应用代码中检测机制的问题了。
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-08/134487.htm