当前位置: 首页 > 知识库问答 >
问题:

Spring JDBC模板-超过最大打开游标数

訾安邦
2023-03-14

我们的应用程序连接到Oracle数据库,我们使用Spring提供的JDBCTemboard与数据库交互。根据Spring JDBCTemboard的留档,它确保它将关闭所有连接和游标。但显然我们得到了以下打开游标的异常。

ORA-01000:组织上超过了最大打开游标数。springframework。jdbc。支持AbstractFallbackSQLExceptionTranslator。在org上翻译(AbstractFallbackSQLSExceptionTranslator.java:84)~[spring-jdbc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE]。springframework。jdbc。支持AbstractFallbackSQLExceptionTranslator。在org上翻译(AbstractFallbackSQLSExceptionTranslator.java:81)~[spring-jdbc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE]。springframework。jdbc。支持AbstractFallbackSQLExceptionTranslator。在org上翻译(AbstractFallbackSQLSExceptionTranslator.java:81)~[spring-jdbc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE]。springframework。jdbc。果心JdbcTemplate。在org上执行(JdbcTemplate.java:645)~(spring-jdbc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE)。springframework。jdbc。果心JdbcTemplate。在org上查询(JdbcTemplate.java:680)~[spring-jdbc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE]。springframework。jdbc。果心JdbcTemplate。在org上查询(JdbcTemplate.java:712)~(spring-jdbc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE)。springframework。jdbc。果心JdbcTemplate。在org上查询(JdbcTemplate.java:722)~(spring-jdbc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE)。springframework。jdbc。果心JdbcTemplate。org上的queryForObject(JdbcTemplate.java:790)~[spring-jdbc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE]。springframework。jdbc。果心JdbcTemplate。queryForObject(JdbcTemplate.java:809)~[spring-jdbc-4.2.6.RELEASE.jar!/:4.2.6.RELEASE]

片段:

 private Optional<PartyAccess> executeQuery(Object... args) {
    try {
        String query =  "SELECT EMP.ID as PARTY_ID, EMP.MPIN_HSB, EMP.INVALID_MPIN_HSB_COUNT, " +
                "EMP.MPIN_HSB_MODIFIED_ON,  EMP.MPIN_LSB, EMP.INVALID_MPIN_LSB_COUNT, EMP.MPIN_LSB_MODIFIED_ON, " +
                "EMP.EMP_PIN AS SMS_PIN, EMP.NUMBER_OF_PIN_CODE_FAILURE AS INVALID_SMS_PIN_COUNT, EMP.PIN_MODIFIED_ON, " +
                "EMP.PINFLAG AS USE_SHA2_HASH_FOR_PIN, CASE WHEN EMP_BLACKLIST_STATUS = 'Y'  THEN 1 ELSE 0 END AS BLOCKED " +
                "FROM MTX_EMPLOYEE EMP WHERE EMP.ID = ?";
        return Optional.of((PartyAccess) jdbcTemplate.queryForObject(query,
                args,
                new BeanPropertyRowMapper(PartyAccess.class)));
    } catch (DataAccessException ex) {
        LOGGER.error("Error occurred", ex);
        return Optional.empty();
    }
}

我们将hikari用于JDBC连接池,最大大小为10。当有很多请求到达应用程序时,我们面临着这个问题。我尝试增加数据库的max\u游标(我知道这是个糟糕的解决方案)。但即便如此,这也无济于事。当有大量请求传入时,我们监视打开的游标,该值没有超过正在设置的最大游标值。

共有1个答案

翟浩穰
2023-03-14

在将JPA版本升级到最新版本后,问题得到了解决。早期的spring jpa版本没有正确关闭游标。

 类似资料:
  • 我得到一个ORA-01000 SQL异常。所以我有一些与之相关的疑问。 编辑1:6。使用弱/软引用语句对象是否有助于防止泄漏? 编辑2:1。有没有办法,我可以找到我的项目中所有缺失的“statement.close()”?我知道这不是内存泄漏。但是我需要找到一个符合垃圾收集条件的语句引用(在那里没有执行close())?有工具吗?还是我必须手动分析? 请帮我理解一下。

  • 问题内容: 我收到了ORA-01000 SQL异常。因此,我对此有一些疑问。 最大打开游标是否与JDBC连接的数量完全相关,还是与我们为单个连接创建的语句和结果集对象相关?(我们正在使用连接池) 有没有一种方法可以配置数据库中的语句/结果集对象的数量(如连接)? 是否建议在单线程环境中使用实例变量statement / resultset对象而不是方法local statement / resul

  • 我已经连接了Oracle数据库。现在我要面对 我使用代码插入数据: 它只适用于前500条记录,然后我有错误Ora-1000。我总共有大约6000条记录。我发现一些主题说应该改变配置,但我不能改变配置。 有没有其他方法可以解决这个错误?

  • 在Eclipse中,我遇到了这个错误:*错误ORA-01000:超过了最大打开游标数,我已经在块中关闭了连接,但我不知道为什么会出现这个错误,这是我的JAVA代码。请帮帮我!

  • 我得到了ORA-0300:超出了最大打开游标数

  • 嘿,我正在使用Glassfish开源v4,我遇到了一个奇怪的问题。 我在管理控制台中定义了到Oracle 11g的JDBC连接池,并设置了: 初始和最小池大小:500 最大游泳池大小:1000 池大小调整数量::750 我已经为这个连接池创建了一个特定的用户。然而,有时当我检查数据库中打开的连接时,我发现有1000多个连接(我看到的最大连接数是1440个) 当发生这种情况时,任何查询尝试都会失败,