定位超出最大游标数的原凶

程序里报超出最大游标数时,是因为访问结束后数据后的游标却没有及时释放,需要找到是哪一段代码引发了此问题,定义错误代码的步骤如下:
 
第一步:看各用户的连接数
SQL> select user_name, count(*) from v$open_cursor group by user_name;

 第二步:看指定用户(如:应用库用户名BM_APP)的连接占用大于3个的sql
SQL> select sql_text, count(*) from v$open_cursor where user_name = 'BM_APP' group by sql_text having count(*) > 3  order by count(*) desc;

 第二步中占用较大的,也有一些是你看不懂的,有是不是我们的语句是数据库自身的,可以不必管,把我们产生的查询语句找出来

 特别是重复刷新某一个页面,观察sql数量的变化,访问一次页面,值就增长若干个的,就是原凶了
接下来就是想办法查出这个sql的完整语句 :

第三步:查询出指定某一个sql的sql_id
SQL> select sql_id, sql_text from v$open_cursor where sql_text = '换成要查的语句';
 根据这个sql_id,到查询窗口,查询出相对完整的语句,说相对完整是因为若sql语句过长时,是显示在clob字段中的,需要通过程序才能查出来了,不过通过sql_text也能猜个八、九不离十了
SELECT * FROM v$sql where SQL_id = 'sql_id的值';
根据sql语句找到对应的业务代码去分析就可以了。
 
===========================================================================================
我之前查到的是在反射方式下,若使用了Hibenate的lazy=false会引发游标不释放,因此最好不要使用lazy=false,将其改成lazy=true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值