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