ORA-01000: Maximum open cursors exceeded(超出打开游标的最大数)
Oracle含义
会话打开的游标数超过了 OPEN_CURSORS 参数允许的数量。无法再打开新的游标。
原因
应用未关闭其打开的 Statement/ResultSet 对象(游标泄漏)、OPEN_CURSORS 相对工作负载设置过低,或在循环中不断准备新的 prepared statement 且从不关闭。
解决方法
监控打开的游标:SELECT * FROM v$open_cursor WHERE sid = ... 并通过 v$sesstat 查看每个会话的数量。真正的解决办法是在应用中于 finally 块里关闭每个 Statement/ResultSet(消除游标泄漏)。作为临时办法,增大 OPEN_CURSORS:ALTER SYSTEM SET OPEN_CURSORS = 1000。检查 JDBC 语句缓存大小。
同一数据库的其他条目
- ORA-00942Table or view does not exist(表或视图不存在)
- ORA-01031Insufficient privileges(权限不足)
- ORA-00257Archiver error. Connect internal only, until freed(归档进程错误。在释放之前仅允许内部连接)
- ORA-00018Maximum number of sessions exceeded(超出最大会话数)
- ORA-28000The account is locked(账户已锁定)
- ORA-01578Oracle data block corrupted (file #, block #)(Oracle 数据块损坏(文件号,块号))
- ORA-01722Invalid number(无效数字)