Oracle 重いクエリを投げてしまってキャンセルしたい時


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から再接続する必要があります。

 

 

 

 


Tagged on: , ,

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です