报告的C3P0连接池ORA-01000:最大打开游标超出错误

时间:2018-04-23 10:38:20

标签: oracle hibernate c3p0

我正在使用Hibernate 3.6和c3p0-0.9.2-pre1。我收到异常ORA-01000:在hibernate.cfg.xml中使用C3p0配置时,最大打开游标超出了错误。

我有一个Oracle的DatabaseSchema.conf文件,其中我有大约200个create table语句,同时验证了Oracle的数据库模式,我遇到了一个奇怪的场景:

  1. 如果我没有使用连接池,那么没问题,一旦关闭Connection,数据库发布了打开的游标,而open_cursors计数没有明显增加,它将保持默认的open_cursors计数即300.
  2. 但是如果我们使用连接池,则open_cursors计数显着增加并超过默认的open_cursors计数,即300并报告异常ORA-01000:最大打开游标超出错误。
  3. 我已经尝试过以下方法:

    1. 将值设置为' 0' hibernate.cfg.xml中的以下属性,以禁用C3p0的语句缓存             property name =" hibernate.c3p0.max_statements"             property name =" hibernate.c3p0.maxStatementsPerConnection"

    2. 关闭SESSION后,CONNECTION,RESULTSET将它们分配为NULL。

      SESSION: 
                      if(session != null && session.isOpen()) {
                          session.close();
                          session = null; //assign null
                      }
      
       RESULTSET :
                       if(rs != null) {
                          rs.close();
                          rs=null;  //assign null
                      }
      
       CONNECTION :
                  if(conn != null) {
                     conn.close();
                    conn=null;  //assign null
                   }
      
    3. 在hibernate.cfg.xml中定义的C3P0配置中使用了各种排列和组合

    4. Ex:随后增加numHelperThreads并观察OPEN_CURSOR计数,更改了池的最小和最大大小。以类似的方式,我也改变了其他配置。

      1. 在C3P0配置中使用了Connection Provider类,并导入了与Hibernate 3.6兼容的hibernate-c3p0 jar。

      2. 将Hibernate版本从3.6升级到5.2。

      3. 使用DBCP连接池机制代替C3P0。

      4. 1-6的方法导致高OPEN_CURSOR计数,而只有方法7导致期望的结果。

        我还应该尝试使用C3P0?

0 个答案:

没有答案