ROLLBACK
目的
ROLLBACK
文を使用すると、現行のトランザクションで実行された処理を取り消すことができます。また、インダウト分散トランザクションで実行された処理を手動で取り消すこともできます。
ノート:
アプリケーション・プログラムでは、COMMIT
またはROLLBACK
文を使用してトランザクションを明示的に終了することをお薦めします。トランザクションを明示的にコミットせずにプログラムが異常終了した場合、コミットされていない最後のトランザクションがロールバックされます。
関連項目:
-
トランザクションの詳細は、『Oracle Database概要』を参照してください。
-
分散トランザクションの詳細は、『Oracle Database Heterogeneous Connectivityユーザーズ・ガイド』を参照してください。
-
現行トランザクションの特性の設定については、「SET TRANSACTION」を参照してください。
前提条件
現行のトランザクションをロールバックする場合、権限は不要です。
コミットしたインダウト分散トランザクションを手動でロールバックする場合は、FORCE
TRANSACTION
システム権限が必要です。他のユーザーがコミットしたインダウト分散トランザクションを手動でロールバックする場合は、FORCE
ANY
TRANSACTION
システム権限が必要です。
構文
rollback::=
セマンティクス
WORK
WORK
キーワードの指定は任意です。このキーワードは、SQL規格との互換性のために提供されています。
TO SAVEPOINT句
現行のトランザクションをロールバックするセーブポイントを指定します。この句を指定しない場合、ROLLBACK
文によってトランザクション全体がロールバックされます。
TO
SAVEPOINT
句を指定しないでROLLBACK
コマンドを実行すると、次の処理が行われます。
-
トランザクションの終了
-
現行のトランザクションに対するすべての変更の取消し
-
トランザクション内のすべてのセーブポイントが消去されます。
-
トランザクションのロックの解除
関連項目:
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';