使用Oracle的Spring Boot应用程序-ORA-01000:超出最大打开游标数

问题描述 投票:0回答:1

正在处理Spring Boot应用程序。在执行负载测试时,出现错误

“ ORA-01000:最大打开游标已超出”

我们在pom.xml文件中有以下用于spring boot和jdbc的条目

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
</parent>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.3</version>
</dependency>

为了解决这个问题,我尝试将“ ojdbc”从6更改为8。

<dependency>
    <groupId>com.oracle.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>12.2.0.1</version>
</dependency>

但是我仍然遇到同样的问题。

我们使用“ jdbcTemplate”或“ namedParameterJdbcTemplate”进行的所有后端调用。

正在寻找解决此问题的建议。

java spring-boot jdbctemplate ojdbc
1个回答
0
投票

我的第一个建议是将包括Spring JDBC和JPA版本在内的更新Spring Library升级到最新版本。春季JPA的早期版本无法正确关闭游标。

通常由于未清理resultsets,语句或连接而发生此问题。您创建的每个ResultSet都在后端使用光标。如果您从未关闭ResultSet,创建它的Statement或用于该语句的Connection,则这些游标将永远不会关闭。当您使用连接池时,连接永远不会物理关闭,因此游标也永远不会关闭。

什么原因导致在JDBC java-中解决ora-01000 maximum open cursors exceeded java.sql.SQLException问题

  1. 不关闭JDBC Statement对象会导致打开的游标数量最大超出了java.sql.SQLException,
  2. 不关闭JDBC PreparedStatement对象会导致最大打开游标超出了java.sql.SQLException,
  3. 不关闭JDBC CallableStatement对象会导致最大打开游标超出了java.sql.SQLException,
  4. 不关闭JDBC ResultSet对象并且不关闭JDBC连接对象可能导致超出最大打开游标java.sql.SQLException
© www.soinside.com 2019 - 2024. All rights reserved.