oracle数据库老是死 怎么处理?

19 篇文章 1 订阅

估计你的问题是这个,优化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操作时可能发生。

原文地址:https://www.weidianyuedu.com/content/3120663691026.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值