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#' ; 可以通過此方式來解除死鎖
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7483882/viewspace-761887/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Oracle中,如何定時清理INACTIVE狀態的會話?Oracle會話
- 大話狀態協程
- oracle的會話如何自殺?Oracle會話
- ?ORACLE會話超時Oracle會話
- Oracle buffer狀態深入剖析Oracle
- Oracle阻塞會話查詢Oracle會話
- Oracle SCN健康狀態檢查Oracle
- Oracle DG 管理Broker配置成員的狀態Oracle
- oracle rac的scan監聽狀態Not All Endpoints RegisteredOracle
- SQLServer會話KILL不掉,一直處於KILLED/ROLLBACK狀態情形淺析SQLServer會話
- 死鎖避免中的安全狀態和不安全狀態
- React Native 中的狀態列React Native
- Blazor中的無狀態元件Blazor元件
- oracle RAC 診斷叢集狀態命令Oracle
- Oracle DG資料庫狀態轉換Oracle資料庫
- Unity【話大】設計模式之狀態模式Unity設計模式
- java中WAITING狀態的執行緒為啥還會消耗CPUJavaAI執行緒
- ORACLE 12c索引分裂引起的會話夯Oracle索引會話
- 恢復oracle的scott使用者初始狀態操作Oracle
- 深入理解Flink中的狀態
- 【架構設計】無狀態狀態機在程式碼中的實踐架構
- oracle 會話(session)被鎖瞭解決方法Oracle會話Session
- VCS中檢查Cluster中節點的狀態
- 同一會話中的多個 WebRequest會話Web
- Oracle更改預設日期格式 更改會話日期格式Oracle會話
- ORACLE會話連線程式三者總結Oracle會話線程
- Oracle:select 或 inactive 會話語句產生鎖?Oracle會話
- 在oracle中跟蹤會話執行語句的幾種方法Oracle會話
- 我理想中的狀態管理工具
- [譯] Flutter 中的原生應用程式狀態Flutter
- 如何直觀的在JavaScript中管理狀態JavaScript
- Web3開發中的狀態同步Web
- Shell 指令碼中的exit狀態解釋指令碼
- Flutter 中如何保持Tabbar和TabbarView的狀態?FluttertabBarView
- Jtti:linux怎麼檢視oracle資料庫的執行狀態JttiLinuxOracle資料庫
- oracle redo各種狀態(inactive、active、current)損壞的處理方式Oracle Redo
- 淺談前端的狀態管理,以及anguar的狀態管理庫前端
- php中關於會話機制的理解PHP會話
- 無廢話設計模式(14)結構型模式--狀態模式設計模式