应用“ORA-01000:超出最多允许打开的游标数”故障排除
来源:互联网 发布:ubuntu安装tomcat8 编辑:程序博客网 时间:2024/05/16 08:17
问题诶经
应用在做压力测试时出现了“ORA-01000:超出最多允许打开的游标数”的错误,当时暂时没有想到解决办法,事后调整平台代码,释放资源可以修正该bug,但无法确定bug具体原因,
现使用下面方法可找到具体问题出现位置:1、查看当前系统设置的一个会话允许的游标数量,并记录,测试完成后恢复。
SQL> show parameter open_cursors;
调整数据库游标数,设置为一个较小数如500
SQL> alter system set open_cursors=500 scope=both;
2、重启数据库实例,数据恢复初始状态。
3、应用数据库连接池连接数设置为1。
4、启动应用并执行出现问题的场景(继续压力测试)。
5、查看应用,出现错误后停止测试,但保持应用处于启动状态方便收集现有数据。
6、查看会话占用的游标数,此处可看到使用了500+游标
--用户会话使用游标数 下面是SCOTT用户select o.sid, osuser, machine, count(*) num_curs from v$open_cursor o, v$session swhere user_name = 'SCOTT' and o.sid=s.sid group by o.sid, osuser, machineorder by num_curs desc;
7、找出占用游标没有释放的sql sid根据实际情况修改
--查看使用游标的sqlselect q.sql_text from v$open_cursor o, v$sql qwhere q.hash_value=o.hash_value and o.CURSOR_TYPE='OPEN' and o.sid = 28;
相关说明:
1、在v$open_cursor表中查看的游标数量包括sql占用游标与会话缓存游标,但会话缓存游标不在配置的参数之内,如使用
show parameter open_cursors;查看配置游标数为500,但查看v$open_cursor中总数为550,在使用下面语句查看后发现
500个游标是打开的,另外50个是缓存占用的,网上很多资料这地方解释不够清晰
--查看当前v$open_cursor中的游标使用情况 sid根据实际情况修改SELECT SID, n.NAME para_name, s.VALUE usedFROM SYS.v_$statname n, SYS.v_$sesstat sWHERE n.NAME IN ('opened cursors current', 'session cursor cache count')AND s.statistic# = n.statistic#AND SID = 28;
--查看会话缓存使用情况
show parameter session_cached_cursors;
2、若想查看当前使用的游标情况,建议使用下面语句
--查看已打开游标select a.value,s.username,s.sid,s.serial#fromv$sesstat a,v$statname b,v$session swherea.statistic# = b.statistic# ands.sid=a.sid andb.name = 'opened cursors current';
应用在测试过程中也可以使用下面的方法来观察是否有游标泄露
撑爆法:
注意:此方法没有在正式环境测试,不知道这样撑爆数据库会出现什么实际后果,建议测试前备份数据。
1、查看当前系统设置的一个会话允许的游标数量,并记录,测试完成后恢复。
SQL> show parameter open_cursors;
调整数据库游标数,设置为一个较小数如500
SQL> alter system set open_cursors=500 scope=both;
2、重启数据库实例,数据恢复初始状态。
3、应用数据库连接池连接数设置为1。
4、正常测试应用,一周或一月后踢出所有用户,收集数据库数据
使用下面sql查看数据库状态,看是否有大量的游标占用
--查看已打开游标select a.value,s.username,s.sid,s.serial#fromv$sesstat a,v$statname b,v$session swherea.statistic# = b.statistic# ands.sid=a.sid andb.name = 'opened cursors current';
5、若有大量游标占用,此时固定使用一个sql循环去访问数据库,但访问过程中不关闭statement,等待数据库报出“ORA-01000:超出最多允许打开的游标数”异常
6、此时按照上面压力测试故障查找方法,找到对应sql,并排除这次撑爆数据库游标使用的sql,拿到的即为出现问题的sql。
深入探查“ORA-01000:超出最多允许打开的游标数”可以参考:http://blog.itpub.net/308563/viewspace-171889/
理解V$OPEN_CURSOR与session_cached_cursor可以参考:http://www.cnblogs.com/rootq/archive/2009/08/27/1554747.html
0 0
- 应用“ORA-01000:超出最多允许打开的游标数”故障排除
- 探查“ORA-01000:超出最多允许打开的游标数”
- ORA-01000:超出最多允许打开的游标数
- 探查“ORA-01000:超出最多允许打开的游标数” - Oracle
- ibatis ora-01000 超出最多允许打开的游标数 解决方法
- oracle 数据库(ORA-01000)最多允许打开的游标数错误的问题的解决
- myBatis批量操作引发的(ORA-01000)最多允许打开的游标数错误
- ora-01000 超出打开游标的最大数的解决方法
- ORA-01000: 超出打开游标的最大数的问题
- ORA-01000: 超出打开游标的最大数
- 【Oracle异常】ORA-01000: 超出打开游标的最大数
- ORA-01000: 超出打开游标的最大数
- oracle数据库ORA-01000: 超出打开游标的最大数
- Oracle ORA-01000: 超出打开游标的最大数
- ORA-01000: 超出打开游标的最大数
- Oracle: ORA-01000: 超出打开游标的最大数
- ORA-00604 递归 SQL 级别 1 出现错误,ORA-01000 超出打开游标的最大数
- ORA-00604: 递归 SQL 级别 1 出现错误,ORA-01000: 超出打开游标的最大数
- OProfile
- SimpleQQ – WebQQ 桌面端 基于WebQQ 1.00内核
- 图元开发
- Spring中的自动装配案例分析
- CCClippingNode遮罩解析
- 应用“ORA-01000:超出最多允许打开的游标数”故障排除
- 关于JavaScript是否会阻塞图片加载
- Jquery元素追加和删除
- 登录PL/SQL Developer报异常:ORA-12154: TNS: 无法解析指定的连接标识符
- 施用CSS3生成一个inset盒子阴影(带透明度)
- Unity3D开发总结一
- apache kafka系列之Producer处理逻辑
- AOP 容易入门示例
- jsp EL语言