用途
前提条件
現行のトランザクションをロールバックする場合、権限は不要です。
ユーザーがコミットしたインダウトの分散トランザクションを手動でロールバックするには、FORCE TRANSACTIONのシステム権限が必要です。他のユーザーがコミットしたインダウトの分散トランザクションを手動でロールバックするには、FORCE ANY TRANSACTIONのシステム権限が必要です。
構文
キーワードおよびパラメータ
使用上の注意
トランザクション(または論理作業単位)は、Oracleが1つの単位として扱う一連のSQL文です。トランザクションは、COMMIT文、ROLLBACK文またはデータベースへの接続後の、最初の実行SQL文から始まります。トランザクションは、COMMIT文、ROLLBACK文またはデータベースからの切断(意図的かどうかに関係なく)で終了します。Oracleでは、データ定義言語文の処理前および処理後に暗黙的なCOMMIT文が発行されます。
TO SAVEPOINT句を指定せずにROLLBACK文を使用すると、次の処理が実行されます。
TO SAVEPOINT句を指定してROLLBACK文を使用すると、次の処理が実行されます。
トランザクションのセーブポイント後の部分のみがロールバックされます。
指定したセーブポイントの後に作成したセーブポイントがすべて消去されます。名前付きのセーブポイントが保持されるため、複数回同じセーブポイントにロールバックできます。指定したセーブポイントより前に作成されたセーブポイントも残ります。
指定したセーブポイント以降に取得されたすべての表と行のロックの解除。セーブポイント後にロックされた行へのアクセスを要求した他のトランザクションは、コミットまたはロールバックされるまで待つ必要があります。行を要求していない他のトランザクションは、すぐに行の要求およびアクセスができます。
アプリケーション・プログラムでは、COMMIT文またはROLLBACK文を使用してトランザクションを明示的に終了することをお薦めします。トランザクションを明示的にコミットしなかった場合にプログラムが異常終了すると、Oracleはコミットされていない最後のトランザクションをロールバックします。
例1
例2
次の文はカレント・トランザクションをセーブポイントSP5までロールバックします。
EXEC SQL ROLLBACK TO SAVEPOINT sp5;
分散トランザクション
Oracleで分散オプションを使用すると、分散トランザクション、または複数データベース上のデータを変更するトランザクションが可能になります。分散トランザクションをコミットまたはロールバックするには、他のトランザクションと同じようにCOMMIT文またはROLLBACK文を発行するだけで済みます。
分散トランザクションのコミット・プロセス中にネットワーク障害が発生すると、トランザクションの状態が不明、つまりインダウトになる可能性があります。そのトランザクションに関連する他のデータベースの管理者に問い合せて、ローカル・データベースのトランザクションを手動でコミットするか、ロールバックするかを決定できます。ローカル・データベースのトランザクションを手動でロールバックするには、FORCE句を指定してROLLBACK文を発行します。
インダウトのトランザクションを手動でセーブポイントまでロールバックすることはできません。
FORCE句を指定したROLLBACK文は、指定したトランザクションのみロールバックします。この文は、現行のトランザクションには影響しません。
例3
次の文は、インダウト分散トランザクションを手動でロールバックします。
EXEC SQL ROLLBACK WORK FORCE '25.32.87' ;
関連項目