`

ora-01000:超出打开游标的最大数

 
阅读更多

最近在项目中用到了apache的common-dbcp框架,在spring的配置文件中,加入了dataSource的配置,如下:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
        <!-- Connection Info -->  
        <property name="driverClassName" value="${jdbc.driverClassName}" />  
        <property name="url" value="${jdbc.url}" />  
        <property name="username" value="${jdbc.username}" />  
        <property name="password" value="${jdbc.password}" />  
  
        <!-- Connection Pooling DBCP -->  
        <property name="initialSize" value="5" />  
        <property name="maxActive" value="100" />  
        <property name="maxIdle" value="30" />  
        <property name="maxWait" value="1000" />  
        <property name="poolPreparedStatements" value="true" />  
        <property name="defaultAutoCommit" value="true" />  
    </bean>  

  测试,没问题。但是,在商用环境上,突然发现,经过一段时间的数据库操作,数据库连接的游标用尽,报出maximum open cursors exceeded,   排查了很久,代码里面没有未关连接的情况(因为用的是spring的jdbc模板),也没有使用任何存储过程。在万般无奈下,最后查看了配置文件,突然发现

<property name="poolPreparedStatements" value="true" />  
 

这个配置以前没使用过(注:因为这个配置是从网上down下来的)。查看了common-dbcp的api,原来这个地方把每个connection用到的preparedStatement都缓存到池中了(具体实现机制还没看源代码,我猜想是这样),最后导致preparedStatement未释放,游标也就一直没释放,到游标最大数直接报错。

      最后,把poolPreparedStatements设置为false后,问题解决。

分享到:
评论

相关推荐

    超出打开游标的最大数的原因和解决方案

    如果应用程序打开的游标数超过这个限制,会引发 ORA-01000: maximum open cursors exceeded 异常。下面将探讨超出打开游标的最大数的原因和解决方案。 原因 应用程序打开的游标数超过 OPEN_CURSORS 参数指定的最大...

    oracle超出打开游标的最大数的原因和解决方案

    解决疑难问题,针对偏僻的问题:oracle超出打开游标的最大数的原因和解决方案,希望能对大家操作数据库有用处

    Oracle常用异常代码

    当使用无效的游标时触发此异常,可能是因为游标尚未被正确打开。 **解决方法:** - 确保在使用游标之前已正确打开它。 - 检查游标的打开状态和使用方式。 #### 7. INVALID_NUMBER (ORA-01722) **异常描述:** 当...

    Oracle出现超出打开游标最大数的解决方法

    当程序在处理大量数据或者进行复杂操作时,可能会遇到“超出打开游标最大数”的错误,即ORA-01000异常。这个错误通常表明数据库当前打开的游标数量超过了`open_cursors`参数所设定的最大值。 首先,我们需要理解为...

    Oracle错误码大全

    1. ORA-01000: 达到最大打开游标数 - 表示应用程序打开了过多的游标,超过了系统允许的最大值。解决方法是优化代码,关闭不再使用的游标,或者增加`OPEN_CURSORS`初始化参数的值。 2. ORA-01422: 指定的行数超出...

    ora_error大全.doc

    3. **ORA-12003**: 实际的游标与声明的游标不匹配,可能是返回的列数或类型不一致。 4. **ORA-12004**: 在REFRESHFAST操作中遇到了问题,这通常用于刷新物化视图,可能是因为缺少必要的索引或视图定义不正确。 5. ...

    预定义异常

    - 举例:索引值不在合法范围内,如负数或超出最大限制。 16. **SYS_INVALID_ROWID (ORA-01410)** - 描述:字符到ROWID的转换失败,因为字符不代表有效的ROWID。 - 举例:尝试将无效的ROWID字符串转换为ROWID。 ...

    oracle异常(最全异常收集)

    - 确保在使用游标之前已正确打开。 - 在使用完成后关闭游标,并避免后续使用已关闭的游标。 #### ORA-1012:NOT_LOGGED_ON - **异常说明**:未登录Oracle。 - **常见原因**: - 连接字符串错误。 - 用户名或...

    Oracle错误一览表

    当一个会话达到其资源限制时,如最大打开游标数、最大连接时间等,会抛出此错误。这通常意味着会话配置需要调整,或者系统资源不足。 #### ORA-00021: Instance recovery in progress 在实例恢复过程中执行操作时...

    oracle 错误合集

    **ORA-17072**:说明值太大错误,通常是因为值超出允许的最大范围。 **ORA-17074**:未知模式错误,可能是因为使用了未定义的模式。 **ORA-17075**:只能转换错误,通常涉及到数据类型的转换问题。 **ORA-17076**...

    oracle异常处理

    6. `Invalid_cursor` (ora-01001):在非法游标上执行操作,如未打开游标即尝试提取数据。 7. `Invalid_number` (ora-01722):尝试将非法字符串转换为数字。 8. `No_data_found` (ora-01403):SELECT INTO 未返回任何...

    Oracle Exception汇总(自定义Oracle异常)

    6. **CURSOR_ALREADY_OPEN** (ORA-06511): 如果试图重新打开已经打开的游标,就会出现这个错误。确保在关闭游标后才能再次打开。 7. **DUP_VAL_ON_INDEX** (ORA-00001): 当在具有唯一约束的索引列上插入重复值时,...

    ORACLE 异常错误处理

    - `ORA-6511 CURSOR-already-OPEN`:试图打开一个已处于打开状态的游标。 - `ORA-6530 Access-INTO-null`:试图为null对象的属性赋值。 - `ORA-6531 Collection-is-null`:试图将Exists以外的集合方法应用于一个null...

    Oracle21个预定义异常

    - **场景示例**:如果试图从未开启的游标中读取数据,或关闭一个未被打开的游标,将触发此异常。 #### 7. INVALID_NUMBER - **异常描述**:当SQL语句无法将字符串转换为数值时触发。 - **错误代码**:ORA-01722 - *...

    oracle常见Exception

    `INVALID_CURSOR`(ORA-01001)异常会在试图使用无效的游标时发生,比如游标已经被关闭或者从未被正确打开过。 **解决方法:** 1. **确保游标正确打开**:在执行任何读取或写入操作前,确认游标是有效的且处于打开...

    Oracle9i的init.ora参数中文说明

    说明 : 指定在一个共享服务器环境中可同时运行的共享服务器进程的最大数量。 值范围: 根据操作系统而定。 默认值 : 20 dispatchers: 说明 : 为设置使用共享服务器的共享环境而设置调度程序的数量和类型。可以为该...

Global site tag (gtag.js) - Google Analytics