論理ロック

論理ロックは、ロックのシミュレーションです。実際に外部ロックがデータベースに発行されることはありません。Magic xpaは、ロックを行う代わりに、レコードが最初に読み込まれた時から他のユーザによって変更されたレコードデータの内容がデータベースに書き込まれないようにするため、ソフトウェアによるチェックを行います。

論理的ロックでは、他のユーザが同じレコードを更新するのを防ぐことができません、レコードが変更された場合に自身の更新を防ぐことができるだけです。Magic xpaは、ロック開始の時点と、更新段階の2回レコードをチェックします。

論理ロックは、失われた更新(Loast Update)の防止を支援します。

ロックが要求され、Magic xpaがゲートウェイにロックを使用してレコードを読み取るように指示すると、ゲートウェイはレコードを読み取り、読み取ったレコードの値を保持します。

その後、UPDATE文が[レコード後]で発行されると、全てのカラム、Magic xpaで呼び出されたフィールドがWHERE句に追加されます。

その間、ロックされていないレコードが別のユーザによって変更された場合、ゲートウェイによって、レコードが別のユーザによって変更されたというメッセージが送信され、UPDATEは失敗します。

論理ロックは、2つの状況で使用することができます。各状況、実装は異なります。

論理ロックのタイプ

論理ロックには以下の2種類あります。

論理ロックのプロセス

論理ロックは、データベースで管理されません。したがって、2回チェックされます。最初は、ロックが要求された時点でチェックされ(ロックフェース)、2回めは更新がデータベースに送信される時です。

1. ロックフェーズ

フック …… Magic xpaは、レコードがロックフェースまで変更されないことを確認します。Magic xpaは、最初に読み込まれた新しい値と、ロックによるSELECTで読み込まれた値を比較します。

2. 更新フェース

遅延トランザクションの終了時、DMLコマンドの全ては、データベースに送信されます。この段階では、レコードが変更されていないかどうかの2回目のチェックが実行されます。このチェックは、トランザクションが終了するまで論理ロックの段階から必要です、他のユーザはレコードを変更することができます。Magic xpaは、[更新レコード識別]特性で定義されたレコード・フィールドを含むWHERE句を持つUPDATE/DELETEコマンドを送ります。

プラットホーム仕様

MS-SQL Serverでは、論理ロックと物理ロックの両方がサポートされています。論理ロックを使用するには、[データベース特性]ダイアログの[データベース情報]特性で「SQL_PHYSICAL_LOCKING=N」というフラグを指定する必要があります。

ODBCではページレベルのロックのみがサポートされていますが、ページレベルのロックはロックの問題を引き起こす可能性があります。したがって、実際にはレコードがロックされない論理ロック方式が使用されます。この場合、整合性を保つために、レコードが論理的にロックされた時から更新まで、レコードが変更されないことが保証されます。

例:

現在のレコードを取得します。

SELECT empnum, ename, deptno
FROM emp
WHERE empnum= 1
values:1 , John, 30

ロックを要求します。

SELECT empnum, ename, deptno
FROM emp
WHERE empnum= 1
values:1 , John, 30

deptnoが40に変更されたとします。

UPDATE emp SET deptno= 40
WHERE
empnum= 1 AND ename= John' AND deptno= 30

ODBCゲートウェイは、アクセスしたテーブルでレコードロックまたはFOR UPDATE文が使用できることが想定できないため、論理ロック動作を使用します。