プライマリ・コンテンツに移動
Pro*C/C++プログラマーズ・ガイド
12c リリース1(12.1)
B71397-03
目次へ移動
目次
索引へ移動
索引

前
次

ROLLBACK (実行可能埋込みSQL)

用途

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

この文は、インダウトの分散トランザクションの処理を手動で取り消すときにも使用できます。

前提条件

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

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

構文

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

キーワードおよびパラメータ 説明

AT

セーブポイントをどのデータベースに対して作成するかを指定します。次のいずれかを使用してデータベースを指定します。

db_name: 事前にCONNECT文で確立されたデータベース接続の名前を含み、ヌル文字で終了する文字列。省略した場合または空文字の場合は、デフォルトのデータベース接続とみなされます。

host_variable: データベース接続の名前を含むホスト変数。この句を省略した場合、セーブポイントはデフォルトのデータベースに対して作成されます。

WORK

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

TO

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

FORCE

インダウトの分散トランザクションを手動でロールバックします。トランザクションは、ローカル・トランザクションIDまたはグローバル・トランザクションIDを含むテキストにより指定します。このようなトランザクションのIDを検索するには、データ・ディクショナリ・ビューDBA_2PC_PENDINGに問合せをします。

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

RELEASE

リソースをすべて解放し、アプリケーションをデータベースから切断します。RELEASE句は、SAVEPOINT句およびFORCE句とは併用できません。

savepoint

ロールバックするセーブポイント

使用上の注意

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

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

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

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

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

  • トランザクションのロックが解除されます。

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

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

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

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

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

例1

次の文はカレント・トランザクション全体をロールバックします。

EXEC SQL ROLLBACK; 

例2

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

EXEC SQL ROLLBACK TO SAVEPOINT sp5;

分散トランザクション

Oracleで分散オプションを使用すると、分散トランザクション、または複数データベース上のデータを変更するトランザクションが可能になります。分散トランザクションをコミットまたはロールバックするには、他のトランザクションと同じようにCOMMIT文またはROLLBACK文を発行するだけで済みます。

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

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

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

例3

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

EXEC SQL
    ROLLBACK WORK
    FORCE '25.32.87' ;

関連項目