`
newleague
  • 浏览: 1505512 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

Oracle: ORA-01000: 超出打开游标的最大数问题及解决办法

阅读更多
java.sql.SQLException: ORA-01000: 超出打开游标的最大数
ORA-01000: 超出打开游标的最大数
ORA-06512: 在"SYS.DBMS_LOB", line 521
ORA-06512: 在line 1
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1451)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:862)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:1846)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1771)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2361)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:422)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:487)
at oracle.sql.LobPlsqlUtil.plsql_getChunkSize(LobPlsqlUtil.java:1280)
at oracle.sql.LobPlsqlUtil.plsql_getChunkSize(LobPlsqlUtil.java:127)
at oracle.jdbc.dbaccess.DBAccess.getLobChunkSize(DBAccess.java:959)
at oracle.sql.LobDBAccessImpl.getChunkSize(LobDBAccessImpl.java:116)
at oracle.sql.BLOB.getChunkSize(BLOB.java:266)
at oracle.sql.BLOB.getBufferSize(BLOB.java:280)
at oracle.sql.BLOB.getBinaryStream(BLOB.java:162)
at oracle.sql.BLOB.binaryStreamValue(BLOB.java:600)
at oracle.jdbc.driver.OracleStatement.getBinaryStreamValue(OracleStatement.java:4804)
at oracle.jdbc.driver.OracleResultSetImpl.getBinaryStream(OracleResultSetImpl.java:398)
at org.jboss.mq.SpyMessageConsumer.run(SpyMessageConsumer.java:552)
at java.lang.Thread.run(Thread.java:534)


报错程序:

while (rset.next()) {
              is = rset.getBinaryStream(1);//此行报错
              ois = new ObjectInputStream(is);
........

}

实际上,这个错误的原因,主要还是代码问题引起的。   
  ora-01000:   maximum   open   cursors   exceeded.   
  表示已经达到一个进程打开的最大游标数。   
  
  这样的错误很容易出现在Java代码中的主要原因是:Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。 
  
  一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statment关闭。 
  
  对于出现ORA-01000错误这种情况,单纯的加大open_cursors并不是好办法,那只是治标不治本。实际上,代码中的隐患并没有解除。   
  而且,绝大部分情况下,open_cursors只需要设置一个比较小的值,就足够使用了,除非有非常特别的要求。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shenzhen_mydream/archive/2010/07/11/5726891.aspx
分享到:
评论

相关推荐

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

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

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

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

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

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

    Oracle常用异常代码

    ### Oracle常用异常代码详解 #### 1. ACCESS_INTO_NULL (ORA-06530) **异常描述:** 当尝试访问一个未初始化或者值为NULL的引用时触发此异常。通常发生在对一个NULL对象执行操作(如读取或修改其属性)时。 **解决...

    Oracle21个预定义异常

    - **异常描述**:通常表示PL/SQL内部问题,需重装数据字典视图和PL/SQL包解决。 - **错误代码**:ORA-06501 - **场景示例**:当PL/SQL引擎检测到内部错误,可能是由于系统配置不当或软件缺陷引起,此时需检查并修复...

    Oracle错误码大全

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

    ora_error大全.doc

    Oracle数据库是世界上最流行的数据库...这些错误代码提供了诊断Oracle数据库问题的线索,通过查阅Oracle文档或相关资源,可以找到每个错误的具体解决方法。理解这些错误及其含义是成功管理和维护Oracle数据库的关键。

    oracle异常(最全异常收集)

    ### Oracle异常详解 #### ORA-0001:DUP_VAL_ON_INDEX - **异常说明**:当尝试向一个定义了唯一性约束的索引插入重复值时触发。 - **常见原因**: - 插入的数据违反了表中的唯一性约束条件。 - 可能是由于数据...

    oracle 错误合集

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

    oracle异常处理

    4. `Cursor_already_open` (ora-06511):尝试重新打开已打开的游标。 5. `Dup_val_on_index` (ora-00001):插入唯一索引上的重复值。 6. `Invalid_cursor` (ora-01001):在非法游标上执行操作,如未打开游标即尝试...

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

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

    Oracle错误代码集合[参考].pdf

    了解这些错误代码有助于开发者更有效地诊断和解决问题,提高Oracle数据库应用的稳定性和性能。在遇到这些错误时,开发者应检查SQL语句、数据类型、连接状态、事务处理和资源管理等方面,以找出问题的根本原因。同时...

    预定义异常

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

    ORACLE 异常错误处理

    有效的异常处理机制不仅可以帮助开发者更好地控制程序流程,还能够在出现问题时提供更详尽的错误信息,从而快速定位并解决问题。 #### 二、异常处理分类 根据ORACLE提供的异常处理机制,我们可以将异常分为三类: ...

    oracle常见Exception

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

    Oracle错误一览表

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

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

Global site tag (gtag.js) - Google Analytics