物理ロック

物理ロックは、データベースによって管理されます。データベースは、ロックを管理します。Magic xpaリクエスト/ステートメントにもとづいてロックのオープンや解放を行います。

物理ロックがかかると、他のユーザは変更することができず、アプリケーションやデータベースツールによって同じレコードをロックすることもできません。

物理ロックは、常に物理トランザクション内で行われます。トランザクションがコミットまたはロールバックによって開始された場合にだけロックが開始され、トランザクションの終了時にのみロックは終了します。

物理ロックに以下の2つのタイプがあります。

注意:

Magic xpaで「ロックなし」を指定しても、DMLが送られるとロックはデータベースで自動的に行われます。

SELECT ...FOR UPDATE文は、Oracle、MS-SQL Serverで使用できます。これらのRDBMSでは、行レベルのロックがサポートされています。したがって、選択したロック方式に基づいてロックが要求されると、Magic xpaは、ゲートウェイにロックを使用して再びレコードを読み取るように指示します。トランザクションが開始されていない場合は、ゲートウェイによって開始されます。その後、ゲートウェイは、FOR UPDATE句を使用して現在のレコードを読み取ります。MS-SQL Serverの場合は、UPDLOCKヒントを使用します。

上記のプロシージャによって、Magic xpa以外のアプリケーションを含むどのアプリケーションでも、トランザクションが完了するまでレコードを更新することはできません。通常は、更新が行われた後、トランザクションが行われます。

物理ロックのプロセス

1. ロックフェーズ

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

2. 更新フェース

更新フェースでは、データが変更されたかどうかを確認しません。これはレコードがロックされたからです。これによってユーザは変更することができません。

 

Magic xpaは、書込みモードでアクセスされたテーブルをロックするだけです。読込みモードでオープンしたテーブルではロックされません。このパラメータは、タスクの[データソース]テーブル(Ctrl+D)で設定することができます。

例:

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

SELECT empnum, ename, deptno, rowid
FROM emp
WHERE empnum= 1

Returned values:1 , John, 30,1111

ロックを要求します。

SELECT empnum, ename, deptno, rowid
FROM emp
WHERE empnum= 1111
FOR UPDATE NO WAIT
Returned values:1 , John, 30,1111

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

UPDATE emp SET deptno= 40
WHERE rowid= 1111

バッチタスクでは、[ロック方式]特性が「I=即時」に設定されている場合、ゲートウェイは、前もってデータビュー全体をロックすることができます。
Oracleでは、SELECT文にFOR UPDATE句およびORDER BY句を追加して発行することができます。したがって、カーソルがタスクの最初に定義されている場合、FOR UPDATE句を使用して宣言されます。その後、このカーソルから全てのレコードが取得されます。