レコードロックは、ファイル(通常はORGANIZATION INDEXEDファイル)にアクセスするための単一の制御ポイントを提供する高度なファイル管理ソフトウェアによってサポートされている。レコードロックを実行できるランタイムパッケージの1つは、Berkely DB(BDB)パッケージである。様々なI/O文は―他の同時実行プログラムによる―アクセスしたばかりのファイルレコードへのアクセスに制限を課すことができる。これらの制限は、レコードにロックをかけることによって構文的に課せられる。OPEN時に課せられたファイル共有の制限がファイル全体へのアクセスを妨げなかったと仮定すると、ファイル内の他のレコードは引き続き利用可能である。
ロックを保持しているプログラムが終了するか、ファイルに対してCLOSE文(6.9)、UNLOCK文(6.48)、COMMIT文(6.10)、またはROLLBACK文(6.37)を実行するまでロックが有効である。
レコードロックオプション(すべてのオプションがすべての文で利用できるとは限らない)を次の表で示している。
レコードロック オプション | 効果 |
---|---|
WITH LOCK | 他のプログラムによるレコードへのアクセスは拒否される。 |
WITH NO LOCK | レコードはロックされない。すべての文で有効なロックオプションが指定されなかったときの既定値である。 |
IGNORING LOCK WITH IGNORE LOCK |
レコードを読み取る場合にのみ有効なオプション―他のプログラムによって保持されているロックは無視するようopensource COBOLに通知する。 左に示した2つのオプションは同義である。 |
WITH WAIT | レコードを読み取る場合にのみ有効なオプション―読み取るレコードに保持されているロックが解放されるのをプログラムが待機していることをopensource COBOLに通知する。 このオプションがないと、ロックされたレコードの読み取りはすぐに中止され、ファイル状態コード47が返される。 このオプションを使用すると、プログラムは事前に設定された時間だけロックが解放されるのを待機する。事前に設定された待機時間内にロックが解除されると、読み取りは成功する。ロックが解除される前に事前に設定された待機時間が経過すると、読み取りの試行は中止され、ファイル状態コード47が発行される。 |
使用しているopensource COBOLビルドがBDBを利用するように構成されている場合、実行時環境変数DB_HOMEを使って(8.2.4を参照)レコードロックを使用できる。