クエリを停止するには、次の 2 つのことが必要です。
- クエリをキャンセルすることを実際の Oracle プロセスに通知する必要があります。
- クエリが DB (DDL、DML) に変更を加えた場合、作業をロールバックする必要があります。
まず、クエリを実行している Oracle プロセスは、クエリをキャンセルする必要があるかどうかを時々チェックする必要があります。長いタスク (たとえば、大きな HASH JOIN) を実行している場合でも、3 秒ごとにチェックしていると思います (この情報のソースを探しています。見つかったら回答を更新します)。ソフトウェアは Oracle と正しく通信できますか? SLQ Navigator には詳しくありませんが、キャンセル メカニズムは他のツールと同じように機能するはずなので、2 番目のポイントを待っていると思います。
プロセスが動作を停止するように通知されると、このクエリで既に完了したすべてを元に戻す必要があります (Oracle ではすべてのステートメントはアトミックであり、ロールバックせずに途中で停止することはできません)。ほとんどの場合、DML ステートメントでは、ロールバックは既に完了した作業よりも時間がかかります (私は次のように考えています: Oracle は後方ではなく前方に動作するように最適化されています)。この場合 (大きな DML)、ロールバック中は辛抱強く待つ必要があります。プロセスを高速化するためにできることはあまりありません。
クエリが単純な SELECT であり、ツールでキャンセルできない場合は、セッションを強制終了できます (別のセッションからの管理者権限が必要です)。これは瞬時に行われます。