内容阅读
在知识库中专注阅读,并随时返回相关工具与课程
ORA-01000常见内存
超过最大打开游标数
Maximum open cursors exceeded
错误描述
会话已超过 OPEN_CURSORS 参数限制,同时打开了太多游标。
可能原因
- 应用程序使用后未关闭游标(Java 中的 ResultSet/Statement)
- OPEN_CURSORS 参数设置过低
- PL/SQL 代码在循环中打开游标但未关闭
解决方案
- 1修复应用代码,在 finally 块中正确关闭游标
- 2增加 OPEN_CURSORS:ALTER SYSTEM SET open_cursors=1000 SCOPE=BOTH;
- 3识别打开游标最多的会话并检查其代码
诊断命令
SHOW PARAMETER open_cursors;SELECT sid, COUNT(*) AS cursor_count FROM v$open_cursor GROUP BY sid ORDER BY 2 DESC FETCH FIRST 10 ROWS ONLY;SELECT s.sid, s.username, COUNT(*) AS cnt FROM v$open_cursor oc JOIN v$session s ON oc.sid = s.sid GROUP BY s.sid, s.username ORDER BY cnt DESC;#cursor#open-cursors#memory#leak