用途
LOCK
TABLE
文を使用すると、1つ以上の表、表パーティションまたは表サブパーティションを特定のモードでロックできます。操作中の表またはビューに対する他のユーザーによるアクセスを許可または制限するため、自動ロックを手動で無効にします。
一部の形式のロックは、同じ表に同時に設定できます。それ以外のロックは、表ごとに1つしか設定できません。
ロックされた表は、トランザクションをコミットするか、全体をロールバックするか、または表をロックする前のセーブポイントにロールバックするまでロックされています。
ロックした場合でも他のユーザーが表を問い合せることができます。問合せによって表がロックされることはありません。読取りプログラムは書込みプログラムをブロックすることはなく、書込みプログラムが読取りプログラムをブロックすることもありません。
前提条件
表またはビューが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、LOCK
ANY
TABLE
システム権限、または表やビューに対するオブジェクト権限(READ
オブジェクト権限を除く)が必要です。
構文
lock_table::=
partition_extension_clause::=
セマンティクス
schema
表またはビューが含まれているスキーマを指定します。schema
を指定しない場合、表またはビューは自分のスキーマにあるとみなされます。
ロックする表またはビューの名前を指定します。
view
を指定した場合、ビューの実表がロックされます。
partition_extension_clause
を指定した場合、Oracle Databaseでは最初にその表が暗黙的にロックされます。表ロックは、パーティションまたはサブパーティションに指定するロックと同じです。ただし、次の2つの例外があります。
SHARE
ロックをサブパーティションに指定した場合、表が暗黙的にROW
SHARE
ロックされます。
EXCLUSIVE
ロックをサブパーティションに指定した場合、表が暗黙的にROW
EXCLUSIVE
ロックされます。
PARTITION
を指定し、table
がコンポジット・パーティション化されている場合、パーティションのすべてのサブパーティションがロックされます。
表のロックの制限事項: view
が階層の一部である場合、階層のルートである必要があります。
表またはビューが格納されている、Oracle Databaseのリモート・データベースに対するデータベース・リンクを指定します。Oracle分散機能を使用している場合のみ、リモート・データベースで表およびビューをロックできます。LOCK
TABLE
文を使用してロックする表は、すべて同じデータベース上にある必要があります。
dblink
を指定しない場合、その表またはビューはローカル・データベース内にあるとみなされます。
次のいずれかのモードを指定します。
ROW SHARE ROW
SHARE
を指定すると、ロックされた表への同時アクセスは可能になりますが、排他アクセスのために表全体をロックできなくなります。ROW
SHARE
は、SHARE
UPDATE
と同じ意味で、以前のリリースのOracle Databaseとの互換性を保つために用意されています。
ROW EXCLUSIVE ROW
EXCLUSIVE
は、ROW
SHARE
と同じですが、SHARE
モードでロックはできません。ROW
EXCLUSIVE
ロックは、更新、挿入、削除の実行時に自動的に適用されます。
SHARE UPDATE 「ROW SHARE」を参照してください。
SHARE SHARE
を指定すると、同時問合せは実行可能ですが、ロックされた表は更新できなくなります。
SHARE ROW EXCLUSIVE SHARE
ROW
EXCLUSIVE
は、表全体を見る場合に使用します。これを使用すると他のユーザーがその表内の行を見ることはできますが、SHARE
モードで表のロックまたは行の更新を行うことはできません。
EXCLUSIVE EXCLUSIVE
を指定すると、ロックされた表上での問合せは実行可能ですが、他のアクティビティは実行できなくなります。
NOWAIT
を指定すると、指定した表、パーティションまたは表のサブパーティションが他のユーザーによってすでにロックされている場合に、制御をすぐに戻すことができます。この場合、表、パーティションまたはサブパーティションが他のユーザーによってロックされていることを示すエラー・メッセージが戻ります。
WAIT
WAIT
句を使用すると、LOCK
TABLE
文では、DMLロックを取得するまでに指定した時間(秒数)待機するように指定できます。integer
の値に制限はありません。
NOWAIT
もWAIT
も指定しない場合には、表が利用可能になり、ロックされ、制御が戻されるまで、データベースは無限に待機します。データベースでDML文と同時にDDL文が実行されている場合、タイムアウトまたはデッドロックが発生することがあります。このようなタイムアウトまたはデッドロックが検出されると、エラーが戻されます。
関連項目: 表のロックの詳細は、『Oracle Database管理者ガイド』を参照してください。 |