田舎のパパが日常で感じた気になる話を発信するブログです。

気になるボックス

データベース

[Oracle]強制終了したセッションが「killed」で残ってしまう場合の対処方法

投稿日:

POPOLOGです。Oracleのセッションの強制終了しようとしても残ってしまって消えないことがあります。以前は諦めていたのですが、意外と簡単に消すことができることが分かりました。

スポンサーリンク

「KILLED」で残ってしまう・・・

[alter system kill session]コマンドを実行してもクライアント側で何らかアクションを起こしてエラーが発生するまでは「killed」で残ってしまいます。

「immediate」オプションで大抵は解決

「immediate」オプションを指定すると、セッションの始末後、すぐにユーザーに制御を戻すに指示します。大抵の場合はこれで解決します。

alter system kill session 'nn,nn' immediate;

最終手段は[orakill]コマンド

それでも残ってしまう場合はDBサーバのプロセスを終了させる必要があります。SQLではなくコマンドプロンプト上で[orakill]コマンドを実行する必要があります。

あまり推奨されていないコマンドのようですが・・・

[orakill]コマンドの生成SQL

下記のSQLを実行すると[orakill]コマンドを取得できます。

SELECT
 SES.MACHINE
 , SES.PROGRAM
 , SES.STATUS
 , 'orakill orcl ' || P.SPID
FROM
 V$SESSION SES
 , V$PROCESS P
WHERE
 SES.PADDR = P.ADDR (+)
AND SES.TYPE = 'USER'
AND SPID IS NOT NULL
ORDER BY SES.PROGRAM

SQLの実行結果です。最後の列の値が実際に実行するコマンドになります。

MACHINE PROGRAM STATUS COMMAND
MACHINE01 EXCEL.EXE INACTIVE orakill orcl 31652
MACHINE02 EXCEL.EXE INACTIVE orakill orcl 33452
MACHINE03 EXCEL.EXE INACTIVE orakill orcl 31204
MACHINE04 EXCEL.EXE INACTIVE orakill orcl 31988

DBサーバー上で[orakill]コマンドを実行する

DBサーバーでコマンドプロンプトを開き、先程取得したコマンドを実行します。

これで暫くするとセッションが強制終了します。

おわりに

なんちゃってEUCで広がっているお行儀の悪いプログラムも、これで一網打尽です。

ではでは。

-データベース
-

Copyright© 気になるボックス , 2016 AllRights Reserved Powered by AFFINGER4.