プライマリ・コンテンツに移動
Oracle® Database SQL言語リファレンス
11gリリース2 (11.2)
B56299-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

ROLLBACK

用途

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


注意:

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


関連項目:

  • トランザクションの詳細は、『Oracle Database概要』を参照してください。

  • 分散トランザクションの詳細は、『Oracle Database Heterogeneous Connectivityユーザーズ・ガイド』を参照してください。

  • 現行トランザクションの特性の設定については、「SET TRANSACTION」を参照してください。

  • 「COMMIT」および「SAVEPOINT」を参照してください。


前提条件

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

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

構文

rollback::=

rollback.gifの説明が続きます。
図「rollback.gif」の説明

セマンティクス

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';