オラクルの取り消しプロセスを停止する方法を知りたいですか?大きなテーブルの何百万もの行を削除しようとしましたが、プロセスの途中でセッションを強制終了しましたが、削除を元に戻し始め、約2時間データベースが劇的に遅くなりました。元に戻すプロセスを続行したくありませんでした。それを止める方法はありますか?
3 に答える
トランザクションをロールバックするプロセスを停止することはできません。停止すると、データベースが不整合な状態のままになるためです。
長時間実行される削除プロセスを実行している場合、トランザクションをコミットするかロールバックするかを決定する前に、Oracleは変更されたブロックをデータファイルに書き込む可能性があります。トランザクションの実行中にプロセスを中断した場合、ディスク上のいくつかの変更されたブロック、メモリ内のいくつかの変更されたブロック、およびいくつかの変更されていないブロックがあります。DELETE
トランザクションをロールバックすることが、ステートメントの実行を開始する前の状態にデータベースを戻す唯一の方法です。
ご存知のように、行ごとの削除プロセスは非常に遅くなる可能性があります。ここでのように、削除がすべて1つのトランザクションで行われる場合、削除はさらに遅くなる可能性があります。次のオプションを検討することをお勧めします。
テーブル内のすべての行を削除する場合は、TRUNCATETABLEステートメントの使用を検討することをお勧めします。
テーブル内のすべての行を削除しない場合は、特定の数の行が削除された後で、プロシージャをCOMMITに変更する必要があります。
それまでの間、ロールバックプロセスが完了するまで待つ必要があります。
共有してお楽しみください。
また、テーブルを削除しているときにテーブルを切り捨てようとすると、ORA-00054「リソースがビジーでNOWAITが指定されているか、タイムアウトが期限切れになっている状態で取得」が表示されます。