トランザクションの終了
提供: 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()
への明示的な呼び出しによって閉じられる必要があります。
データベースからの切断の詳細については、「データベースでの作業」を参照してください。