この特性は、オンラインタスクとバッチタスクの両方で利用することができます。現行タスクが処理しているレコードに他のユーザがアクセスしないようにするために、Magic xpaがロックをかける時期とメモリ内で保持している情報に関して制御するかどうかを指定できます。
ロックの検証は、[更新レコードの識別]特性の指定内容に基づいて実行されます。この特性は、レコードを更新するために、Magic xpaがレコードの再読込をどのように行うかを指定するものです。
この特性の値としては、次のいずれかが指定できます。
I=即時 …… レコードが読み込まれると同時に、そのレコードにロックがかけられます。この場合、検証は行われません。ロックは、解除されるまで有効です。通常、レコードループは非常に短いため、この方式はバッチタスクのデフォルトで使用され、推奨されます。この方式は、データの完全性を増大させますが、並行性を減少させることになります。マルチユーザ環境のインタラクティブなタスクでは、ユーザが同じプログラムを使い続ける時間が予期できないため、この設定にしておくと、レコードのロックが異常に継続することがあります。
この値は物理トランザクションにのみ適用されます。
O=入力時 …… ユーザがレコードの更新を始めた時に、ロックがかけられます。更新を始めた時とは、オンラインとリッチクライアントタスクの場合、入力カラムの先頭に文字を入力したり、チョイスコントロールで値を選択した場合にあたります。バッチタスクの場合は、ユーザによる操作がないため、[レコード後]や[レコード前]で実行される最初の[項目更新]処理コマンド、あるいはタスクやプログラムを最初に呼び出す際にロックが実行されます。このロック方式では検証が行われます。
レコードが最初に読み込まれた時とロックされた時の間で変更されると、エンジンはレコードを再読して、更新された値を表示します。
この値は遅延トランザクションと物理トランザクションに適用されます。
このオプションは、ユーザがレコードを更新する場合だけ、レコードをロックしたいオンラインまたはリッチクライアントタスクで推奨しています。
注意: |
|
B=更新時 …… Magic xpaがロックするレコードは、実際にデータベースに書き込まれる前のレコードに限られます。対話レベル(オンライン)と[レコード後](オンライン、バッチ)の実行中に、ロックがかけられることはありません。ロックの検証段階でエラーが発生すると(レコードを読み取った後で別のユーザがそれを更新した場合)、更新は実行されず、その旨を報告するメッセージが表示されます。現在のタスクによって呼び出されたサブタスクは、他のテーブルに対して情報を更新していることがあり、そのため現行レコードがディスクに対して更新されていないとデータの整合性に問題が発生します。データの整合性で問題が生じないようにするため、この値を使用する時は注意してください。基礎となるデータベースでロック処理による負荷が大きい時や、検証に失敗しても、タスクの構造上、データの整合性を維持できる時に限って使用するようにしてください。
この値は物理トランザクションにのみ適用されます。
N=なし …… レコードはロックされません。このため、他のクライアントがアクセスして更新したばかりのレコードを更新してしまい、データの整合性が失われる可能性があるため、このオプションの設定は、注意して使用しなければなりません。オンラインタスクのデフォルトです。
Magic xpaは、変更内容をデータベースに送る前にデータベースをロックしません。このオプションは、レコードの削除/更新を行う物理トランザクションタスクでは推奨されません。「なし」を使用すると、2つの問題が発生します:
レコードが変更されたかどうかをチェックしませんん。ユーザは、古い値をもとにレコードを更新するかもしれません。
Magic xpaは、レコードをロックすることなく、関連したDMLコマンドを発行します。DMLコマンドには“NOWAIT”パラメータがありません。そして、レコードが別のユーザによってロックされるとMagic xpaはレコードのロックが解放されるまで待ちます。Magic xpaは、これに対するコントロールを持ちません。このため、Magic xpaが応答しないように受け取られるかもしれません。
注意: |
[トランザクションモード]が「O=なし」の場合、[トランザクション開始]特性は無効になります。 |
関連インタフェース: |
非インタラクティブなリッチクライアントタスクでは無効です。 |
関連トピック: