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。
现在请教各位和老师,有谁处理过这类问题,也是像网上说的这样处理吗?
可以这么去做,但是你需要监控一下你的系统的登陆数,很可能你的系统的登陆数比较高,但是又没有释放。
需要确认连接数据库的具体情况,看看应用是怎么连接的,有没有正常释放。
其余的解决办法都是治标不治本。 确实是要从应用入手,之前遇到过这个问题,在修改应用前对部分用户的连接空闲时间做限制(idle_time),超过这个值,Oracle则主动剪断(snip)但不会完全释放,但是应用还会使用被snip的连接,可能会收到"ORA-02396: exceeded maximum idle time, please connect again"错误, 此时Oracle才真正完全释放掉该session。所以说,从应用入手才是解决肯本问题的办法!;P 谢谢各位的答复!:P 用userprofile来限制一下用户的资源使用
页:
[1]