一. Session 状态说明

可以通过v$session 视图的status列查看session 的状态。  关于该视图的使用,参考联机文档:

V$SESSION

http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/dynviews_3016.htm#REFRN30223

STATUS

VARCHAR2(8)

Status of the session:

ACTIVE - Session currently executing SQL

INACTIVE

KILLED - Session marked to be killed

CACHED - Session temporarily cached for use by Oracle*XA

SNIPED - Session inactive, waiting on the client

有关状态的说明:

(1)active 处于此状态的会话,表示正在执行,处于活动状态。

官方文档说明:

Any session that is connected to the database and is waiting for an event that does not belong to the Idle wait class is considered as an active session.

(2)killed处于此状态的会话,被标注为删除,表示出现了错误,正在回滚。

当然,也是占用系统资源的。还有一点就是,killed的状态一般会持续较长时间,而且用windows下的工具pl/sql developer来kill掉,是不管用的,要用命令:alter system kill session 'sid,serial#' ;

(3)inactive 处于此状态的会话表示不是正在执行的

该状态处于等待操作(即等待需要执行的SQL语句),通常当DML语句已经完成。 但连接没有释放,这个可能是程序中没有释放,如果是使用中间件来连接的话,也可能是中间件的配置或者是bug 导致。

inactive对数据库本身没有什么影响,但是如果程序没有及时commit,那么就会造成占用过多会话。容易是DB 的session 达到极限值。

问了几个朋友,他们的做法是不处理inactive 状态的session, 如果达到了session 的最大值, 就增加processes 和 sessions 参数。 如果kill inactive session 可能会到中间件有影响。 具体中间件这块我也不太熟,等以后弄清楚了,在说。

二. 处理inactive 状态的session

在前面说不处理inactive 状态的session,但是还是有方法来解决的。 有两种方法。

2.1 在 sqlnet.ora文件中设置expire_time 参数

官网有关这个参数的说明:

http://download.oracle.com/docs/cd/B19306_01/network.102/b14213/sqlnet.htm

SQLNET.EXPIRE_TIME

Purpose

Use parameter SQLNET.EXPIRE_TIME to specify a the time interval, in minutes, to send a probe to verify that client/server connections are active. Setting a value greater than 0 ensures that connections are not left open indefinitely, due to an abnormal client termination. If the probe finds a terminated connection, or a connection that is no longer in use, it returns an error, causing the server process to exit. This parameter is primarily intended for the database server, which typically handles multiple connections at any one time.

sqlnet.expire_time 的原理:Oracle Server 发送包探测dead connection ,如果连接关闭,或者不再用,则关闭相应的server process.

Limitations on using this terminated connection detection feature are:

(1)It is not allowed on bequeathed connections.

(2)Though very small, a probe packet generates additional traffic that may downgrade network performance.

(3)Depending on which operating system is in use, the server may need to perform additional processing to distinguish the connection probing event from other events that occur. This can also result in degraded network performance.

Default :0

Minimum Value :0

Recommended Value :10

Example

SQLNET.EXPIRE_TIME=10

2.2 设置用户profile的idle_time 参数

之前整理的一篇有关profile的文章:

Oracle 用户 profile 属性

http://blog.csdn.net/tianlesoftware/archive/2011/03/10/6238279.aspx

注意,要启用idle_time 要先启用RESOURCE_LIMIT参数。 该参数默认是False。 官网说明如下:

RESOURCE_LIMIT

Property

Description

Parameter type

Boolean

Default value

false

Modifiable

ALTER SYSTEM

Range of values

true | false

RESOURCE_LIMIT determines whether resource limits are enforced in database profiles.

Values:

TRUE: Enables the enforcement of resource limits

FALSE:Disables the enforcement of resource limits

如下blog 在这块说的比较清楚,并提供了相关的脚本:

sqlnet.expire_time and IDLE_TIME

http://space.itpub.net/10687595/viewspace-420407

IDLE_TIME Specify the permitted periods of continuous inactive time during a session, expressed in minutes. Long-running queries and other operations are not subject to this limit.

A valid database connection that is idle will respond to the probe packet causing no action on the part of the Server , whereas the resource_limit will snipe the session when idle_time is exceeded. The 'sniped' session will get disconnected when the user(or the user process) tries to communicate with the server again.

-- 通过idle_time限制session idle 时间。session idle超过设置时间,状态为sniped (v$session).,然而OS下的process并不会释放,当session(user process) 再次与server process 通讯,将关闭相应的server process.

What does 'SNIPED' status in v$session mean?

When IDLE_TIME is set in the users' profiles or the default profile. This will kill the sessions in the database (status in v$session now becomes SNIPED) and they will eventually disconnect. It does not always clean up the Unix session (LOCAL=NO sessions).

At this time all oracle resources are released but the shadow processes remains and OS resources are not released. This shadow process is still counted towards the parameters of init.ora.

This process is killed and entry from v$session is released only when user again tries to do something. Another way of forcing disconnect (if your users come in via SQL*Net) is to put the file sqlnet.ora on every client machine and include the parameter "SQLNET.EXPIRE_TIME" in it to force the close of the SQL*Net session

sqlnet.expire_time

sqlnet.expire_time actually works on a different principle and is used to detect dead connections as opposed to disconnecting(actually 'sniping') a session based on idle_time which the profile accomplishes.

But again, as you mentioned, expire_time works globally while idle_time profile works for that user. You can use both of them to make sure that the client not only gets sniped but also gets disconnected if the user process abnormally terminates.

