LOCK TABLE

LOCK TABLE ステートメントは、並行して実行されるアプリケーション・プロセスによる表の変更や表の使用を防止します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むことができ、また対話式に呼び出すこともできます。 これは、動的に準備できる実行可能ステートメントです。

権限

このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。

  • ステートメントで識別される表に対して、
    • その表についての *OBJOPR システム権限、および
    • その表が入っているライブラリーに対する *EXECUTE システム権限
  • データベース管理者権限

構文

構文図を読む構文図をスキップする
>>-LOCK TABLE--table-name--IN--+-SHARE MODE----------------+---><
                               +-EXCLUSIVE MODE ALLOW READ-+   
                               '-EXCLUSIVE MODE------------'   

説明

table-name
ロックする表を識別します。この表名では、現行サーバーに存在する基本表を指定する必要があります。カタログ表または宣言済み一時表は、指定しないでください。
IN SHARE MODE
並行して実行されているアプリケーション・プロセスが、 この表に対して読み取り専用操作以外の操作を実行できないようにします。

このステートメントが実行されるアプリケーション・プロセス用の 共用ロック (*SHRNUP) が確立されます。 他のアプリケーション・プロセスが共用ロック (*SHRNUP) を確立することもあり、 その場合、このアプリケーション・プロセスが読み取り専用以外の操作を実行できないようにします。

IN EXCLUSIVE MODE ALLOW READ
並行して実行されているアプリケーション・プロセスが、 この表に対して読み取り専用操作以外の操作を実行できないようにします。

このステートメントが実行されるアプリケーション・プロセス用の 排他読み取り許可ロック (*EXCLRD) が確立されます。 他のアプリケーション・プロセスは共用ロック (*SHRNUP) を確立できず、そ の場合、このアプリケーション・プロセスが該当の表に対して更新、削除、 および挿入を実行できないようにすることは不可能です。

IN EXCLUSIVE MODE
並行して実行されるアプリケーション・プロセスが、この表に対していかなる操作も実行できないようにします。

このステートメントが実行されるアプリケーション・プロセス用の排他ロック (*EXCL) が確立されます。

取得されたロック: ロッキングは、並行操作を防止するために使用されます。

ロックは、以下の時点で解放されます。

  • 作業単位が終了したとき。ただし、作業単位が COMMIT HOLD または ROLLBACK HOLD によって終了した場合を除きます。
  • プログラム・スタックの中の最初の SQL プログラムが終了したとき。ただし、CLOSQLCSR(*ENDJOB) または CLOSQLCSR(*ENDACTGRP) が CRTSQLxxx コマンドで指定されていた場合を除きます。
  • 活動化グループが終了したとき。
  • 接続が CONNECT (タイプ 1) ステートメントの使用により変更されたとき。
  • そのロックに関連する接続が DISCONNECT ステートメントの使用により切り離されたとき。
  • 接続が解除保留状態にあり、正常な COMMIT が行われたとき。

また、オブジェクト割り振り解除 (DLCOBJ) コマンドを出して、表をアンロックすることもできます。

ロック待機時間: 競合するロックを既に他のアプリケーション・プロセスが保持していると、現在使用しているアプリケーションは待ち状態になります (待ち時間の上限は、ジョブのデフォルトの待ち時間です)。

表 DEPARTMENT をロックします。

   LOCK TABLE DEPARTMENT IN EXCLUSIVE MODE