Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


5.6.1 LOCK文の形式と規則

〈この項の構成〉

(1) 機能

指定した表に排他制御をします。HiRDBが自動的に排他制御する行,又はキー値単位より大きな単位で排他制御をするため,行,又はキー値単位の場合に比べて排他制御によるオーバヘッドを削減できます。

(2) 使用権限

表に対するSELECT権限を持つユーザが,その表に共用モードの排他を掛けられます。

表に対するINSERT権限,UPDATE権限,又はDELETE権限を持つユーザが,その表に排他モードの排他を掛けられます。

(3) 形式

 LOCK TABLE 〔認可識別子.〕表識別子
        〔,〔認可識別子.〕表識別子〕…
        〔IN{SHARE|EXCLUSIVE } MODE〕
        〔UNTIL DISCONNECT〕
        〔{WITH ROLLBACK|NO WAIT|NOWAIT}〕

(4) オペランド

(a) 〔認可識別子.〕表識別子〔,〔認可識別子.〕表識別子〕…

認可識別子

排他制御をする表の所有者の認可識別子を指定します。

表識別子

排他制御をする表の名称を指定します。

表識別子にビュー表を指定した場合は,ビュー表の基になる実表に対して排他制御をします。この場合,ビュー表には排他制御はしません。

表識別子に一時表を指定した場合,指定は無視されます。

表名は最大128個指定できます。また,表名は重複してもかまいません。

(b) 〔IN SHARE MODE〕

排他制御をする表のデータを,ほかのユーザが参照することは許すが,更新することは許さない(共用モード)場合に指定します。このオペランドを指定したLOCK文発行後の表アクセス時に,共用モードの行,及びキー値の排他資源が削減されます。

(c) 〔IN EXCLUSIVE MODE〕

排他制御をする表のデータを,ほかのユーザが参照することも,更新することも許さない(排他モード)場合に指定します。ただし,ほかのユーザが排他オプションWITHOUT LOCK NOWAITを指定して検索した場合を除きます。このオペランドを指定したLOCK文発行後の表アクセス時に,共用モードの行,キー値,及び排他モードの行,キー値の排他資源が削減されます。

(d) 〔UNTIL DISCONNECT〕

DISCONNECTするまで排他制御をする場合に指定します。省略した場合,トランザクションの終了まで排他制御をします。

(e) {WITH ROLLBACK|NO WAIT|NOWAIT}

ほかのユーザと排他が競合した場合,待たないでエラーを受け取るときに指定します。省略した場合,排他が競合したときは,排他が解除されるまで,又はシステム定義のpd_lck_wait_timeoutオペランドで指定した時間まで待ちます。

WITH ROLLBACK

排他制御をする表をほかのユーザが使用している場合,トランザクションを取り消して無効にするときに指定します。

NO WAIT

排他制御をする表が他ユーザで使用されているとき,トランザクションを取り消さないでこのSQL文を無効にする場合,指定します。

NOWAIT

NO WAITを指定した場合と同じです。

(5) 共通規則

  1. 排他制御をする実表が重複する場合は,重複排除されます。一つのLOCK文で排他制御できる実表の合計は,最大128個です。

  2. データディクショナリ表には,排他制御はできません。

  3. 排他制御をしているとき,更にLOCK文を実行した場合,排他期間は長い方へ,又排他レベルは強い方へ遷移します。このため,排他期間を短くする,又は排他レベルを下げる指定をしたLOCK文を実行しても,排他期間及び排他レベルは変更されません。

    排他期間の長さと排他レベルの強弱を次の図に示します。

    図5‒1 排他期間の長さと排他レベルの強弱

    [図データ]

  4. LOCK文発行後にPURGE TABLE文を実行すると,排他レベルがEXCLUSIVEに遷移します。この場合,PURGE TABLE文実行前にトランザクションを終了させると,PURGE TABLE文を実行してもEXCLUSIVEには遷移しません。

  5. UNTIL DISCONNECTを指定して排他制御をしている表が,DROP TABLE文などで削除された場合,その表に対する排他制御はHiRDBシステムによって自動的に解除されます。

(6) 留意事項

  1. 通常,HiRDBが排他制御をするので,排他制御の単位を変える場合だけLOCK文を使用してください。

  2. UNTIL DISCONNECTを指定した場合,クライアント環境定義のPDXAMODEの指定によって,排他制御の期間が異なります。PDXAMODE及び排他制御については,マニュアル「HiRDB UAP開発ガイド」を参照してください。

  3. 共用表に対して排他モード(IN EXCLUSIVE MODE)でLOCK文を実行した場合,共用表のほかに次のRDエリアも排他制御の対象となります。

    • 共用表を格納しているRDエリア

    • 共用表にインデクスが定義されている場合,そのインデクスを格納しているRDエリア

    共用表に対する排他制御については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

(7) 使用例

同じトランザクション中で,在庫表(ZAIKO)を全件検索するため,この表に共用モードの排他制御をします。

    LOCK TABLE ZAIKO IN SHARE MODE