VSAM データ・セットが I-O (更新) 用に RLS モードで開かれるとき、指定されている RLS の値 (RLS=CR または RLS=NRI) にかかわらず、最初の READ によりレコードの排他ロックが行われます。
COBOL ファイルが ACCESS RANDOM と定義されている場合、VSAM は、 WRITE または REWRITE ステートメントの 発行後あるいは 別のレコードに対する READ ステートメントの 発行後に、レコードに対する排他ロックを解除します。WRITE または REWRITE の処理が実行されると、VSAM は即時にレコードを書き出します。
しかし、COBOL ファイルが ACCESS DYNAMIC として定義されている場合、VSAM は、WRITE や REWRITE ステートメントの後でも、READ ステートメントの後でもレコードの排他ロックを解放しません。ただし、I-O ステートメントにより VSAM が別の制御インター バル (CI) へ移動させられる場合には解放されます。この結果、WRITE または REWRITE が実行 されても、処理が別の CI に移動してロックが解除されるまで、VSAM はレコードを書き込みません。 ACCESS DYNAMIC を使用する際に、レコードの即時の書き出しや排他ロックの即時の解除 (あるいはその両方) を実現する 1 つの方法は、CI ごとに 1 レコードのみを許容する VSAM データ・セットを定義することです。
RLS=CR を指定すると、レコードはロックされ、別のレコードに対する別の READ が要求されるまで、そのレコードへの更新を妨げることができます。読み取り中のレコードに関するロックが有効な間、他のユーザーは同じレコードに対する READ を要求することはできますが、読み取りロックが解除されるまで、そのレコードを更新することはできません。 RLS=NRI を指定した場合、入力の READ が発行 されたときにはロックは有効になりません。別のユーザーがそのレコードを更新する可能性があります。
RLS=CR のロッキング規則により、アプリケーションはレコード・ロックが使用可能になるのを待つ可能性があります。 この待機によって、入力の READ がスローダウンことがあります。 RLS=CR を使用するためには、アプリケーションのロジックを修正することが必要な場合があります。 アプリケーションが複数の更新環境で正しく機能することを確認するまでは、回復不能範囲を更新するバッチ・ジョブには、RLS パラメーターを使用しないでください。
VSAM データ・セットを RLS モードで INPUT または I-O 処理用にオープンするときには、OPEN または START を出すのは READ の 直前 が良いでしょう。OPEN または START と READ の間に遅延があると、 OPEN または START の実行後に、アプリケーションが位置を定めたレコードの前の位置に他のユーザーがレコードを追加する可能性が高くなります。COBOL 実行時には、OPEN が要求された時点で VSAM データ・セットの開始位置が明示的に指し示されますが、READ が遅れると、他のユーザーによって追加されたレコードによって、VSAM データ・セットの実際の開始位置が変わる可能性があります。