4

オラクルの取り消しプロセスを停止する方法を知りたいですか?大きなテーブルの何百万もの行を削除しようとしましたが、プロセスの途中でセッションを強制終了しましたが、削除を元に戻し始め、約2時間データベースが劇的に遅くなりました。元に戻すプロセスを続行したくありませんでした。それを止める方法はありますか?

4

3 に答える 3

10

トランザクションをロールバックするプロセスを停止することはできません。停止すると、データベースが不整合な状態のままになるためです。

長時間実行される削除プロセスを実行している場合、トランザクションをコミットするかロールバックするかを決定する前に、Oracleは変更されたブロックをデータファイルに書き込む可能性があります。トランザクションの実行中にプロセスを中断した場合、ディスク上のいくつかの変更されたブロック、メモリ内のいくつかの変更されたブロック、およびいくつかの変更されていないブロックがあります。DELETEトランザクションをロールバックすることが、ステートメントの実行を開始する前の状態にデータベースを戻す唯一の方法です。

于 2012-06-28T06:22:50.623 に答える
2

ご存知のように、行ごとの削除プロセスは非常に遅くなる可能性があります。ここでのように、削除がすべて1つのトランザクションで行われる場合、削除はさらに遅くなる可能性があります。次のオプションを検討することをお勧めします。

  1. テーブル内のすべての行を削除する場合は、TRUNCATETABLEステートメントの使用を検討することをお勧めします。

  2. テーブル内のすべての行を削除しない場合は、特定の数の行が削除された後で、プロシージャをCOMMITに変更する必要があります。

それまでの間、ロールバックプロセスが完了するまで待つ必要があります。

共有してお楽しみください。

于 2012-06-28T16:35:17.257 に答える
0

また、テーブルを削除しているときにテーブルを切り捨てようとすると、ORA-00054「リソースがビジーでNOWAITが指定されているか、タイムアウトが期限切れになっている状態で取得」が表示されます。

于 2016-12-01T18:29:26.687 に答える