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只需要设置一个比较小的值,就足够使用了,除非有非常特别的要求。
分享到:
相关推荐
如果应用程序打开的游标数超过这个限制,会引发 ORA-01000: maximum open cursors exceeded 异常。下面将探讨超出打开游标的最大数的原因和解决方案。 原因 应用程序打开的游标数超过 OPEN_CURSORS 参数指定的最大...
解决疑难问题,针对偏僻的问题:oracle超出打开游标的最大数的原因和解决方案,希望能对大家操作数据库有用处
当程序在处理大量数据或者进行复杂操作时,可能会遇到“超出打开游标最大数”的错误,即ORA-01000异常。这个错误通常表明数据库当前打开的游标数量超过了`open_cursors`参数所设定的最大值。 首先,我们需要理解为...
当尝试打开一个已经打开的游标时触发此异常。 **解决方法:** - 在打开新的游标之前关闭已有的游标。 - 确保游标的状态管理正确,避免重复打开同一游标。 #### 5. DUP_VAL_ON_INDEX (ORA-00001) **异常描述:** 当...
- **场景示例**:若在未先关闭已打开的游标的情况下再次尝试打开它,将引发此异常。 #### 5. DUP_VAL_ON_INDEX - **异常描述**:在唯一索引列上插入重复值时触发。 - **错误代码**:ORA-00001 - **场景示例**:在有...
1. ORA-01000: 达到最大打开游标数 - 表示应用程序打开了过多的游标,超过了系统允许的最大值。解决方法是优化代码,关闭不再使用的游标,或者增加`OPEN_CURSORS`初始化参数的值。 2. ORA-01422: 指定的行数超出...
3. **ORA-12003**: 实际的游标与声明的游标不匹配,可能是返回的列数或类型不一致。 4. **ORA-12004**: 在REFRESHFAST操作中遇到了问题,这通常用于刷新物化视图,可能是因为缺少必要的索引或视图定义不正确。 5. ...
### Oracle异常详解 #### ORA-0001:DUP_VAL_ON_INDEX - **异常说明**:当尝试向一个定义了唯一性约束的索引插入重复值时触发。 - **常见原因**: - 插入的数据违反了表中的唯一性约束条件。 - 可能是由于数据...
**ORA-17072**:说明值太大错误,通常是因为值超出允许的最大范围。 **ORA-17074**:未知模式错误,可能是因为使用了未定义的模式。 **ORA-17075**:只能转换错误,通常涉及到数据类型的转换问题。 **ORA-17076**...
4. `Cursor_already_open` (ora-06511):尝试重新打开已打开的游标。 5. `Dup_val_on_index` (ora-00001):插入唯一索引上的重复值。 6. `Invalid_cursor` (ora-01001):在非法游标上执行操作,如未打开游标即尝试...
17. ORA-17070 至 ORA-17094: 包括数据大小超出限制、VARRAY溢出、操作不支持、值冲突以及并发级别和结果类型的问题。 18. ORA-17095 至 ORA-17099: 这些错误涵盖了各种内部错误、不允许的操作、创建结果集失败以及...
6. **CURSOR_ALREADY_OPEN** (ORA-06511): 如果试图重新打开已经打开的游标,就会出现这个错误。确保在关闭游标后才能再次打开。 7. **DUP_VAL_ON_INDEX** (ORA-00001): 当在具有唯一约束的索引列上插入重复值时,...
- `ORA-6511 CURSOR-already-OPEN`:试图打开一个已处于打开状态的游标。 - `ORA-6530 Access-INTO-null`:试图为null对象的属性赋值。 - `ORA-6531 Collection-is-null`:试图将Exists以外的集合方法应用于一个null...
- 举例:索引值不在合法范围内,如负数或超出最大限制。 16. **SYS_INVALID_ROWID (ORA-01410)** - 描述:字符到ROWID的转换失败,因为字符不代表有效的ROWID。 - 举例:尝试将无效的ROWID字符串转换为ROWID。 ...
`INVALID_CURSOR`(ORA-01001)异常会在试图使用无效的游标时发生,比如游标已经被关闭或者从未被正确打开过。 **解决方法:** 1. **确保游标正确打开**:在执行任何读取或写入操作前,确认游标是有效的且处于打开...
当一个会话达到其资源限制时,如最大打开游标数、最大连接时间等,会抛出此错误。这通常意味着会话配置需要调整,或者系统资源不足。 #### ORA-00021: Instance recovery in progress 在实例恢复过程中执行操作时...
Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...