有時候,Oracle終止當前的session是必要的。例如,你想執行一個管理操作,需要終止所有非管理員的session。下面描述的是終止session的各個方面,包括以下:
1.標識哪些session需要終止
2.終止一個Active Session
3.終止一個Inactive Session
當一個session被終止,session的任何活動交易回復,並且立即釋放所有的資源,比如locks and memoryareas。
使用ALTERSYSTEM KILL SESSION終止一個會話。下面的例句sid 7,serial# 15:
ALTER SYSTEMKILL SESSION '7,15';
1. 標識哪些session需要終止
為了標識需要終止的session,需要知道session的sid和serial#,可以查詢v$session得到。例如,下面的查詢標識了使用者wxlun的所有session:
SQL> SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE USERNAME ='WXLUN';
SID SERIAL#STATUS
---------- ---------- --------
81 19713 ACTIVE
95 27537 INACTIVE
當一個session正在調用資料庫,session狀態為ACTIVE,當一個session非正在調用資料庫,session狀態為INACTIVE。
2. 終止一個Active Session
如果一個使用者session正在處理事務(ACTIVE),終止這個會話,則交易回復,使用者立即收到下面的資訊:
ORA-00028: your session has been killed
如果,接到ORA-00028錯誤後,再重新串連資料庫前繼續執行語句,oracle會返還下面的資訊:
ORA-01012: not loggedon(使用不同的工具串連到資料庫可能收到的資訊不同,但是類似,都是指和庫的session斷了)
當一個session正在執行網路I/O或者交易回復時,是不能終止的。這類session只能等操作完成才可以終止。這種情況下,直到session終止,資源才會釋放。另外,發出ALTERSYSTEM去終止session的會話,等待60秒後沒有終止session,會收到一個資訊表明session已標識為終止。被標記為終止的session在v$seession的status為KILLED,某些終止服務status可能為PSEUDO。
3. 終止一個Inactive Session
如果終止一個InactiveSession,並不會立即收到ORA-00028錯誤。直到使用者接著使用被終止的session才會收到ORA-00028錯誤。
當一個inactivesession,session的status變成KILLED,當使用者再次使用這個session和收到ORA-00028錯誤,這個終止的session會從v$session刪除。
下面是一個終止inactive session的例子。
SQL> SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE USERNAME ='WXLUN';
SID SERIAL#STATUS
---------- ---------- --------
95 27591 INACTIVE
SQL> alter system kill session '95,27591';
System altered.
SQL> SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE USERNAME ='WXLUN';
SID SERIAL#STATUS
---------- ---------- --------
95 27591 KILLED
SQL>
快速找到跟蹤其他session產生的trc檔案
Oracle 徹底 kill session
MySQL主從故障處理--session 層級參數複製錯誤
如何查看Oracle資料庫的session阻塞