HOME >> Tips >> Oracle Tips >> SQL

セッションの一覧を取得し、不要なセッションを強制終了する(ALTER SYSTEM KILL SESSION)

 
文書番号:20530

なかなか返ってこない、いや、もう返ってこないだろうというSQL を実行してしまったとき、それを実行したツールやアプリケーションを強制終了しても Oracleの中では延々と動いていたりします。

そのようなときは元のセッションを強制終了(KILL)するしかありません。



まず、セッションの一覧を取得して SID と SERIAL# を確認します。
現在のスキーマ名を指定して問題のセッションを確認します。


SELECT SID
      ,SERIAL#
      ,MACHINE
      ,PROGRAM
FROM   V$SESSION
WHERE  SCHEMANAME = '<スキーマ名>'
確認した SID と SERIAL# を指定してセッションを KILL します。

ALTER SYSTEM KILL SESSION '<SID>,<SERIAL#>' IMMEDIATE;

例:SID が「155」、SERIAL# が「51095」の場合
ALTER SYSTEM KILL SESSION '155,51095' IMMEDIATE;


上記のコマンドでセッションを強制終了し、状態が「KILLED」になったにもかかわらず一覧から削除されない場合、 何らかの不具合を起こして終了できない状態になっている可能性があります。
この状態になるとCPU使用率が上がり、他のセッションにも影響を与える可能性があります。

このような状況になった場合は「orakill」コマンドで更に強い強制終了を行うことができます。
ただし、このコマンドは推奨されているものではありませんので使用は最低限にした方がよさそうです。

まずは状態が「KILLED」になっているセッションの一覧を取得します。

SELECT spid
      ,s.sid
      ,s.serial#
      ,s.status 
      ,osuser
      ,s.program
      ,s.username
      ,s.event 
FROM   v$process p
LEFT OUTER JOIN v$session s 
ON  p.addr = s.paddr 
WHERE  s.status = 'KILLED';
orakill コマンドはSQL のコマンドや SQLPlus のコマンドではなくコマンドラインツールです。
Oracle データベースサーバーがインストールされた環境で実行する必要があります。

orakill <sid> <プロセスID>

上記「sid」はOracleインスタンスのSID、プロセスIDは「v$process.spidを指します。
例:
orakill ORCL 178

クリックで拡大