スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス

[目次][索引][前へ][次へ]

LOCK文表の排他制御

機能

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

使用権限

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

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

形式

 
 LOCK TABLE 〔〔RDノード名称.〕認可識別子.〕表識別子
        〔,〔〔RDノード名称.〕認可識別子.〕表識別子〕…
        〔IN{SHARE|EXCLUSIVE } MODE〕
        UNTIL DISCONNECT
        〔{WITH ROLLBACKNO WAIT|NOWAIT}〕
 

オペランド

〔,〔〔RDノード名称.〕認可識別子.〕表識別子〕…

RDノード名称
アクセスをするRDノードのRDノード名称を指定します。

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

表識別子
排他制御をする表の名称を指定します。
表識別子に外部表を指定した場合,外部表に対応する外部のDBの表に対して排他制御をします。
表識別子にビュー表を指定した場合は,ビュー表の基になる実表,及びビュー表の基になる外部表に対応する,外部のDBの表に対して排他制御をします。この場合,ビュー表には排他制御はしません。
表名は最大64個指定できます。また,表名は重複してもかまいません。

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

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

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

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

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

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

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

共通規則

  1. 排他制御をする実表及び外部表が重複する場合は,重複排除されます。一つのLOCK文で排他制御できる実表及び外部表の合計は,最大64個です。
  2. データディクショナリ表には,排他制御はできません。
  3. 外部表に対する排他制御の動作は,外部のDBによって異なります。排他制御の動作については,「付録D 外部表を利用する場合の制限事項」を参照してください。
  4. 排他制御をしているとき,更にLOCK文を実行した場合,排他期間は長い方へ,又排他レベルは強い方へ遷移します。このため,排他期間を短くする,又は排他レベルを下げる指定をしたLOCK文を実行しても,排他期間及び排他レベルは変更されません。
    排他期間の長さと排他レベルの強弱を次の図に示します。

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

    [図データ]

  5. LOCK文発行後にPURGE TABLE文を実行すると,排他レベルがEXCLUSIVEに遷移します。この場合,PURGE TABLE文実行前にトランザクションを終了させると,PURGE TABLE文を実行してもEXCLUSIVEには遷移しません。
  6. UNTIL DISCONNECTを指定して排他制御をしている表が,DROP TABLE文などで削除された場合,その表に対する排他制御はHiRDBシステムによって自動的に解除されます。
  7. UNTIL DISCONNECTを指定した場合は,リモートデータベースアクセスでは使用できません。
  8. 外部表を排他制御する場合,外部表に対応する外部サーバの表に対して排他制御をします。外部サーバの表に対して排他制御ができなかった場合,LOCK文を実行したトランザクションはロールバックされます。

留意事項

  1. 通常,HiRDBが排他制御をするので,排他制御の単位を変える場合だけLOCK文を使用してください。
  2. UNTIL DISCONNECTを指定した場合,クライアント環境定義のPDXAMODEの指定によって,排他制御の期間が異なります。PDXAMODE及び排他制御については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
  3. 共用表に対して排他モード(IN EXCLUSIVE MODE)でLOCK文を実行した場合,共用表のほかに次のRDエリアも排他制御の対象となります。
    • 共用表を格納しているRDエリア
    • 共用表にインデクスが定義されている場合,そのインデクスを格納しているRDエリア
    共用表に対する排他制御については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。

使用例

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

 
    LOCK TABLE ZAIKO IN SHARE MODE