SQLの実行結果がなかなか返ってこない・・・
「これで完璧!!」と自信を持って実行したSQL文。実は結合条件が甘く、待てど暮せど結果が返ってこない。こんな経験はありませんか?
こうなるとOracleは同一セッションでの動作を受け付けなくなり、ただただディスプレイの前でSQL結果が返るのを待つか、なんとかして実行中のSQLを止めるしかありません。このようなケースは、開発中には頻繁に起こりえます。
ALTER SYSTEM KILL SESSION
実行中のSQLを止めるには、「ALTER SYSTEM KILL SESSION」を発行する方法があります。SQL実行中のセッションIDとシリアルNOを指定して実行すると、そのセッションを停止することができ、結果としてSQLも強制終了させることが可能です。SI Object Browser for Oracle 18(以下OB)でも、セッション画面から同様の処理を行うことができます。メニューバー → 管理 → セッション情報と進み、該当のセッションを右クリックし、「切断」を選びます。
ALTER SYSTEM CANCEL SQL
Oracle 18cより以前は、上記が常套手段として認知されていましたが、Oracle18cから、「ALTER SYSTEM CANCEL SQL」が使用可能になっています。これを発行することで、実行中のSQLをキャンセルすることができます。もちろんOBでも使用可能です。操作の説明を兼ねてちょっとした実験をしてみましょう。
まず、OBを2つ立ち上げます。片方で、「終わらないSQL」を擬似的に再現するため、下記のSQLを実行します。
DECLARE |
これは、INTERVALのあとに指定した秒数だけ処理が繰り返される簡単な命令です。今回は1000秒指定しました。
実行したOBは処理結果待ちの状態になります。もうひとつのOBで、先程のセッション情報画面を開きます。該当のSQLを実行しているセッションを右クリックし、「SQLのキャンセル」を選びます。
「SQLのキャンセル」の実行
その後出力されるダイアログで「はい」を選択すれば、こちら側の処理は終了です。SQLを実行したOBに戻ってみましょう。
実行側のOBでは、「ORA-01013:ユーザーによって現行の操作の取り消しがリクエストされました」 のメッセージが出力されています。OBの操作も復帰しており、SQLが中断されたことがわかります。
SQLがキャンセルされた
[RELATED_POSTS]
Oracle 実行中のSQLをストップしてみる まとめ
いかがでしたか。今までSQLを停止させる常套手段とされてきたALTER SYSTEM KILL SESSION ですが、これはセッションごと終了させてしまうため該当のSQLだけでなくそれ以外の操作も全て終了してしまうという、何かと不便な点がありました。ALTER SYSTEM CANCEL SQLであれば現在実行中のSQLのみ終了させることができます。接続し直さなくて済むので、展開中のデータなどはそのままに作業に戻ることができ効率的です。是非活用しましょう。
- カテゴリ:
- キーワード: