用途
ROLLBACK
文を使用すると、現行のトランザクションで実行された処理を取り消すことができます。また、インダウト分散トランザクションで実行された処理を手動で取り消すこともできます。
注意: アプリケーション・プログラムでは、COMMIT またはROLLBACK 文を使用してトランザクションを明示的に終了することをお薦めします。トランザクションを明示的にコミットせずにプログラムが異常終了した場合、コミットされていない最後のトランザクションがロールバックされます。 |
関連項目:
|
前提条件
現行のトランザクションをロールバックする場合、権限は不要です。
コミットしたインダウト分散トランザクションを手動でロールバックする場合は、FORCE
TRANSACTION
システム権限が必要です。他のユーザーがコミットしたインダウト分散トランザクションを手動でロールバックする場合は、FORCE
ANY
TRANSACTION
システム権限が必要です。
セマンティクス
WORK
WORK
キーワードの指定は任意です。このキーワードは、SQL規格との互換性のために提供されています。
現行のトランザクションをロールバックするセーブポイントを指定します。この句を指定しない場合、ROLLBACK
文によってトランザクション全体がロールバックされます。
TO
SAVEPOINT
句を指定しないでROLLBACK
コマンドを実行すると、次の処理が行われます。
トランザクションを終了します
現行のトランザクションに対するすべての変更の取消し
トランザクション内のすべてのセーブポイントが消去されます。
トランザクションのロックの解除
TO
SAVEPOINT
句を指定してROLLBACK
コマンドを実行すると、次の処理が行われます。
トランザクションのセーブポイント後の部分のみがロールバックされます。トランザクションは終了しません。
指定したセーブポイントより後に作成されたすべてのセーブポイントの消去。指定したセーブポイントはそのまま残るため、そのセーブポイントまで繰り返しロールバックできます。指定したセーブポイントより前に作成されたセーブポイントも残ります。
指定したセーブポイント以降に取得されたすべての表と行のロックの解除。セーブポイント後にロックされた行へのアクセスを要求した他のトランザクションは、コミットまたはロールバックされるまで待つ必要があります。行を要求していない他のトランザクションは、すぐに行の要求およびアクセスができます。
インダウト・トランザクションの制限事項: インダウト・トランザクションは、セーブポイントまで手動でロールバックできません。
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';