DBAtlas · 数据库运维图谱

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 语句缓存大小。

在 DBAtlas 中打开 →

同一数据库的其他条目