トランザクション処理

この 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 システムが正当にレコード ロック エラーを返せるためです。