session 的status 为INACTIVE太多,如何解决

查询

SQL> select count(*) from v$session where status='INACTIVE';

  COUNT(*)
----------
      1227

SQL> select count(*),event from v$session where status='INACTIVE' group by event;

  COUNT(*) EVENT
---------- ----------------------------------------------------------------
      1227 SQL*Net message from client


    这么多的session状态为INACTIVE。google了一把,说处理方式不外乎两种:扩大oracle最大session数以及清除inactive会话,当然还有,就是从数据库连接池和程序bug上面下手。

  还有,解决inactive的方法最好的就是在oracle中直接设置超时时间,也是有两种方法,区别暂时还不清楚:
1.修改sqlnet.ora文件,新增expire_time=x(单位是分钟)  
我的sqlnet.ora位置在D:\oracle\ora92\network\admin
2.通过ALTER PROFILE DEFAULT LIMIT IDLE_TIME 10; 命令修改,记得重启下oracle。

现在请教各位和老师,有谁处理过这类问题,也是像网上说的这样处理吗?



标签: 暂无标签
xingxing

写了 3 篇文章,拥有财富 87,被 2 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

P6 | 发表于 2010-12-6 13:24:15
可以这么去做,但是你需要监控一下你的系统的登陆数,很可能你的系统的登陆数比较高,但是又没有释放。
需要确认连接数据库的具体情况,看看应用是怎么连接的,有没有正常释放。
其余的解决办法都是治标不治本。
回复

使用道具

P3 | 发表于 2010-12-6 18:50:37
确实是要从应用入手,之前遇到过这个问题,在修改应用前对部分用户的连接空闲时间做限制(idle_time),超过这个值,Oracle则主动剪断(snip)但不会完全释放,但是应用还会使用被snip的连接,可能会收到"ORA-02396: exceeded maximum idle time, please connect again"错误, 此时Oracle才真正完全释放掉该session。所以说,从应用入手才是解决肯本问题的办法!
回复

使用道具

P4 | 发表于 2010-12-6 21:32:56
谢谢各位的答复!
回复

使用道具

P3 | 发表于 2010-12-7 14:56:46
用userprofile来限制一下用户的资源使用
回复

使用道具

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