STATUS

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 达到极限值。

解决方法:

1 SQLNET.EXPIRE_TIME (适当设置大小)
2 alter profile default limit idle_time 5;

根据下列SQL,再根据应用服务器主机名,可判断应用的连接数情况:

SELECT b.MACHINE, b.PROGRAM, COUNT (*)
FROM v$process a, v$session b

WHERE a.ADDR = b.PADDR AND b.USERNAME IS NOT NULL
ADN A.TYPE !='BACKGROUND'
and a.status in ('ACTIVE','INACTIVE')
GROUP BY b.MACHINE, b.PROGRAM
ORDER BY COUNT (*) DESC;