67

SQLの「テーブルの切り捨て」コマンドをトランザクション内で使用できますか?アプリを作成していますが、テーブルには大量のレコードがあります。すべてのレコードを削除したいのですが、アプリが失敗した場合、トランザクションをロールバックすることになりました。各レコードの削除には非常に長い時間がかかります。テーブルの切り捨てを使用するかどうか疑問に思っていますが、障害が発生した場合でもトランザクションをロールバックしてデータを取り戻すことはできますか?切り捨てテーブルはトランザクションログに各削除を書き込まないことを認識していますが、ロールバックが機能するようにページの割り当て解除をログに書き込むかどうか疑問に思っています。

4

2 に答える 2

69

SQL Serverでは、トランザクションからTRUNCATEをロールバックできます。あなたが言ったように、それはログにページの割り当て解除を書き込みます。

于 2009-10-05T23:44:28.090 に答える
22

Oracleでは、TRUNCATE TABLEはトランザクションで使用できない(より正確にはロールバックできない)DDLステートメントです。AFAIK、ステートメントの実行時に進行中のトランザクションがある場合、トランザクションはコミットされてからTRUNCATEが実行され、元に戻すことはできません。

Informixでは、TRUNCATEの動作が少し異なります。トランザクションでTRUNCATEを使用できますが、それ以降に許可されるステートメントはCOMMITとROLLBACKのみです。

他のDBMSは、おそらくTRUNCATETABLEの動作について独自の特異な解釈を持っています。

于 2009-10-05T23:49:57.250 に答える