トランザクション処理

この COBOL システムでは、トランザクション処理は Fileshare を使用している場合にのみ実行できますが、Btrieve ユーザーは、トランザクション処理を実行するために Fileshare は必要ありません。

Fileshare を使ってトランザクションでファイル内のレコードを更新する場合は、ファイル内の個々のレコードはロックされ、他のユーザーがレコードを読み取れないようにします。これは、ファイルからレコードを削除した際に ROLLBACK 操作が行われる可能性があるためです。ただし、トランザクション内から Xfh2btr を介して Btrieve ファイルにアクセスする場合は、他のユーザーが同時にファイルにアクセスすることを防ぐために、ファイル全体に一時的な排他ロックがかかります。Btrieve v6.x 以降では、並行トランザクションが使用され、トランザクション内でファイルを共有できます。

Btrieve トランザクションは、処理中のトランザクションがなく ROLLBACK を使って開かれているファイルに対して、REWRITE、WRITE、または DELETE 操作が行われるたびに開始されます。この時点では、Btrieve はファイルに排他ロックをかけます。このファイル ロックは、並行トランザクションを使用している場合 (Btrieve v6.x 以降) を除き、トランザクションが終了するまで維持されます。

注: 注:
  • Btrieve v6.x 以降では、並行 Btrieve トランザクションが使用されます。この場合のロックは、ページ レベルで実行されます(詳細については、Btrieve のドキュメントを参照してください)。
  • トランザクションは COMMIT または ROLLBACK 操作の実行時に終了します。トランザクションは、ROLLBACK で開かれたファイルに対して再び入出力を行う際に再開します。

CLOSE 操作ではトランザクションは再開されません。これは、トランザクションがアクティブでない場合にのみ Btrieve CLOSE 操作が行われるためです。

ファイル ロック エラーは、ファイルが開かれた時点で Xfh2btr によって返されます。これは、この COBOL システムが、ファイルを開く際にのみファイル ロック エラーを返すためです。Btrieve は、トランザクション内でファイルにアクセスする際にファイル ロック エラーを返す場合があります。ただし、このエラーは、Xfh2btr によってレコード ロック エラーに変換されます。これは、トランザクション内でファイルにアクセスする際にこの COBOL システムが正当にレコード ロック エラーを返せるためです。