v$open_cursor查看游标以下2个命令查看相关的配置: show parameter process; show parameter cursor;
一般执行完后一段时间不用就会自动关闭的, 如果超过了数据库规定的最大, 那么就改大点: SQL> show parameter cursor;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cursor_sharing string EXACT cursor_space_for_time boolean FALSE open_cursors integer 300 session_cached_cursors integer 20SQL> alter system set open_cursors = 500 scope = both;System altered.SQL> show parameter cursor;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cursor_sharing string EXACT cursor_space_for_time boolean FALSE open_cursors integer 500 session_cached_cursors integer 20 也可能是由于异常频繁发生, 导致过多的游标打开 EXCEPTION WHEN OTHERS THEN IF ( CUR_C1%ISOPEN = TRUE ) THEN CLOSE CUR_C1; END IF;
2.review 你的open_cursors 设置情况,看是否设置合理
show parameter process;
show parameter cursor;
SQL> show parameter cursor;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cursor_sharing string EXACT
cursor_space_for_time boolean FALSE
open_cursors integer 300
session_cached_cursors integer 20SQL> alter system set open_cursors = 500 scope = both;System altered.SQL> show parameter cursor;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cursor_sharing string EXACT
cursor_space_for_time boolean FALSE
open_cursors integer 500
session_cached_cursors integer 20
也可能是由于异常频繁发生, 导致过多的游标打开
EXCEPTION
WHEN OTHERS THEN
IF ( CUR_C1%ISOPEN = TRUE ) THEN
CLOSE CUR_C1;
END IF;
select count(*) from v$open_cursor;
修改最大数:
alter system set open_cursors=1000;
select sid,count(*) from v$open_cursor group by sid order by 2 desc ;