发布网友
共2个回答
热心网友
估计你的问题是这个,优化sql!仔细看看sql!
查看用户最大游标数量
这个cursor主要是由于应用程序端(JAVA)造成的,测试结果是
1、对于jdbc来说,每一个从Connection中产生的Statement相当于一个Session,此时会在v$session中产生或者重用一条session记录,v$open_cursor中记录的就是每个session打开的cursor数量,一个对多个父子关系。
2、除非Statement close物理关闭,否则在这个session在v$open_cursor中相关联的记录将一直存在,不会释放。 jakarta dbcp数据库连接池有一个StatementCache功能,它不会物理关闭Statement,所以造成了我们的cursor溢出,看来Oracle的Statement不能再客户端进行Cache,当我的cache size就算为1,运行一段时间cursor也会溢出,我们必须Close Statementsession来确保相应Session中打开的游标关闭。
3、系统参数open_cursor的含义就是这个Session中能够打开游标的最大数,用SQL
表示如下:
select max(cursor_count) from (select count(*) cursor_count
from v$open_cursor where user_name='ORAL' group by sid);
当这条SQL返回结果达到open_cursor参数的取值,jdbc就会抛出
Oracle 最大游标数
2008-06-26 09:241.
检查数据库中的 OPEN_CURSORS 参数值。
可以使用如下查询语句:
SQL> show parameter open_cursors;
2. 获取打开的游标数。
下面的查询按降序显示用户“SCOTT”为每个会话打开的游标数。
SQL> select o.sid, osuser, machine, count(*) num_curs
2 from v$open_cursor o, v$session s
3 where user_name = 'ORAL' and o.sid=s.sid and machine !='SYSTEM'
4 group by o.sid, osuser, machine
5 order by num_curs desc;
3.'ORA-01000:超出最多允许打开的游标数'问题
可以修改oracle中最大游标数
(1)修改srvm/admin/init.ora文件中的OPEN_CURSOR;
(2)alter system set open_cursor=(游标数) scope=both;
(3)在应用程序中执行完数据库操作后,及时关闭与数据库操作相关对象(statement,resultset,connection)
4.主要原因
在程序中没有及时关闭statement等相关对象造成游标资源一直被占用!
注:造成'打开最大游标数'问题主要之程序代码方面造成的.
(1)在事务操作是容易发生。
(2)程序中,在循环里面做statement操作时可能发生。
热心网友
你web最近有修改没有,估计有bug,或者收到攻击了