トランザクションの終了

提供: InterBase

トランザクションでの作業 へ戻る


トランザクションのタスクが完了した際、もしくはエラーによりトランザクションが完了できなかった際、トランザクションは終了してデータベースを一貫した状態に設定しなければなりません。 トランザクションを終了されるのに、2 つの API 関数があります:

  • isc_commit_transaction() は、トランザクションの変更を、データベース上で永続的なものにします。 複数のデータベースにまたがるトランザクションの場合、この関数は自動的に 2 相コミットを行い、すべての変更が正常に行われることを保証します。
  • isc_rollback_transaction() は、トランザクションの変更を取消、データベースをトランザクションが開始される前の元の状態に戻します。 この関数は大抵、1 つ以上のエラーが発生し、トランザクションが正常に完了しなかった場合に使用されます。

isc_commit_transaction() および isc_rollback_transaction() の両方とも、トランザクションに関連づけられているレコード ストリームを閉じ、トランザクション名を 0 に再初期化し、そのトランザクションのために確保されたシステム リソースを解放します。 解放されたシステム リソースは、その後のアプリケーションやプログラムで使用できるようになります。

isc_rollback_transaction() は、エラーが発生した際にエラー処理ルーチン内で使用され、トランザクションをクリーンアップします。 これは、プログラムが復旧不可能なエラーに遭遇した場合に、再試行する前に中途半端に完了したトランザクションをロールバックし、データベースを以前の状態に復元することができます。

API は、トランザクション制御のために、さらに 4 つの関数を提供しています:

  • isc_commit_retaining() は、トランザクションをコミットしますが、現在のトランザクションのコンテキスト(トランザクションで使用されたシステム リソースやカーソルの状態など)を保持します。これにより、トランザクションを終了、新規トランザクションを開始、カーソル状態を復旧するための労力を省くことができます。 ただし、isc_commit_retaining() は、データベースに必要な機能であるガーベッジ コレクションを禁止します。
  • isc_rollback_retaining() は、トランザクションの更新をロール バックしますが、現在のコンテキストを保持します。 大抵、ロールバックの発生はトランザクションのコンテキスト内ですので、コンテキストの保持は単に 2 回目のロールバックを保証するためだめのものです。 この呼び出しの使用には、十分注意してください。
  • isc_prepare_transaction() および isc_prepare_transaction2() により、アプリケーションは、自動 2 相コミットの最初のフェーズを、独自の時間で実行することができ、その後、isc_commit_transaction () への呼び出しを発行して、コミットを完了させます。
Important: トランザクションが終了する前にプログラムが終了した場合は、トランザクションは自動的にロールバックされますが、データベースは閉じられません。 開かれたデータベースは、常に isc_detach_database() への明示的な呼び出しによって閉じられる必要があります。

データベースからの切断の詳細については、「データベースでの作業」を参照してください。

トピック