oracle会话状态,oracle中会话的状态
我們可以通過oracle視圖v$session來查看當前數據庫中的所有會話信息,其中該視圖有一列為status標志會話狀態,oracle官方文檔對這一列定義如下
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
通過我們遇到的都是ACTIVE,INACTIVE,KILLED三種狀態
1、active 會話處于活動狀態,當前session正在執行sql語句
2、inactive會話處于不活動狀態,sql語句已經執行完畢,但是由于某種原因,會話和后臺進程沒有釋放,通過我們在sqlplus中退出和類似plsql developer工具log out或者直接退出,都是直接關閉會話,而不是將會話置于inactive狀態,下面以sqlplus命令為例
[oracle@oracle11g ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Thu May 23 23:09:30 2013
Copyright (c) 1982, 2009, Oracle.? All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select count(*) from v$process;
COUNT(*)
----------
30
SQL>
開啟另一會話窗口,查詢會話數量
SQL>select count(*) from v$session;
查詢結果是27個會話
我們退出之前的會話
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@oracle11g ~]$
再次查詢會話數量,結果是26。說明會話已經釋放。而通常情況下inactive會話比較多的情況下是我們采用jboss,weblogic之類的中間件,建立連接池,而連接使用完畢之后并未釋放連接,仍然將連接放回到連接池的情況。
我本機上采用weblogic連接池,連接到oracle,設置初始連接數量是5,我們通過查詢
SQL> set linesize 150
SQL> select s.SID,s.SERIAL#,s.OSUSER,s.USERNAME,s.STATUS,s.PROGRAM from v$session s where s.STATUS='INACTIVE' and s.USERNAME='TEST';
SID??? SERIAL# OSUSER???????????????????????? USERNAME?????????????????????? STATUS?? PROGRAM
---------- ---------- ------------------------------ ------------------------------ -------- ------------------------------------------------
16???????? 64 Administrator????????????????? TEST?????????????????????????? INACTIVE JDBC Connect Client
21???????? 28 Administrator????????????????? TEST?????????????????????????? INACTIVE JDBC Connect Client
141??????? 164 Administrator????????????????? TEST?????????????????????????? INACTIVE JDBC Connect Client
142???????? 93 Administrator????????????????? TEST?????????????????????????? INACTIVE JDBC Connect Client
145???????? 30 Administrator????????????????? TEST?????????????????????????? INACTIVE JDBC Connect Client
由于會話的創建和釋放都需要耗費一定的資源,應用端往往會通過連接池來緩存會話。如果inactive會話過多,不建議直接kill session,畢竟應用的穩定性是第一位的,可以考慮調整應用連接池的數量,或者考慮增加processes的數量。
3、killed處于此狀態的會話,被標注為刪除,表示出現了錯誤,正在回滾
當然,也是占用系統資源的。還有一點就是,killed的狀態一般會持續較長時間,而且用windows下的工具pl/sql developer來kill掉,是不管用的,要用命令:alter system kill session 'sid,serial#' ; 可以通過此方式來解除死鎖
總結
以上是生活随笔為你收集整理的oracle会话状态,oracle中会话的状态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php padright,[扩展推荐]
- 下一篇: oracle 入参含多个值,oracle