UJP - 技術情報

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

     

Oracleのセッションを殺す

Oracleのセッションを殺す


0.改訂履歴

  • 2003.07.17 新規作成

1.はじめに

 このドキュメントでは,Oracleにて不要なセッションを殺す手順を説明する.

 なお,使用しているOracleは,WindowsNT上で稼働しているOracle8i 8.0.5 Workgroup Serverである.

2.セッションを殺す

  • 現在のセッションを確認する.
SQL> select sid,serial#,status,osuser
  2  from v$session where status='INACTIVE';

       SID    SERIAL# STATUS   OSUSER
---------- ---------- -------- ---------------
         8        690 INACTIVE SYSTEM
         9        700 INACTIVE SYSTEM
        23         20 INACTIVE root
        25         14 INACTIVE root
        33         23 INACTIVE root
        35        451 INACTIVE root
        37         19 INACTIVE root
        41         92 INACTIVE root
        85         14 INACTIVE SYSTEM
       109      10796 INACTIVE Administrator
       110       5195 INACTIVE root

11行が選択されました。

SQL>
  • 今回は,この41番のセッションを殺す.
  • セッションを殺す際には,SERIAL#値も必要である.
  • 次のように殺してみる.
SQL> alter system kill session '41,92';

システムが変更されました。

SQL>
  • そっけない.
  • 殺したセッションの状態を確認する.
SQL> select sid,serial#,status,osuser
  2  from v$session where SID='41';

       SID    SERIAL# STATUS   OSUSER
---------- ---------- -------- ---------------
        41         92 KILLED   root

SQL>
  • ステータスがKILLEDとなっているプロセスが居る事が確認できる.
  • タイミングによっては確認できない事もある.

3.ステータスがKILLEDの人

  • alter systemでセッションを殺したのに,v$sessionビューでステータスがKILLEDとなって表示される人が居る場合がある.
  • このKILLEDの状態は,次の通り.
    • セッションは終了している.
    • プロセスが生きている.
  • この人は,ネットワークのセッション,たとえばTCP/IPの接続が無くなった時にプロセスも消えてくれるようになる.
  • ステータスKILLEDのプロセスが消えるのは次のタイミング.
    • keepaliveを経過したタイミング.
    • 接続元(クライアント)のプロセスが死んだ時
  • もしかすると,しばらく待つだけでセッションが停止するかもしれない.
  • 5分ほど経過を見て,消えているか確認.
SQL> select sid,serial#,status,osuser
  2  from v$session where SID='41';

レコードが選択されませんでした。

SQL> 
  • 消えていない場合は,クライアント側のプログラムの状態を参照し,それでも判らない場合は最悪Oracleのリブートで消せる.


広告スペース
Google