用途
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管理者ガイド』を参照してください。 |