close


有些時候,當Client 端不正常結束時,會造成session 殘留在DB裡,為了避免影響到DB的效能,必須手動將這些session kill

1. 找出要kill 的session

kill session 算是一件危險的動作,所以在kill 之前要先確認一下哪些session 是可以kill 的,避免刪除到不該刪除的session, Oracle提供了v$session,gv$session這兩個view 來查詢session

在不是RAC的環境下,只需要查詢v$session 即可

SELECT S.SID, S.SERIAL#, S.USERNAME, S.OSUSER , S.MACHINE, S.PROGRAM , P.SPID
FROM  V$SESSION S ,  V$PROCESS P 
WHERE S.PADDR = P.ADDR  AND S.TYPE !='BACKGROUND' AND S.OSUSER !='oracle'


  SID    SERIAL#     SPID  USERNAME           OSUSER   MACHINE          PROGRAM  SPID
----- ---------- -------- --------- ---------------- --------- ---------------- -----
   30         15     3859      TEST    Administrator    VM     JDBC Thin Client   345
   23        287     3834       SYS    Administrator    VM     JDBC Thin Client   593

如果是RAC的環境,需要改查gv$session

SELECT S.INST_ID, S.SID, S.SERIAL#, S.USERNAME, S.OSUSER , S.MACHINE, S.PROGRAM , P.SPID
FROM  GV$SESSION S ,  GV$PROCESS P 
WHERE S.PADDR = P.ADDR  AND S.TYPE !='BACKGROUND' AND S.OSUSER !='oracle'

   INST_ID  SID    SERIAL#     SPID  USERNAME           OSUSER   MACHINE          PROGRAM  SPID
--------------- ---------- -------- --------- ---------------- --------- ---------------- -----
         1   30         15     3859      TEST    Administrator    VM     JDBC Thin Client   345
         1   23        287     3834       SYS    Administrator    VM     JDBC Thin Client   593

2. Kill Session Syntax

一般環境下kill session syntax如下

SQL> ALTER SYSTEM KILL SESSION 'sid,serial#';

在RAC的環境下kill session 要加上INST_ID

 ALTER SYSTEM KILL SESSION 'sid,serial#,@inst_id';

一般情況下kill session 指令並不會真正的刪除session, 而是要求session 自行刪除,但在某些情況session並不會自行刪除,例如session 正在rollback transaction,此時可以透過immediate參數來強制刪除session

 ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;

3. DISCONNECT SESSION Syntax

disconnect session 和 kill ssession 的作用很類似,不同在於disconnect session 刪除server process

 ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' POST_TRANSACTION;
 ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' IMMEDIATE;

POST_TRANSACTION 參數會等待正在執行的transcation執行完畢

IMMEDIATE參數會強制結束server process

4. Kill O.S. process

kill session 之後,有時process 會殘留在O.S.上, 這個時候就需要透過O.S.的指令來刪除殘留的porcess

Windows

C:> orakill ORACLE_SID spid

Unix/Linux

% kill spid

% kill -9 spid
arrow
arrow
    文章標籤
    [學習筆記][Oracle]Database
    全站熱搜

    rickyju 發表在 痞客邦 留言(1) 人氣()