【Oracle】-【v$session】v$session的SNIPED狀態
現象:
以前一直未出現過這種狀態:
有的應用(這裡部署的應用有100多個,且都是Tuxedo長連線資料庫 的應用)每天第一次執行時報:ORA-02396: exceeded maximum idle time, please connect again
過段時間會有應用報錯:ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit,此時也無法登入資料庫了。
測試庫資訊:
版本:9.2.0.7.0
判斷問題思路:
SELECT * FROM v$session WHERE username='STAR' ORDER BY status;
檢視有許多都是SPINED狀態的。
用下面的語句產生的kill -9 ...會提示no such process或invalid id,SPID不是OS程式的ID麼?
SELECT s.username,s.status,s.machine,osuser,spid,
'kill -9 '||spid UNIX_level_kill,
'alter system kill session ' ||''''||s.sid||','||s.serial# || ''';' Oracle_level_kill,
TO_CHAR (logon_time, 'dd/mm/yyyy hh24:mi:ss') logon_time,
last_call_et idle_time,
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' idle_time_hour_minute,
module
FROM v$session s, v$process p
WHERE TYPE = 'USER'
AND s.username='STAR'
AND p.addr = s.paddr
AND status = 'SNIPED'
-- AND SUBSTR (machine, 1, 19) NOT IN ('machine')
AND last_call_et > 60 * 60 * 2
-- session idle time more than 1 hour
ORDER BY last_call_et desc;
問題的原因:
就是由於設定了資源計劃這種profile,idle_time是60分鐘,sessions_per_user是60。
解決方法:
最直接的就是將該使用者的profile改為DEFAULT,若不修改預設,則DEFAULT的idle_time和sessions_per_user都是unlimited。
再解釋下v$session中:
SPINED狀態的session問題,根據@dbsnake大拿的意思,這種狀態是Oralce自身判斷需要kill -9幹掉OS進城後的狀態,但該session還在v$session,這時只能用alter system幹掉該session。至於上述"SPID不是OS程式的ID麼"的問題,則是因為Oracle內部已經用kill -9幹掉該程式了,那當然提示no such process等錯誤。
KILL狀態的session,是使用alter system從Oracle級幹掉的session,等待事務回滾。
INACTIVE狀態表示當前的這個session處於非活動狀態,比如開啟一個PLSQL但沒有操作。
ACTIVE表示正處於active,例如當前在一個PLSQL的SQL Window。
說明:
處於SNIPED的session,例如用PLSQL登陸的超時了,被kill -9,此時不要重新登入,只需要執行一條SQL,它會報錯,此時從另一個session看該SNIPED的session被清空了,否則需要用alter system刪除該session。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-767161/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- session的狀態什麼時候是snipedSession
- MTS方式連線V$SESSION中的SERVER狀態SessionServer
- (轉):學習Oracle動態效能表-(9)-V$SESSION_WAIT,V$SESSION_EVENTOracleSessionAI
- V$SESSIONSession
- Oracle V$SESSION中的常用列OracleSession
- Oracle V$SESSION_WAITOracleSessionAI
- session和v$session說明Session
- 【SESSION】v$session and v$license 中sessions_current 的區別Session
- v session_wait v session_event v system_eventSessionAI
- v$session_event , v$system_event , v$session_waitSessionAI
- Oracle 動態效能表 v$session & v$process各個欄位的說明OracleSession
- (轉):學習Oracle動態效能表-(8)-V$SESSIONOracleSession
- v$session的blocking_session含義SessionBloC
- v$session的解釋Session
- v$session的來源Session
- v$session中的serverSessionServer
- v$session表的妙用Session
- V$session 表的妙用Session
- v$session_wait和v$session_event檢視SessionAI
- 【Oracle】-【SNIPED和KILLED】-SPINED和KILLED的session清理流程OracleSession
- 10.17 V$SESSIONSession
- V$SESSION COMMANDSession
- v$Session詳解Session
- v$session 檢視Session
- 學習動態效能表(五)-v$sessionSession
- 學習動態效能表(五)--V$SESSIONSession
- [轉] V$session 表的妙用Session
- V$session 表的妙用^_^(轉)Session
- Oracle動態效能檢視學習筆記(7)_v$sessionOracle筆記Session
- Oracle動態效能檢視之v$session_longops ztOracleSessionGo
- 幾個檢視 v$mystat v$systata v$sessionSession
- V$SESSION記錄的BLOCKING_SESSION錯誤SessionBloC
- v$action_session_historySession
- V$SESSION_LONGOPSSessionGo
- V$SESSION_WAITSessionAI
- 10G V$SESSIONSession
- 幾個重要檢視(V$SYSTEM_EVENT V$SESSION_EVENT V$SESSION_WAIT)SessionAI
- Oracle等待檢視v$session_waitOracleSessionAI