Oracle 重いクエリのキャンセル
ついうっかり流したSQLが一向に返ってこないとき。
Oracle開発の時、SQL Developer使うことがあるんですが
SQL Developerでタスクの削除ボタンを押しても
クエリは後ろで走っているんですね。
直接SQLでセッションを落としてしまう方法で対処できます。
対処方法
sql*plusなどで接続します。
該当セッションと同じユーザかsystemユーザあたりがよいでしょう。
以下のSQLで現在のセッションの状態を確認できます。
set linesize 500 select sid, serial#, username, program from v$session where username = 'ユーザ名';
結果はこんな感じで出てきます
SID SERIAL# USERNAME PROGRAM ---------- ---------- ------------------------------ ---------------------------------------------------------------- 16 10751 hoge SQL Developer 18 817 hoge SQL Developer 25 312 hoge XXXX.exe 26 309 hoge SQL Developer 28 34321 hoge SQL Developer 35 12748 hoge XXXX.exe 40 162 hoge SQL Developer 43 181 hoge SQL Developer 57 527 hoge SQL Developer 70 2361 hoge SQL Developer 72 12150 hoge SQL Developer
取得したSIDとSERIAL#の値を使ってセッションを落とすことができます。
こんな感じですね。
alter system kill session '16, 10751';
SQLDeveloper側は上のSQLが実行されると同時にクエリ待ちがストップすると思います。
ただ、接続Session自体がなくなっているので
一旦SQLDeveloperから再接続する必要があります。