ROLLBACK

目的

ROLLBACK文を使用すると、現行のトランザクションで実行された処理を取り消すことができます。また、インダウト分散トランザクションで実行された処理を手動で取り消すこともできます。

ノート:

アプリケーション・プログラムでは、COMMITまたはROLLBACK文を使用してトランザクションを明示的に終了することをお薦めします。トランザクションを明示的にコミットせずにプログラムが異常終了した場合、コミットされていない最後のトランザクションがロールバックされます。

関連項目:

前提条件

現行のトランザクションをロールバックする場合、権限は不要です。

コミットしたインダウト分散トランザクションを手動でロールバックする場合は、FORCE TRANSACTIONシステム権限が必要です。他のユーザーがコミットしたインダウト分散トランザクションを手動でロールバックする場合は、FORCE ANY TRANSACTIONシステム権限が必要です。

構文

セマンティクス

WORK

WORKキーワードの指定は任意です。このキーワードは、SQL規格との互換性のために提供されています。

TO SAVEPOINT句

現行のトランザクションをロールバックするセーブポイントを指定します。この句を指定しない場合、ROLLBACK文によってトランザクション全体がロールバックされます。

TO SAVEPOINT句を指定しないでROLLBACKコマンドを実行すると、次の処理が行われます。

  • トランザクションの終了

  • 現行のトランザクションに対するすべての変更の取消し

  • トランザクション内のすべてのセーブポイントが消去されます。

  • トランザクションのロックの解除

関連項目:

SAVEPOINT

TO SAVEPOINT句を指定してROLLBACKコマンドを実行すると、次の処理が行われます。

  • トランザクションのセーブポイント後の部分のみがロールバックされます。トランザクションは終了しません。

  • 指定したセーブポイントより後に作成されたすべてのセーブポイントの消去。指定したセーブポイントはそのまま残るため、そのセーブポイントまで繰り返しロールバックできます。指定したセーブポイントより前に作成されたセーブポイントも残ります。

  • 指定したセーブポイント以降に取得されたすべての表と行のロックの解除。セーブポイント後にロックされた行へのアクセスを要求した他のトランザクションは、コミットまたはロールバックされるまで待つ必要があります。行を要求していない他のトランザクションは、すぐに行の要求およびアクセスができます。

インダウト・トランザクションの制限事項

インダウトのトランザクションを手動でセーブポイントまでロールバックすることはできません。

FORCE句

FORCEを指定すると、インダウト分散トランザクションを手動でロールバックできます。このトランザクションは、ローカル・トランザクションIDまたはグローバル・トランザクションIDを含むstringで識別されます。このトランザクションのIDを確認する場合は、データ・ディクショナリ・ビューDBA_2PC_PENDINGを問い合せます。

FORCE句を指定したROLLBACK文では、指定したトランザクションのみがロールバックされます。この文は、現行のトランザクションには影響しません。

関連項目:

分散トランザクションおよびインダウト・トランザクションのロールバックの詳細は、『Oracle Database管理者ガイド』を参照してください。

トランザクションのロールバック: 例

次の文は、現行のトランザクション全体をロールバックします。

ROLLBACK; 

次の文は、現行のトランザクションをセーブポイントbanda_salにロールバックします。

ROLLBACK TO SAVEPOINT banda_sal; 

前述の例の詳細は、「セーブポイントの作成: 例」を参照してください。

次の文は、インダウト分散トランザクションを手動でロールバックします。

ROLLBACK WORK 
    FORCE '25.32.87';