Oracleのセッションを殺す
Oracleのセッションを殺す
0.改訂履歴
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のリブートで消せる.