論理ロック

データ管理 > SQLに関する考慮事項 > 構成とパフォーマンス > ロック > 排他ロックと共有ロック

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

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

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

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

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

例:

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

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文が使用できることが想定できないため、論理ロック動作を使用します。