因 Druid 配置导致 YashanDB 报 YAS-04003 打开游标数过多的问题分析
问题场景
某企业在运行 Java 应用时出现如下数据库错误提示:
复制代码
导致业务无法正常运作。

适用范围
所有版本的 YashanDB 都可能受到此类问题影响。
根本原因
该问题源于 Druid 数据库连接池对 PreparedStatement 的缓存机制。具体配置如下:
复制代码
这些设置会使得 JDBC 层的 PreparedStatement 被持续缓存,而 YashanDB 会将每一个未释放的 Statement 视为一个活动游标。一旦累计打开游标数量超过数据库默认配置的 OPEN_CURSORS 上限,就会抛出上述异常。
解决方案
有两种思路可选:
① 调整数据库参数:增大 OPEN_CURSORS 的取值上限。
② 优化 Druid 配置:
复制代码
排查手段
可以通过以下语句查看当前打开的游标内容:
复制代码
结合 v$session 来判断是哪些业务会话未释放资源。
经验建议
当使用 Java 框架并搭配数据库中间件时,需要注意连接池与数据库行为之间的配合策略。合理调整缓存策略是避免资源泄露、提高系统稳定性的关键。
评论