LOCK TABLE ステートメント
LOCK TABLE ステートメントを使用すると、 並行アプリケーション・プロセスが表を変更したり表を使用したりできなくなります。 LOCK TABLE ステートメントを発行する作業単位がコミットするか、または終了するときに、ロックが解放されます。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 このステートメントは、動的に作成できる実行可能ステートメントです。
許可
ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
- その表に対する SELECT 特権
- 表に対する CONTROL 特権
- DATAACCESS 権限
構文
説明
- table-name or nickname
- 該当の表またはニックネームを指定します。 table-name は、アプリケーション・サーバーに存在する表を指定していなければなりませんが、カタログ表、作成済み一時表、または宣言済み一時表は指定できません (SQLSTATE 42995)。 table-name が型付き表である場合、 その表は表階層のルート表でなければなりません (SQLSTATE 428DR)。 ニックネームを指定すると、データベース・マネージャーは、そのニックネームが参照するデータ・ソースの基礎オブジェクト (つまり表かビュー) をロックします。
- IN SHARE MODE
- 複数の並行するアプリケーション・プロセスが、 その表に対して読み取り専用以外の操作を実行するのを防止します。
- IN EXCLUSIVE MODE
- 複数の並行するアプリケーション・プロセスが、 その表に対してどのような操作も実行できないようにします。 ただし、EXCLUSIVE MODE は、 非コミット読み取り分離レベル (UR) で実行している並行アプリケーション・プロセスが、 その表に対して読み取り専用操作を実行することは妨げない点に注意してください。
注
- ロッキングは、複数の操作が並行して行われるのを防止するのに使用されます。 既に適切なロックが存在している場合には、LOCK TABLE ステートメントを実行しても、 必ずしもロックが獲得されるとは限りません。 並行操作を防止するロックは、少なくともその作業単位の終了まで保持されます。
- パーティション・データベースでは、表ロックはデータベース・パーティション・グループ内の 最初のデータベース・パーティション (最も番号の小さいデータベース・パーティション) で最初に獲得され、その後他のデータベース・パーティションで獲得されます。 LOCK TABLE ステートメントが割り込まれると、表は一部のデータベース・パーティションではロックされ、その他ではロックされないことになります。 このような場合、他の LOCK TABLE ステートメントを出してすべてのデータベース・パーティションに対してロッキングを完了するか、 COMMIT または ROLLBACK ステートメントを出して現在のロックを解放します。
- このステートメントは、データベース・パーティション・グループ内のすべてのデータベース・パーティションに影響を与えます。
- パーティション表の場合、LOCK TABLE ステートメントで獲得されるロックは、表レベルのロックだけであり、データ・パーティションのロックは獲得されません。
例
表 EMP に対するロックを入手します。
他のプログラムは、その表の読み取りや更新を行うことができなくなります。
LOCK TABLE EMP IN EXCLUSIVE MODE