現行のトランザクションをロールバックする場合、権限は不要です。
自分でコミットしたインダウトの分散トランザクションを手動でロールバックするには、FORCE TRANSACTION
システム権限が必要です。他のユーザーがコミットしたインダウトの分散トランザクションを手動でロールバックするには、FORCE ANY TRANSACTION
システム権限が必要です。
WORK
オプションで、ANSIとの互換性のために用意されています。
TO
指定したセーブポイントまで現行のトランザクションをロールバックします。この句を省略した場合、ROLLBACK
文はトランザクション全体をロールバックします。
FORCE
インダウトの分散トランザクションを手動でロールバックします。ローカルまたはグローバル・トランザクションIDを格納するtextによりトランザクションを指定します。このトランザクションのIDを確認する場合は、データ・ディクショナリ・ビューDBA_2PC_PENDING
を問い合せます。
ROLLBACK
文でのFORCE
句の使用は、PL/SQLではサポートされていません。
RELEASE
すべてのリソースを解放し、アプリケーションのOracleサーバーとの接続を切断します。RELEASE
句は、SAVEPOINT
句およびFORCE
句とは併用できません。
トランザクション(または論理作業単位)は、Oracleが1つの単位として扱う一連のSQL文です。トランザクションは、COMMIT
、ROLLBACK
またはデータベースへの接続の後の最初の実行SQL文から始まります。トランザクションは、COMMIT
文、ROLLBACK
文またはデータベースとの接続を切断(意図的または不用意な切断)により終了します。Oracleでは、データ定義言語文の処理前および処理後に暗黒的COMMIT
文が発行されます。
TO SAVEPOINT
句を指定せずにROLLBACK
コマンドを使用すると、次の処理が実行されます。
トランザクションを終了します。
カレント・トランザクションの変更内容がすべて取り消されます。
トランザクションのセーブポイントがすべて消去されます。
トランザクションのロックを解除します。
TO SAVEPOINT
句を指定してROLLBACK
コマンドを使用すると、次の処理が実行されます。
トランザクションのセーブポイント後の部分のみロールバックされます。
指定したセーブポイントの後に作成したセーブポイントをすべて消去します。指定したセーブポイントは保持されるため、そのセーブポイントまで複数回ロールバックできます。指定したセーブポイントより前に作成されたセーブポイントも残ります。
指定したセーブポイント後に取得した表および行のロックがすべて解除されます。セーブポイント後にロックされた行へのアクセスを要求した他のトランザクションは、コミットまたはロールバックされるまで待機する必要があります。行を要求していない他のトランザクションは、すぐに行の要求およびアクセスができます。
アプリケーション・プログラムでは、COMMIT
またはROLLBACK
文のいずれかを使用してトランザクションを明示的に終了することをお薦めします。トランザクションを明示的にコミットしなかった場合にプログラムが異常終了すると、Oracleはコミットされていない最後のトランザクションをロールバックします。
Oracleで分散オプションを使用すると、分散トランザクション、または複数のデータベースでデータを変更するトランザクションを実行できます。分散トランザクションをコミットまたはロールバックするには、他のトランザクションの場合と同様に、COMMIT
文またはROLLBACK
文を発行すれば済みます。
分散トランザクションのコミット・プロセス中にネットワーク障害が発生すると、トランザクションの状態が不明、つまりインダウトになる可能性があります。そのトランザクションに関連する他のデータベースの管理者に問い合せて、ローカル・データベースのトランザクションを手動でコミットするか、ロールバックするかを決定できます。ローカル・データベースのトランザクションは、FORCE
句を指定したROLLBACK
文を発行すれば、手動でロールバックできます。
インダウトのトランザクションを手動でセーブポイントまでロールバックすることはできません。
FORCE
句を指定したROLLBACK
文でロールバックできるのは、指定したトランザクションのみです。この文は、現行のトランザクションには影響しません。