修改示例:

SQL>alter profile default limit idle_time 10;

--需要重启下oracle

查询应用的连接数SQL:

/* Formatted on 2011/6/12 13:06:23 (QP5 v5.163.1008.3004) */

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;

-------------------------------------------------------------------------------------------------------

Blog: http://blog.csdn.net/tianlesoftware

Email: dvd.dba@gmail.com

DBA1 群:62697716(满);   DBA2 群:62697977(满)   DBA3 群:62697850(满)

DBA 超级群:63306533(满);  DBA4 群: 83829929  DBA5群: 142216823

DBA6 群:158654907  聊天 群:40132017   聊天2群:69087192

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

Oracle session active 和 inactive 状态 说明相关推荐

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

    从上周起,服务器Oracle数据库出现问题,用不到半天,就会报maxsession(150)的问题,肯定是数据库的会话超过最大数了.   由于服务器跑的是文件传输应用,占用的请求和会话肯定很大,因此用 ...

  2. 在Oracle中,如何定时清理INACTIVE状态的会话?

    在Oracle中,如何定时清理INACTIVE状态的会话? 一般情况下,少量的INACTVIE会话对数据库并没有什么影响,但是,如果由于程序设计等某些原因导致数据库出现大量的会话长时间处于INACTI ...

  3. 【DB笔试面试702】在Oracle中,如何定时清理INACTIVE状态的会话?

    ♣ 题目部分 在Oracle中,如何定时清理INACTIVE状态的会话? ♣ 答案部分 一般情况下,少量的INACTVIE会话对数据库并没有什么影响,但是,如果由于程序设计等某些原因导致数据库出现大量 ...

  4. oracle commit session,Oracle session总结

    Oracle session总结 收藏 从上周起,服务器Oracle数据库出现问题,用不到半天,就会报maxsession(150)的问题,肯定是数据库的会话超过最大数了. 由于服务器跑的是文件传输应 ...

  5. Oracle:select 或 inactive 会话语句产生锁?

    最近发生的几起 enq: TX - row lock contention 等待事件很怪,通过 blocking session id 查看,不是语句是 select,就是会话是 inactive 的 ...

  6. oracle几个状态,oracle启动的四个状态

    1:oracle启动文件的优先顺序: 1:spfileSID.ora 2:Default SPFILE -->spfile.ora 3: initSID.ora 4: DEFAULT PFILE ...

  7. 如何查看目前所有会话的状态oracle,Oracle一些常用查看数据库状态SQL

    Oracle一些常用查看数据库状态SQL --查看当前连接客户端使用连接数 select   machine, count(machine)  from   sys.v_$session group ...

  8. raid阵列处于Inactive状态的处理办法

    今天检查的时候发现,dell服务器突然启动不了,里面是公司的zabbix服务器,导致无法监控公司的网络及服务器. 启动界面一直提示系统错误,错误界面如下 意识到可能是服务器阵列卡出现问题,拆开服务器, ...

  9. JavaWeb中使用session保持用户登录状态

    使用session保持用户登录状态 // 登录 成功// 保存用户登录的信息到Session域中req.getSession().setAttribute("user", logi ...

最新文章

  1. P1066 2^k进制数 NOIP 2006 提高组 第四题
  2. CVPR2020人脸防伪检测挑战赛冠亚军论文解读(上篇)
  3. 通风与防排烟工程电子书_暖通、通风、防排烟风管如何做抗震设计呢?
  4. 在.net core3.0中使用SignalR实现实时通信
  5. LeetCode 32. Longest Valid Parentheses
  6. 二分查找 java代码实现
  7. 定义整型数组_C++数组的定义与初始化(学习笔记:第6章 01)
  8. 冷藏温度范围_机械式、干冰式、冷板式、液氮式等冷藏车制冷方式横向对比
  9. 洛谷—— P2251 质量检测
  10. 2月中国万网域名总量净增2.1万个 份额突破24%
  11. 网络编程实战之在线电子词典
  12. 能搬砖的游戏有哪些,有哪些比较适合新手去做?
  13. c语言长 短整型有无符号,整型和短整型,有符号和无符号
  14. 微信保存图片查看与清理工具
  15. 安装部署 Kubernetes 仪表板(Dashboard)
  16. [windows]win10家庭版切换到管理员账户
  17. 程序员找工作经历,一个人在上海工作的艰辛
  18. 天翼云服务器安装宝塔面板
  19. 由于文件组 'PRIMARY 中的磁盘空间不足,无法为数据库 'newnet' 分配新页。请删除文件组中的对象、将其他文件添加到文件组或者为文件组中的现有文件启用自动增长,以便增加必要的空间。
  20. 【前端22_混合开发】介绍、初步认识MUI、UI组件、窗口管理

热门文章

  1. 一文读懂RFID固定资产管理软件
  2. 为什么建议大家一定要办一张大流量卡!
  3. 联想笔记本电脑开机黑屏可能是什么原因
  4. 如何看计算机内存使用百分比,如何查看内存条的实际使用频率
  5. 计算机考试打字合格速度,雅思考试使用机考,打字速度决定最终成绩
  6. 打印表格用什么软件好?
  7. 尔雅课程解决网课鼠标移动问题教程
  8. 电动尾门驱动芯片TMI8720-Q1,越来越多的电机已被应用到汽车上
  9. 程序员成长之路(一)
  10. 深度学习--FAISS向量数据库