DBCP在Oracle中不关闭游标

DBCP在Oracle中不关闭游标,oracle,spring-data,spring-jdbc,jdbctemplate,apache-commons-dbcp,Oracle,Spring Data,Spring Jdbc,Jdbctemplate,Apache Commons Dbcp,我们正在使用DBCP2创建连接池、JDK1.7、Oracle12c和ojdbc6.jar。 几天前,我们的应用程序中开始出现ORA-01000错误 我使用以下查询查找Oracle中当前打开的游标: select a.value, s.username, s.sid, s.serial# from v$sesstat a, v$statname b, v$session s where a.statistic# = b.statistic# and s.sid=a.sid and b.name

我们正在使用DBCP2创建连接池、JDK1.7、Oracle12c和ojdbc6.jar。 几天前,我们的应用程序中开始出现ORA-01000错误

我使用以下查询查找Oracle中当前打开的游标:

select a.value, s.username, s.sid, s.serial#
from v$sesstat a, v$statname b, v$session s
where a.statistic# = b.statistic#  and s.sid=a.sid
and b.name = 'opened cursors current';
为了执行同一个查询,我多次访问同一个页面。以下是意见: 1.当连接池maxTotal=-1(无限制)时,许多连接被打开,在“打开游标”(值)列中,某些连接的值为1或最大值2。 查询的示例输出为

value      sid
1          1
1          2
1          3
  • 当连接池maxTotal=10时,只有10个连接被打开(上述查询返回10条记录),并且打开的游标(值)列正在增加。 查询的示例输出为

    value      sid
    1          1
    1          2
    1          3
    
    值sid
    1          1
    2          2
    3          3
    1          4
    1          5
    36

  • 我使用的是SpringJDBCTemplate,它可以关闭所有结果集、准备好的语句和连接

    我的问题是:

  • 当连接返回池时,为什么open cursor会显示一个值?说1
  • 当再次使用相同的连接时,该值会增加。DBCP在从池中再次提供连接之前是否不清理连接
  • 如何在再次使用之前清理连接,以便关闭打开的游标

  • 任何帮助都会很好

    展示一些代码以及您是如何配置事务的。我们正在使用org.springframework.jdbc.datasource.datasourcetransactionmanager进行配置并不意味着您正在使用它。因此需要一些代码和配置,请将其添加到问题中,而不是作为注释。