プライマリ・コンテンツに移動
Oracle® Database Oracleプリコンパイラのためのプログラマーズ・ガイド
12c リリース1 (12.1)
B71398-03
目次へ移動
目次
索引へ移動
索引

前
次

ROLLBACK (実行可能埋込みSQL)

ROLLBACKの用途

現行のトランザクションで実行した作業を取り消します。

このコマンドは、インダウトの分散トランザクションで実行された作業を手動で取り消すときにも使用できます。

ROLLBACKの前提条件

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

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

ROLLBACKの構文

ROLLBACKのキーワードおよびパラメータ

WORK

オプションで、ANSIとの互換性のために用意されています。

TO

指定したセーブポイントまで現行のトランザクションをロールバックします。この句を省略した場合、ROLLBACK文はトランザクション全体をロールバックします。

FORCE

インダウトの分散トランザクションを手動でロールバックします。ローカルまたはグローバル・トランザクションIDを格納するtextによりトランザクションを指定します。このトランザクションのIDを確認する場合は、データ・ディクショナリ・ビューDBA_2PC_PENDINGを問い合せます。

ROLLBACK文でのFORCE句の使用は、PL/SQLではサポートされていません。

RELEASE

すべてのリソースを解放し、アプリケーションのOracleサーバーとの接続を切断します。RELEASE句は、SAVEPOINT句およびFORCE句とは併用できません。

ROLLBACKの使用上の注意

トランザクション(または論理作業単位)は、Oracleが1つの単位として扱う一連のSQL文です。トランザクションは、COMMITROLLBACKまたはデータベースへの接続の後の最初の実行SQL文から始まります。トランザクションは、COMMIT文、ROLLBACK文またはデータベースとの接続を切断(意図的または不用意な切断)により終了します。Oracleでは、データ定義言語文の処理前および処理後に暗黒的COMMIT文が発行されます。

TO SAVEPOINT句を指定せずにROLLBACKコマンドを使用すると、次の処理が実行されます。

  • トランザクションを終了します。

  • カレント・トランザクションの変更内容がすべて取り消されます。

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

  • トランザクションのロックを解除します。

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

  • トランザクションのセーブポイント後の部分のみロールバックされます。

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

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

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

ROLLBACKの例I

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

EXEC SQL ROLLBACK;

ROLLBACKの例II

次の文はカレント・トランザクションをセーブポイントSP5までロールバックします。

EXEC SQL ROLLBACK TO SAVEPOINT sp5;

ROLLBACKの分散トランザクション

Oracleで分散オプションを使用すると、分散トランザクション、または複数のデータベースでデータを変更するトランザクションを実行できます。分散トランザクションをコミットまたはロールバックするには、他のトランザクションの場合と同様に、COMMIT文またはROLLBACK文を発行すれば済みます。

分散トランザクションのコミット・プロセス中にネットワーク障害が発生すると、トランザクションの状態が不明、つまりインダウトになる可能性があります。そのトランザクションに関連する他のデータベースの管理者に問い合せて、ローカル・データベースのトランザクションを手動でコミットするか、ロールバックするかを決定できます。ローカル・データベースのトランザクションは、FORCE句を指定したROLLBACK文を発行すれば、手動でロールバックできます。

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

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

ROLLBACKの例III

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

EXEC SQL
 ROLLBACK WORK
 FORCE '25.32.87';

ROLLBACKの関連トピック

COMMIT(実行可能埋込みSQL)およびSAVEPOINT(実行可能埋込みSQL)