スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス
LOCK文(表の排他制御)
機能
指定した表に排他制御をします。HiRDBが自動的に排他制御する行,又はキー値単位より大きな単位で排他制御をするため,行,又はキー値単位の場合に比べて排他制御によるオーバヘッドを削減できます。
使用権限
表に対するSELECT権限を持つユーザが,その表に共用モードの排他を掛けられます。
表に対するINSERT権限,UPDATE権限,又はDELETE権限を持つユーザが,その表に排他モードの排他を掛けられます。
形式
オペランド
〔,〔〔RDノード名称.〕認可識別子.〕表識別子〕…
- RDノード名称
- アクセスをするRDノードのRDノード名称を指定します。
- 認可識別子
- 排他制御をする表の所有者の認可識別子を指定します。
- 表識別子
- 排他制御をする表の名称を指定します。
- 表識別子に外部表を指定した場合,外部表に対応する外部のDBの表に対して排他制御をします。
- 表識別子にビュー表を指定した場合は,ビュー表の基になる実表,及びビュー表の基になる外部表に対応する,外部のDBの表に対して排他制御をします。この場合,ビュー表には排他制御はしません。
- 表名は最大64個指定できます。また,表名は重複してもかまいません。
排他制御をする表のデータを,ほかのユーザが参照することは許すが,更新することは許さない(共用モード)場合に指定します。このオペランドを指定したLOCK文発行後の表アクセス時に,共用モードの行,及びキー値の排他資源が削減されます。
排他制御をする表のデータを,ほかのユーザが参照することも,更新することも許さない(排他モード)場合に指定します。ただし,ほかのユーザが排他オプションWITHOUT LOCK NOWAITを指定して検索した場合を除きます。このオペランドを指定したLOCK文発行後の表アクセス時に,共用モードの行,キー値,及び排他モードの行,キー値の排他資源が削減されます。
DISCONNECTするまで排他制御をする場合に指定します。省略した場合,トランザクションの終了まで排他制御をします。
- {WITH ROLLBACK|NO WAIT|NOWAIT}
ほかのユーザと排他が競合した場合,待たないでエラーを受け取るときに指定します。省略した場合,排他が競合したときは,排他が解除されるまで,又はシステム定義のpd_lck_wait_timeoutオペランドで指定した時間まで待ちます。
- WITH ROLLBACK
- 排他制御をする表をほかのユーザが使用している場合,トランザクションを取り消して無効にするときに指定します。
- NO WAIT
- 排他制御をする表が他ユーザで使用されているとき,トランザクションを取り消さないでこのSQL文を無効にする場合,指定します。
- NOWAIT
- NO WAITを指定した場合と同じです。
共通規則
- 排他制御をする実表及び外部表が重複する場合は,重複排除されます。一つのLOCK文で排他制御できる実表及び外部表の合計は,最大64個です。
- データディクショナリ表には,排他制御はできません。
- 外部表に対する排他制御の動作は,外部のDBによって異なります。排他制御の動作については,「付録D 外部表を利用する場合の制限事項」を参照してください。
- 排他制御をしているとき,更にLOCK文を実行した場合,排他期間は長い方へ,又排他レベルは強い方へ遷移します。このため,排他期間を短くする,又は排他レベルを下げる指定をしたLOCK文を実行しても,排他期間及び排他レベルは変更されません。
排他期間の長さと排他レベルの強弱を次の図に示します。
図5-1 排他期間の長さと排他レベルの強弱
- LOCK文発行後にPURGE TABLE文を実行すると,排他レベルがEXCLUSIVEに遷移します。この場合,PURGE TABLE文実行前にトランザクションを終了させると,PURGE TABLE文を実行してもEXCLUSIVEには遷移しません。
- UNTIL DISCONNECTを指定して排他制御をしている表が,DROP TABLE文などで削除された場合,その表に対する排他制御はHiRDBシステムによって自動的に解除されます。
- UNTIL DISCONNECTを指定した場合は,リモートデータベースアクセスでは使用できません。
- 外部表を排他制御する場合,外部表に対応する外部サーバの表に対して排他制御をします。外部サーバの表に対して排他制御ができなかった場合,LOCK文を実行したトランザクションはロールバックされます。
留意事項
- 通常,HiRDBが排他制御をするので,排他制御の単位を変える場合だけLOCK文を使用してください。
- UNTIL DISCONNECTを指定した場合,クライアント環境定義のPDXAMODEの指定によって,排他制御の期間が異なります。PDXAMODE及び排他制御については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
- 共用表に対して排他モード(IN EXCLUSIVE MODE)でLOCK文を実行した場合,共用表のほかに次のRDエリアも排他制御の対象となります。
- 共用表を格納しているRDエリア
- 共用表にインデクスが定義されている場合,そのインデクスを格納しているRDエリア
共用表に対する排他制御については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。
使用例
同じトランザクション中で,在庫表(ZAIKO)を全件検索するため,この表に共用モードの排他制御をします。
LOCK TABLE ZAIKO IN SHARE MODE
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.