-----############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限制用户最大空闲连接时间的更多相关文章

  1. Oracle session连接数和inactive的问题记录

    Oracle session连接数和inactive的问题记录 http://timnity.javaeye.com/blog/280383 从上周起,服务器Oracle数据库出现问题,用不到半天,就 ...

  2. .Oracle固定执行计划之SQL PROFILE概要文件

    1.  引子Oracle系统为了合理分配和使用系统的资源提出了概要文件的概念.所谓概要文件,就是一份描述如何使用系统的资源(主要是CPU资源)的配置文件.将概要文件赋予某个数据库用户,在用户连接并访问 ...

  3. oracle查询数据库连接数相关

    select username,count(username) from v$session where username is not null group by username;--查询各个用户 ...

  4. oracle查询和设置过期时间

    第一步:找到oracle 打开enterprise Manager Console如下图: 第二步,找到概要文件: sys 用户进入,找到你的数据库(如:ora8)-“安全性”-"用户&qu ...

  5. oracle_用户与概要文件

    Oracle 用户与概要文件 2012-09-01 15:05:47| 分类: Oracle | 标签:用户与概要文件 |举报 |字号大中小 订阅     用户管理看上去简单其实也是最常出现问题的一个 ...

  6. Oracle session active 和 inactive 状态 说明

    Oracle session active 和 inactive 状态 说明 原创 2011年06月12日 13:08:00 标签: session / oracle / database / ser ...

  7. oracle查询数据库最大连接数等信息

    .当前的数据库连接数 select count(*) from v$process where program='ORACLE.EXE(SHAD)'; .数据库允许的最大连接数 select valu ...

  8. oracle下session的查询与删除

    oracle下session的查询与删除 1.查询当前session SQL> select username,sid,serial# from v$session where username ...

  9. 查看oracle当前session

      怎样查看oracle当前的连接数呢?只需要用下面的SQL语句查询一下就可以了. #查看当前不为空的连接select * from v$session where username is not n ...

随机推荐

  1. Spark2 Dataset持久化存储级别StorageLevel

    import org.apache.spark.storage.StorageLevel // 数据持久缓存到内存中//data.cache()data.persist() // 设置缓存级别data ...

  2. 【巷子】---vue基于mint-ui三级联动---【vue】

    一.基本配置 https://github.com/modood/Administrative-divisions-of-China 三级联动数据地址 二.vue基本配置 1.cnpm install ...

  3. Spark+IDEA单机版环境搭建+IDEA快捷键

    1. IDEA中配置Spark运行环境 请参考博文:http://www.cnblogs.com/jackchen-Net/p/6867838.html 3.1.Project Struct查看项目的 ...

  4. MySQL在windows下的图形安装

    1.mysql官网下载mysql-5.5.53-winx64.msi文件并保存到磁盘相应目录. 2.图形化安装mysql数据库: 1)双击mysql-5.5.53-winx64.msi,出现欢迎界面, ...

  5. Integral transform 积分变换

    总结: 1.为了更加便于求解,将方程从原域映射到另外一个域 Integral transform - Wikipedia https://en.wikipedia.org/wiki/Integral_ ...

  6. IOS--jenkins ,app,reengine

    传统的对iOS逆向的工具要使用到下面很多: clutchotoolkeychain-dumpersqlitedumpdecryptedclass-dump-zTheos http://iosapp.m ...

  7. http://www.cnblogs.com/linxiyue/p/8244724.html

    http://www.cnblogs.com/linxiyue/p/8244724.html

  8. 为什么说Java语言是平台无关的?

    适当的整理了一下: 一.平台与机器指令 无论哪种编程语言编写的应用程序都需要经过操作系统和处理器来完成程序的运行,因此这里的平台是又OS和CPU所构成的,所谓的平台无关就是指软件的运行不会因操作系统. ...

  9. python 基础 内置函数

    内置参数 print(all([5,-1,5])) # 非0都是真 true print(all([0,-1,5])) # false print(any([1,0,5])) # 有一个数据为真,就为 ...

  10. 让Logstash每次都从头读文件及常见问题

    input { file { path => ["/data/test.log"] start_position => "beginning" si ...