トランザクション処理を行うと、データ ファイルを更新する一連の処理を、トランザクションと呼ばれる作業の 1 論理単位にグループ化することができます。
トランザクションの一部として変更する場合は、次のように処理されます。
- 作業をコミットし、データ ファイルを変更して、その変更を永久的なものにします。
- 作業をロールバックし、データ ファイルから変更を削除します。トランザクションがロールバックされると、Fileshare サーバーは、データ ファイルをトランザクションを開始する前の状態に戻します。
トランザクションでは、複数の Fileshare サーバーで、複数のデータ ファイルを、複数回更新できます。
次の操作後に、SELECT 文で WITH ROLLBACK 句が定義されているファイルで最初に更新操作 (WRITE、REWRITE、DELETE) を実行すると、トランザクションが開始します。
- ファイルを開く
- COMMIT または ROLLBACK 文の実行
また、トランザクションは、次の場合に終了します。
- COMMIT 文の実行時
- ROLLBACK 文の実行時
- トランザクションのタイムアウト時。詳細は、「自動レコード ロック タイムアウト」を参照してください。
注:
- COMMIT 文と ROLLBACK 文を指定すると、各データ ファイルでプログラムがもつすべてのレコード ロックを解放できます。これは、ファイルで WITH ROLLBACK 句を指定したかどうかに関係なく発生します。
- COMMIT 文や ROLLBACK 文を処理するために要する時間は、そのトランザクションで実行する更新の回数に正比例します。
- アクティブなトランザクションで使用中のファイルを CLOSE しようとすると、9/100 エラー状態が返され、ファイルは開いたままになります。CLOSE を実行する前には、COMMIT 文または ROLLBACK 文を実行しておく必要があります。
- WITH ROLLBACK 句を使用すると、ファイルで複数のレコード ロックが暗黙的に定義されます。
データの一貫性を最高レベルで確保するために、トランザクション処理の前に、次の操作を行うようにしてください。
- ファイルの入出力要求を処理する Fileshare サーバーのデータベース参照ファイルに、トランザクション処理を実行するファイルをすべてインクルードします。詳細は、「データベース参照ファイルのメンテナンス」を参照してください。
- データベース参照ファイルでロールフォワード回復ログ ファイルを指定します。詳細は、「ロールフォワード回復ロギング」を参照してください。
レコード ロックは、トランザクションで更新するすべてのレコードについて暗黙的に使用します。例えば、プログラムが入力を要求しても、ユーザーが応答しない場合のように、トランザクションが一時的に中断された場合に、レコード ロックがファイルに長時間残ることがあります。このとき、別の Fileshare クライアントがロックされたレコードにアクセスしようとしており、なおかつ指定した時間が経過すると、Fileshare サーバーはトランザクションを中止 (ロールバック) します。このような場合を、トランザクションが Fileshare サーバーによりタイムアウトされたといいます。詳細は、「自動レコード ロック タイムアウト」を参照してください。
注:トランザクションで実行する更新回数を最小限に抑えると、取得するレコード ロックの数もまた最小に抑えられます。レコード ロックの数を減らすと、データを共有する Fileshare クライアントの間のレコード ロックの競合回数が減り、トランザクション後の COMMIT 文や ROLLBACK 文の実行速度が向上します。