You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebSphere调用Oracle PL/SQL存储过程偶发连接关闭问题求助

偶发WebSphere调用Oracle存储过程连接关闭问题解决方案

故障背景

本次故障涉及的环境与现象如下:

  • 应用栈:Java应用部署于IBM WebSphere,对接Oracle 11.2.0.4数据库
  • 故障现象:调用PL/SQL存储过程偶发DSRA9110E: Connection is closed报错,触发时间无固定规律,最短在调用后数分钟出现,最长可达2小时后触发
  • 基准表现:存储过程正常执行耗时小于10秒,故障时大概率存在资源等待导致执行时长异常拉长
  • 已排除项:Oracle官方Doc ID 2359390.1描述的JDBC 12.1.0.2版本Bug,该Bug触发时作业重跑必然失败,与本次偶发特征不符

完整报错日志

com.ibm.websphere.ce.cm.ObjectClosedException: DSRA9110E: Connection is closed.
           at com.ibm.ws.rsadapter.jdbc.WSJdbcWrapper.createClosedException(WSJdbcWrapper.java:122)
           at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.activate(WSJdbcConnection.java:2936)
           at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.setAutoCommit(WSJdbcConnection.java:3512)

核心诱因与修复方案

1. WebSphere数据源连接池回收机制触发

WebSphere数据源会主动回收长时间未返回池的连接,若故障时存储过程执行时长超过连接超时阈值,连接会被池化层主动关闭。
修复步骤:

  • 检查数据源三个核心超时配置:连接超时、不使用超时、废弃超时,确认阈值是否小于故障场景下存储过程实际执行时长
  • 临时调大对应阈值,同时开启数据源连接池跟踪日志,确认连接回收的触发时机与触发逻辑

2. 网络层闲置连接被主动断开

防火墙、负载均衡等中间网络设备通常会对长时间无流量的TCP会话做主动清理,Oracle默认TCP保活间隔过长时,会被网络设备误认为闲置连接断开。
修复步骤:

  • 排查应用服务器到数据库之间所有网络设备的会话超时配置,确保阈值大于业务允许的最长执行时间
  • 调整应用服务器与数据库服务器的TCP keepalive参数,保活报文发送间隔设置为网络设备超时时间的3/4,避免连接被误杀
  • 在JDBC连接串中添加oracle.net.keepAlive=true参数,启用JDBC层的连接保活能力

3. 数据库侧会话被主动终止

数据库用户profile的闲置/连接时长限制、DBA手动Kill会话、实例级僵死会话回收逻辑都可能导致会话被主动关闭。
修复步骤:

  • 检查应用用户对应的profile配置,确认idle_time、connect_time参数是否设置过短
  • 开启数据库会话审计,故障后查询v$session、dba_audit_trail视图,定位会话终止的触发方与原因

4. 存储过程偶发资源等待/死锁

存储过程依赖的对象被其他大事务锁定、IO资源不足、归档日志写满等场景都会导致存储过程hang住,执行时长超过各层超时阈值最终连接被断开。
修复步骤:

  • 故障发生时立即抓取AWR、ASH报告,定位当时的Top等待事件,确认是否存在锁等待、IO瓶颈等问题
  • 给存储过程添加分步执行日志,定位卡住的具体逻辑节点,针对性优化SQL逻辑

内容的提问来源于stack exchange,提问作者STALOK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:36:03