跳到主要内容
内容阅读

在知识库中专注阅读,并随时返回相关工具与课程

ORA-01000常见内存

超过最大打开游标数

Maximum open cursors exceeded

错误描述

会话已超过 OPEN_CURSORS 参数限制,同时打开了太多游标。

可能原因

  • 应用程序使用后未关闭游标(Java 中的 ResultSet/Statement)
  • OPEN_CURSORS 参数设置过低
  • PL/SQL 代码在循环中打开游标但未关闭

解决方案

  1. 1修复应用代码,在 finally 块中正确关闭游标
  2. 2增加 OPEN_CURSORS:ALTER SYSTEM SET open_cursors=1000 SCOPE=BOTH;
  3. 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

同类错误码(内存)

想系统掌握这个领域?

「内存」在课程 Day 81-90 中有 10 篇完整实战教程

完整操作步骤真实截图踩坑总结
查看完整课程¥128/月起 · 解锁全部 2738+ 篇
ORA-01000: 超过最大打开游标数 - 原因与解决方案 | DBA 学习之路