MS-SQL Serverでは、論理ロックと物理ロックの両方がサポートされています。論理ロックを使用するには、[データベース特性]ダイアログの[データベース情報]特性で「SQL_PHYSICAL_LOCKING=N」というフラグを指定する必要があります。
ODBCではページレベルのロックのみがサポートされていますが、ページレベルのロックはロックの問題を引き起こす可能性があります。したがって、実際にはレコードがロックされない論理ロック方式が使用されます。この場合、整合性を保つために、レコードが論理的にロックされた時から更新まで、レコードが変更されないことが保証されます。
ロックが要求され、Magic uniPaaSがゲートウェイにロックを使用してレコードを読み取るように指示すると、ゲートウェイはレコードを読み取り、読み取ったレコードの値を保持します。
その後、UPDATE文が[レコード後]で発行されると、全てのカラム、Magic uniPaaSで呼び出されたフィールドがWHERE句に追加されます。
その間、ロックされていないレコードが別のユーザによって変更された場合、ゲートウェイによって、レコードが別のユーザによって変更されたというメッセージが送信され、UPDATEは失敗します。
例:
現在のレコードを取得します。
SELECT
empnum, ename, deptno |
ロックを要求します。
SELECT
empnum, ename, deptno |
deptnoが40に変更されたとします。
UPDATE
emp SET deptno= 40 |
ODBCゲートウェイは、アクセスしたテーブルでレコードロックまたはFOR UPDATE文が使用できることが想定できないため、論理ロック動作を使用します。