xingxing 发表于 2010-12-6 11:31:35

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。

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



oraunix 发表于 2010-12-6 13:24:15

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

kimm_yong 发表于 2010-12-6 18:50:37

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

xingxing 发表于 2010-12-6 21:32:56

谢谢各位的答复!:P

315865716 发表于 2010-12-7 14:56:46

用userprofile来限制一下用户的资源使用
页: [1]
查看完整版本: session 的status 为INACTIVE太多,如何解决