Oracle查询session连接数和inactive以及 概要文件IDLE_TIME限制用户最大空闲连接时间
-----############oracle会话和进程################--------------
--查询会话总数
select count(*) from v$session;
--查询进程总数
select count(*) from v$process;
--查询哪些应用的连接数此时是多少
select b.MACHINE, b.PROGRAM , count(*) from v$process a, v$session b
where a.ADDR = b.PADDR and b.USERNAME is not null group by b.MACHINE ,
b.PROGRAM order by count(*) desc;
--查询是否有死锁 如果查询结果为no rows selected,说明数据库中没有死锁。否则说明数据库中存在死锁。
select * from v$locked_object;
接下来说明一下会话的状态:
1.active 处于此状态的会话,表示正在执行,处于活动状态。
2.killed 处于此状态的会话,表示出现了错误,正在回滚,当然,也是占用系统资源的。
还有一点就是,killed的状态一般会持续较长时间,而且用windows下的工具pl/sql developer来kill掉,
是不管用的,要用命令:alter system kill session 'sid,serial#' ;
3.inactive 处于此状态的会话表示不是正在执行的,比如select语句已经完成。
我一开始以为,只要是inactive状态的会话,就是该杀,为什么不释放呢。
其实,inactive对数据库本身没有什么影响,但是如果程序没有及时commit,那么就会造成占用过多会话。解决inactive的方法最好的就是在oracle中直接设置超时时间。
下面是解决的方法:
Oracle会话达到一定连接时间自动断开的方法
IDLE_TIME:限制每个会话所允许的最长连续空闲时间,超过这个时间会话将自动断开。参数值是一个整数,单位是分钟。
1.Oracle数据库当中至少会有一个Profie文件,它可以限制口令和资源。建立oracle数据库时候,oracle会自动建立命名为default的profile,初始化的default有默认值,下面可以查看默认的profile的资源和口令限制的详细信息。
SQL> select PROFILE,RESOURCE_NAME,LIMIT from dba_profiles where PROFILE='DEFAULT';
PROFILE RESOURCE_NAME LIMIT
-------------------- -------------------- --------------------
DEFAULT COMPOSITE_LIMIT UNLIMITED
DEFAULT SESSIONS_PER_USER UNLIMITED
DEFAULT CPU_PER_SESSION UNLIMITED
DEFAULT CPU_PER_CALL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL UNLIMITED
DEFAULT IDLE_TIME UNLIMITED
这个是空闲时间用来限制用户连接时间
PROFILE RESOURCE_NAME LIMIT
-------------------- -------------------- --------------------
DEFAULT CONNECT_TIME UNLIMITED
DEFAULT PRIVATE_SGA UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS 10
DEFAULT PASSWORD_LIFE_TIME 180
DEFAULT PASSWORD_REUSE_TIME UNLIMITED
DEFAULT PASSWORD_REUSE_MAX UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNC NULL
TION
PROFILE RESOURCE_NAME LIMIT
-------------------- -------------------- --------------------
DEFAULT PASSWORD_LOCK_TIME 1
DEFAULT PASSWORD_GRACE_TIME 7
16 rows selected.
查看某个用户的使用的profile文件,这个通过dba_users来查看。
SQL> select username,profile from dba_users where username='SYSTEM';
USERNAME PROFILE
------------------------------------------------------------ --------------------
SYSTEM DEFAULT
2.Oracle的系统参数RESOURCE_LIMIT是一个用来监控用户对于数据库资源使用的参数,当值为true的时候即为启用,否则禁用(默认是禁用的)。该参数结合profile来控制多种资源的使用,如CPU_PER_SESSION,CONNECT_TIME等等,从而达到节省资源来实现高效性能。通过下面语句可以在RAC当中查看系统参数RESOURCE_LIMIT是否开启。
SQL> select name,value from gv$parameter where name='resource_limit';
NAME VALUE
resource_limit FALSE
3.首先开启这个参数
SQL> alter system set resource_limit=true;
System altered.
SQL> select name,value from gv$parameter where name='resource_limit';
NAME VALUE
resource_limit TRUE
4.修改profile的idle_time,单位为分钟。设置为一小时60分钟。
SQL> alter profile default limit idle_time 60;
Profile altered.
之后再查看一下
SQL> select PROFILE,RESOURCE_NAME,LIMIT from dba_profiles where RESOURCE_NAME='IDLE_TIME';
PROFILE RESOURCE_NAME LIMIT
-------------------- -------------------- --------------------
DEFAULT IDLE_TIME 60
说明:
A:参数RESOURCE_LIMIT=TRUE用于启用数据库资源限制;
B:PROFILE用于实现资源的配置,创建或者修改已存在的PROFILE来调整各个具体资源的配置
C:一旦被限制的用户超出所设定的阀值将收到资源配置相关的错误提示
D:被限制资源的状态变为sniped
E:被限制资源的session对应的server process并没有释放,需要结合sqlnet.expire_time来释放。
通过idle_time限制session idle 时间。session idle超过设置时间,状态为sniped (v$session).,然而OS下的process并不会释放,当session(user process) 再次与server process 通讯,将关闭相应的server process.
5.使用SQLNET__EXPIRE_TIME清楚僵死的连接:
数据库连接的客户端异常断开后,其占有的资源并没有被释放,从v$session数视图中依旧可以看到对应的session处于inactive状态,且对应的服务器进程也没有释放,导致资源长时间被占有。SQLNET.EXPIRE_TIME专门用于清理那些异常断开的情况:通过设定参数为非0值(单位为分钟)来发送探测包以检查客户端异常断开。一旦探测包找到了异常连接将返回错误,清楚对应的server process。
配置SQLNET.EXPIRE_TIME:对于SQLNET.EXPIRE_TIME的配置,需要修改sqlnet.ora,其路径为$ORACLE_HOME/network/admin下面。然后添加SQLNET.EXPIRE_TIME选项,之后重启监听。
6.总结:
A:INACTIVE SESSION 是用户建立连接之后,尚未执行任何操作或操作已经完成但没有断开,等同于与处于idle状态,在v$session视图呈现的是INACTIVE状态。
B:对于使用resource_limit以及profile配置后用户session超出idle_time的情形,在v$sessin视图呈现sniped状态
C:当在sqlnet.ora配置文件中设置SQLNET.EXPIRE_TIME参数为非领值时,僵死连接在EXPIRE_TIME制定时间后被清楚(设定24小时后将INACTIVE状态的session置为SNPIED状态,之后再半小时后清除僵死连接,理论上是行得通的)
D:设定SQLNET.EXPIRE_TIME为非零值之后,系统需要产生额外的开销以及带来网络性能的下降。
E:对于需要及时释放OS以及DB资源的情形,Oracle建议使用resource_limit以及profile限制的用户连接同时并设定SQLNET.EXPIRE_TIME为非零值。
---------------------
作者:风流搞技术
来源:CSDN
原文:https://blog.csdn.net/qq_34556414/article/details/81533712
版权声明:本文为博主原创文章,转载请附上博文链接!
Oracle查询session连接数和inactive以及 概要文件IDLE_TIME限制用户最大空闲连接时间的更多相关文章
- Oracle session连接数和inactive的问题记录
Oracle session连接数和inactive的问题记录 http://timnity.javaeye.com/blog/280383 从上周起,服务器Oracle数据库出现问题,用不到半天,就 ...
- .Oracle固定执行计划之SQL PROFILE概要文件
1. 引子Oracle系统为了合理分配和使用系统的资源提出了概要文件的概念.所谓概要文件,就是一份描述如何使用系统的资源(主要是CPU资源)的配置文件.将概要文件赋予某个数据库用户,在用户连接并访问 ...
- oracle查询数据库连接数相关
select username,count(username) from v$session where username is not null group by username;--查询各个用户 ...
- oracle查询和设置过期时间
第一步:找到oracle 打开enterprise Manager Console如下图: 第二步,找到概要文件: sys 用户进入,找到你的数据库(如:ora8)-“安全性”-"用户&qu ...
- oracle_用户与概要文件
Oracle 用户与概要文件 2012-09-01 15:05:47| 分类: Oracle | 标签:用户与概要文件 |举报 |字号大中小 订阅 用户管理看上去简单其实也是最常出现问题的一个 ...
- Oracle session active 和 inactive 状态 说明
Oracle session active 和 inactive 状态 说明 原创 2011年06月12日 13:08:00 标签: session / oracle / database / ser ...
- oracle查询数据库最大连接数等信息
.当前的数据库连接数 select count(*) from v$process where program='ORACLE.EXE(SHAD)'; .数据库允许的最大连接数 select valu ...
- oracle下session的查询与删除
oracle下session的查询与删除 1.查询当前session SQL> select username,sid,serial# from v$session where username ...
- 查看oracle当前session
怎样查看oracle当前的连接数呢?只需要用下面的SQL语句查询一下就可以了. #查看当前不为空的连接select * from v$session where username is not n ...
随机推荐
- yii---对数组进行分页
很多时候,我们会对多个数据进行分页处理,例如我最近开发的一个功能,系统消息,系统消息的来源是多个表,而且多个表之间的数据没有任何关联,这个时候,需要对多个表进行查询,查询返回的数据进行分页,而且采用的 ...
- 转基于概率的矩阵分解原理详解(PMF)
上一篇博客讲到了推荐系统中常用的矩阵分解方法,RegularizedMF是对BasicMF的优化,而PMF是在RegularizedMF的基础上,引入概率模型进一步优化.假设用户U和项目V的特征矩阵均 ...
- vue之指令系统
所谓指令系统,大家可以联想咱们的cmd命令行工具,只要我输入一条正确的指令,系统就开始干活了. 在vue中,指令系统,设置一些命令之后,来操作我们的数据属性,并展示到我们的DOM上. OK,接下来我们 ...
- 9.12 Django路由
2018-9-12 12:14:29 路由就是根据具体业务需求写的! 有的业务多,路由多,然后就需要细化 然后根据需求该! 怎么方便怎么来! 越努力,越幸运! 贴上笔记! 路由url根据需要可用修改, ...
- .net framework 类库中必须掌握的命名空间(或者类)
Web开发常用命名空间和类. System.Collections //命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections ...
- Druid的Segment Balance及其代价计算函数分析
Balance $Cost(X, Y) $ $$ J_\alpha(x) = \sum_{m=0}^\infty \frac{(-1)^m}{m! \Gamma (m + \alpha + 1)} { ...
- php中调用这个功能可以在web页面中显示hello world这个经典单词
php程序写的时间长了,自然对他所提供的功能了如指掌,他所提供的一大堆功能,真是觉得很好用,但有时候会发现php也缺少一些功能,自己总是会产生为php添加一些自定义的功能的想法.久而久之,终于今天憋不 ...
- linux:echo命令示例
echo命令:用于字符串的输出 $echo string 1.打印普通字符串 $echo "hello kumata" hello kumata #这里的双引号完全可以省略,以下 ...
- html 复制 有时不显示样式
是因为有中文的空格 /**HTML**/ div.ani /**css**/ .ani{ width:480px; height:320px; margin:50px auto; overflow: ...
- htop详解
一.Htop的使用简介 大家可能对top监控软件比较熟悉,今天我为大家介绍另外一个监控软件Htop,姑且称之为top的增强版,相比top其有着很多自身的优势.如下: 两者相比起来,top比较繁琐 默认 ...