v$session中LAST_CALL_ET引數的理解
在實際的資料庫應用中,我們經常遇到這樣一個問題,連線到Oracle資料庫的使用者在作了一次操作後,再也沒有後續操作,但卻長時間沒有和資料庫斷開連線。最近在研究一箇中介軟體到資料庫中的長連線異常問題,查詢到v$session中LAST_CALL_ET引數,覺得這個引數很有用,下面是自己的一點理解:
1. 引數定義
LOGON_TIME 是一個日期型(Date)欄位,為使用者登陸時間;
LAST_CALL_ET是一個數字型(Number)欄位,其含義是使用者最後一條語句執行完畢後到sysdate的時間,單位為秒。每次使用者執行一個新的語句後,該欄位復位為0,重新開始記數。我們可以透過該欄位來獲得一個連線使用者最後一次運算元據庫後的空閒時間。
針對這兩個引數定義的測試:
SQL> conn system/oracle@devdb2;
已連線。
SQL> select ses.SID,ses.username,ses.machine,ses.program,ses.last_call_et,sql.hash_value,sql.sql_text
from v$session ses, v$sql sql
where ses.sql_hash_value = sql.hash_value(+)
and ses.PROGRAM = 'sqlplus.exe'
SID | USERNAME | MACHINE | PROGRAM | LAST_CALL_ET | HASH_VALUE | SQL_TEXT |
132 | SYSTEM | ZDC\BEILEI | sqlplus.exe | 3(登陸後的時間) |
SQL> select count(*) from user_object_size;
SID | USERNAME | MACHINE | PROGRAM | LAST_CALL_ET | HASH_VALUE | SQL_TEXT |
132 | SYSTEM | ZDC\BEILEI | sqlplus.exe | 24(sql執行的時間) | 178228611 | select count(*) from user_object_size |
SQL> select count(*) from user_object_size;
COUNT(*)
----------
20
SID | USERNAME | MACHINE | PROGRAM | LAST_CALL_ET | HASH_VALUE | SQL_TEXT |
132 | SYSTEM | ZDC\BEILEI | sqlplus.exe | 1(sql執行完,引數復位0,重新開始計算到sysdate的時間/s) |
2. 識別超過一定空閒時間的連線
select username,logon_time,last_call_et,
to_char(sysdate-(last_call_et/(60*60*24)),'hh24:mi:ss') last_work_time
from v$session
where username is not null;
select ses.username,ses.machine,ses.program,ses.last_call_et,sql.hash_value,sql.sql_text
from v$session ses, v$sql sql
where ses.sql_hash_value = sql.hash_value
and ses.last_call_et > 600
and ses.type = 'USER'
SELECT s.username 使用者名稱稱, s.status 狀態,s.machine 機器名稱,
osuser 作業系統使用者名稱稱,spid UNIX程式號,
'kill -9 '||spid UNIX級斷開連線,
'alter system kill session ' ||''''||s.sid||',
'||s.serial# || ''';' Oracle級斷開連線,
TO_CHAR (logon_time, 'dd/mm/yyyy hh24:mi:ss') 登陸時間,
last_call_et 空閒時間秒,
TO_CHAR (TRUNC (last_call_et / 3600, 0))||' '||' HRS '||
TO_CHAR (TRUNC ((last_call_et - TRUNC(last_call_et / 3600, 0) * 3600) / 60, 0) ) ||' MINS' 空閒時間小時分鐘,
module 模組
FROM v$session s, v$process p
WHERE TYPE = 'USER'
AND p.addr = s.paddr
AND status != 'KILLED'
-- AND SUBSTR (machine, 1, 19) NOT IN ('機器名')
AND last_call_et > 60 * 60 * 1-- 空閒時間超過1小時的連線
ORDER BY last_call_et desc;
select sid,username,status,
to_char(logon_time,'dd-mm-yy hh:mi:ss') "LOGON",
floor(last_call_et/3600)||':'||
floor(mod(last_call_et,3600)/60)||':'||
mod(mod(last_call_et,3600),60) "IDLE",
program
from v_$session
where type='USER'
order by last_call_et;
select s.process, s.sid, t.sql_text
from gv$session s, gv$sql t
where s.sql_address =t.address
and s.sql_hash_value =t.hash_value
--and s.program like '%JDBC%'
and s.last_call_et > 600
and s.status = 'ACTIVE'
個人認為還是查清楚這些異常連線的原因,不要輕易的kill掉這些會話。
參考文獻:
Subject: | Removing Sessions in Killed Status on Unix | |||
: | 274216.1 | Type: | BULLETIN | |
Modified Date : | 11-NOV-2008 | Status: | PUBLISHED |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9252210/viewspace-594290/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於v$process與v$session中process的理解Session
- oracle中的processes,session,transaction引數OracleSession
- session bean中的session如何理解?SessionBean
- oracle中的processes,session,transaction引數詳解OracleSession
- v$session中的serverSessionServer
- oracle中引數session和 processes的設定(轉)OracleSession
- 【SESSION】v$session and v$license 中sessions_current 的區別Session
- 1.5 - Numpy的方法中,axis引數的理解
- 理解V$OPEN_CURSOR, V$SESSION_CACHED_CURSORSession
- Oracle V$SESSION中的常用列OracleSession
- [zt] 理解V$OPEN_CURSOR, V$SESSION_CACHED_CURSORSession
- 引數SESSION_CACHED_CURSORSSession
- 解決requests庫中session.verify引數失效的問題Session
- 理解V$OPEN_CURSOR,SESSION_CACHED_CURSORSession
- jmeter 引數理解JMeter
- 【Oracle】-【v$session】v$session的SNIPED狀態OracleSession
- 淺談對python pandas中 inplace 引數的理解Python
- 深入理解RabbitMQ中的prefetch_count引數MQ
- RAC中對DB引數檔案的簡單理解
- PostgreSQL 14中連線引數target_session_attrs增強SQLSession
- v$process和v$session中欄位解釋Session
- oracle等待引數含義_v$session_wait_p1_p2_p3OracleSessionAI
- 【Data Pump】理解expdp中的ESTIMATE和ESTIMATE_ONLY引數
- linux,mtime引數的理解Linux
- V$SESSIONSession
- 深度理解Oracle10g中UNDO_RETENTION引數的使用Oracle
- 深入理解mysql引數MySql
- spring boot 讀寫引數到sessionSpring BootSession
- [20171120]理解v$session的state欄位Session
- 關於 groutine 喚醒中 skipframes 引數不理解
- C#中的值引數,引用引數及輸出引數C#
- v$session的解釋Session
- v$session的來源Session
- v$session表的妙用Session
- V$session 表的妙用Session
- MTS方式連線V$SESSION中的SERVER狀態SessionServer
- v$session中command欄位的含義解析Session
- V$ACTIVE_SESSION_HISTORY 檢視中包含的資訊Session