SAP ABAP システムは、衝突チェック メカニズムを使用して、ロック リクエストが既存のロックと競合するかどうかをチェックします。
競合が発生した場合、ダイアログ トランザクションのユーザーは、要求されたオブジェクトが現在別のユーザーによってロックされていることを示すメッセージを受け取ります。
注: 非会話ワーカー (一括入力) の場合、ロック要求は後で再度発行されます。
SAP公式ドキュメントの衝突チェック メカニズムの説明:
ロック要求が既存のロックと衝突するかどうかを確認するには、2 つの手順があります。まず、システムは、ロック要求がロック テーブル内の基本ロックと衝突するかどうかを確認します。この場合、システムは所有者との衝突があるかどうかをチェックします。(たとえば、同じ所有者が複数回書き込みロックを要求する場合があります。これについては、「ロックの累積」で説明されています。)
衝突チェックプロセスが 2 つのステップに分かれていることがわかります。
-
システムは、ロック要求がロック テーブル内の要求と
elementary lock
競合するかどうかをチェックします。 -
実際に競合がある場合は、現在のロック要求にロック テーブル内のエントリとの所有者競合があるかどうかを確認します。
所有者の衝突をチェックする理由は、同じ所有者が書き込みロック要求を繰り返し送信する可能性があるためです。
競合が発生した場合、ダイアログ トランザクションのユーザーは、要求されたオブジェクトが現在別のユーザーによってロックされていることを示すメッセージを受け取ります。
非対話ワーカー (一括入力) の場合、後で再度ロック要求が発行されます。
次の条件がすべて満たされる場合、2 つの基本ロックが競合していると言えます。
-
ベース ロック (ロックされているテーブル) の名前は同じです。
-
ロックパラメータ: ロックパラメータは同じです。各位置の文字が一致します (ここでは、@ で示されるワイルドカード文字はすべての文字で同じです)。
-
少なくとも 1 つのベース ロックが読み取りロックされていません。
次の図は、いくつかの具体的な例です。
3 番目のロック要求。要求は読み取りロックであり、ロック テーブルも読み取りロックであるため、ロックの競合はありません。
4 行目では、ロック テーブルに既に読み取りロック S が存在しますが、このとき書き込みロック E を取得しようとすると失敗します。