pdholdRDエリアの閉塞

機能

指定したRDエリアを閉塞します。ただし,RDエリアを使用中の場合は,使用の完了を待って閉塞します。

-r以外のオプションを指定しない閉塞を,「コマンド閉塞」といいます。

実行者

HiRDB管理者が実行できます。

形式

 pdhold  -r {RDエリア名〔,RDエリア名〕…|ALL}

     〔-c|-i|-b〔-w〕〔-u〕〕

オプション

RDエリア名 ~<識別子>((1~30))
閉塞するRDエリア名を指定します。
ALL
すべてのRDエリアを閉塞する場合に指定します。ただし,ほかのオプションとの組み合わせによって,閉塞されるRDエリアは次のようになります。
ほかのオプション閉塞されるRDエリア
-bリスト用RDエリアを除くすべてのRDエリア
上記以外マスタディレクトリ用RDエリアを除くすべてのRDエリア
<規則>
  1. RDエリアを指定する場合の規則については,「1.5.2 運用コマンド,ユティリティでのRDエリアの指定」を参照してください。
  2. -bオプションを指定した場合はマスタディレクトリ用RDエリアを指定できますが,それ以外の場合は指定できません。また,-bオプション指定時は,リスト用RDエリアは指定できません。
  3. ユーザ用RDエリア又はユーザLOB用RDエリアを指定する場合は,データディクショナリ用RDエリアが次のどちらかの状態でなければなりません。
    • オープン状態,かつ閉塞解除状態
    • オープン状態,かつpdholdコマンドによる閉塞状態
  4. -cオプションを指定して,RDエリア名にデータディクショナリ用RDエリアとユーザ用RDエリア又はユーザLOB用RDエリアを同時に指定する場合は,データディクショナリ用RDエリアを最後に指定してください。

閉塞状態にした後,RDエリアをクローズします。これを「クローズ,コマンド閉塞」といいます。

このオプションを指定しなかった場合は,RDエリアの閉塞だけをします。

閉塞したRDエリアに対して,ユーザからの参照を許可する場合に指定します。これを「参照可能コマンド閉塞」といいます。

このオプションを指定しなかった場合は,閉塞したRDエリアへの参照はできません。

バックアップ閉塞にする場合に指定します。

バックアップ閉塞とは,オンライン中でもバックアップを取得できる閉塞状態のことをいいます。次の場合にRDエリアをバックアップ閉塞にします。

バックアップ閉塞には,次の四つの状態があります。

  1. 参照可能バックアップ閉塞(-b指定)
  2. 参照可能バックアップ閉塞(更新WAITモード)(-b,-w指定)
  3. 更新可能バックアップ閉塞(-b,-u指定)
  4. 更新可能バックアップ閉塞(WAITモード)(-b,-w,-u指定)

1と2をデータベースの静止化といいます。

各バックアップ閉塞の説明を次に示します。

参照可能バックアップ閉塞
閉塞解除するまで更新トランザクションをエラーにしてもよい場合,参照可能バックアップ閉塞にします。
<留意事項>
  1. 参照可能バックアップ閉塞の場合,更新トランザクションとのデッドロックは発生しません。
  2. この状態で取得したバックアップは,システムログを使用しなくても,バックアップ取得時点にデータベースを回復できます。また,バックアップ閉塞直前からのシステムログを使用すると,障害発生時点の状態にデータベースを回復できます。
  3. 参照可能バックアップ閉塞のRDエリアは参照はできますが,閉塞解除するまでそのRDエリアへの更新はSQLエラー(-920)となります。特に,ログレスモードの更新トランザクションがエラーで終了した場合は,既に更新したRDエリアがあると,そのRDエリアは障害閉塞となるため,注意してください。
参照可能バックアップ閉塞(更新WAITモード)
閉塞解除するまで更新トランザクションを待たせてもよい場合に,参照可能バックアップ閉塞(更新WAITモード)にします。
<留意事項>
  1. この状態で取得したバックアップは,システムログを使用しなくても,バックアップ取得時点にデータベースを回復できます。また,バックアップ閉塞直前からのシステムログを使用すると,障害発生時点の状態にデータベースを回復できます。
  2. 参照可能バックアップ閉塞(更新WAITモード)のRDエリアは参照はできますが,閉塞解除するまでそのRDエリアへの更新は,バックアップ閉塞のRDエリアの排他で待ち状態となります。したがって,クライアント環境定義のPDLCKWAITTIME(省略時はシステム定義のpd_lck_wait_timeout),及びPDCWAITTIMEには,バックアップ閉塞中の時間以上を設定する必要があります。タイムアウトとなった場合,更新トランザクションはSQLエラー(-770)となります。
  3. 参照可能バックアップ閉塞(更新WAITモード)にした場合,更新トランザクションとの間で,デッドロックが発生することがあります。システム定義にpd_deadlock_priority_use=Yを指定し,更にpd_command_deadlock_priorityオペランドにデッドロックプライオリティ値を指定することで,デッドロック発生時に更新トランザクションと運用コマンドのどちらを優先させるかを選択できます。
  4. デッドロックが発生した場合,pdholdコマンドが取得したバックアップ閉塞の排他はすべて解除され,再度同じバックアップ閉塞処理が繰り返されます。このリトライ処理は,最大5回繰り返します。5回目のリトライ処理でもデッドロックが発生する場合は,pdholdコマンドが掛けたバックアップ閉塞をすべて解除し,エラー終了します。
  5. ログレスモードの更新トランザクションがタイムアウト又はデッドロックでエラー終了した場合は,既に更新したRDエリアがあると,そのRDエリアは障害閉塞となるため,注意してください。
更新可能バックアップ閉塞
すぐにバックアップ閉塞にしたい場合で,かつバックアップ閉塞中もそのRDエリアに対してアクセスしたいときに更新可能バックアップ閉塞にします。ほかのコマンドが実行中の場合,そのコマンドが完了した後,更新可能バックアップ閉塞にするpdholdコマンドが実行できるようになります。
<留意事項>
  1. 更新可能バックアップ閉塞にした場合,そのRDエリアに対して参照及び更新ができます。
  2. 更新可能バックアップ閉塞は,閉塞解除するまで更新バッファのデータベース反映時に,ページの物理ログが出力されます。このため,次の点に注意してください。
    (a) システムログファイルの容量が不足していないか確認してください。
    (b) 大量更新中には,更新可能バックアップ閉塞にしないでください(プラグインインデクスの更新も大量更新となります)。
    (c) バックアップが完了したら,すぐに更新可能バックアップ閉塞を解除してください。
  3. 更新トランザクション実行中でも,pdholdコマンドを実行すると更新可能バックアップ閉塞状態にできます。
  4. この状態で取得したバックアップを使用してデータベースを回復するときは,バックアップ及び前回のシンクポイント以降のシステムログが必要になります。ただし,前回のシンクポイント以降に更新前ログ取得モード又はログレスモードの更新トランザクションを実行している場合は,このバックアップでは回復できません。
  5. 更新可能バックアップ閉塞中に共用RDエリアを更新すると,物理ログが出力されます。そのため,更新可能バックアップ閉塞状態以外の共用RDエリアに対する更新に比べ,出力されるログの量が増加します。更新可能バックアップ閉塞状態の共用RDエリアのバックアップを取得する場合は,更新業務を実行しない,又は,更新量を減らすことをお勧めします。
  6. 更新可能バックアップ閉塞中のRDエリアに対する更新トランザクションが更新前ログ取得モード又はログレスモードの場合,バックアップ閉塞のRDエリアの排他で待ち状態となります。この場合,クライアント環境定義のPDLCKWAITTIME(省略時はシステム定義のpd_lck_wait_timeout),及びPDCWAITTIMEには,バックアップ閉塞中の時間以上を設定する必要があります。タイムアウトとなった場合,更新前ログ取得モード又はログレスモードの更新トランザクションはエラーとなります。
  7. ログレスモードの更新トランザクションがタイムアウトでエラー終了した場合は,既に更新したRDエリアがあると,そのRDエリアは障害閉塞となるため,注意してください。
更新可能バックアップ閉塞(WAITモード)
更新トランザクションの完了を待ってバックアップ閉塞にしてもよい場合で,かつバックアップ閉塞中にそのRDエリアにアクセスしたいときに更新可能バックアップ閉塞(WAITモード)にします。
<留意事項>
  1. 更新可能バックアップ閉塞(WAITモード)中に,更新バッファの内容がRDエリアに反映された場合,バックアップ閉塞解除時に警告メッセージ(KFPH00157-W)が出力されます。
  2. 更新可能バックアップ閉塞(WAITモード)にした場合,そのRDエリアに対しての参照及び更新ができます。
  3. 更新可能バックアップ閉塞(WAITモード)は,閉塞解除するまで更新バッファのデータベース反映時に,ページの物理ログが出力されます。このため,次の点に注意してください。
    (a) システムログファイルの容量が不足していないか確認してください。
    (b) 大量更新中には,更新可能バックアップ閉塞にしないでください(プラグインインデクスの更新も大量更新となります)。
    (c) バックアップが完了したら,すぐに更新可能バックアップ閉塞を解除してください。
  4. この状態で取得したバックアップを使用してデータベースを回復する場合,バックアップ閉塞解除時に警告メッセージ(KFPH00157-W)が出力されていなければ,システムログがなくてもバックアップ閉塞時点に回復できます。それ以外の時点に回復する場合,RDエリア間で整合性がとれた状態に回復する場合,又は警告メッセージ(KFPH00157-W)が出力された場合は,バックアップ閉塞直前からのシステムログを使用して回復する必要があります。
    ただし,-M s指定のpdcopyでバックアップを取得した場合,警告メッセージ(KFPH00157-W)の有無に関係なく,前回のシンクポイント以降のシステムログが必要となります。
  5. 更新可能バックアップ閉塞中のRDエリアに対する更新トランザクションが更新前ログ取得モード又はログレスモードの場合,バックアップ閉塞のRDエリアの排他で待ち状態となります。この場合,クライアント環境定義のPDLCKWAITTIME(省略時はシステム定義のpd_lck_wait_timeout),及びPDCWAITTIMEには,バックアップ閉塞中の時間以上を設定する必要があります。
  6. 更新可能バックアップ閉塞(WAITモード)にした場合,更新前ログ取得モード又はログレスモードの更新トランザクションとの間でデッドロックが発生することがあります。システム定義にpd_deadlock_priority_use=Yを指定し,更にpd_command_deadlock_priorityオペランドにデッドロックプライオリティ値を指定することで,デッドロック発生時に更新トランザクションと運用コマンドのどちらを優先させるかを選択できます。
  7. デッドロックが発生した場合,pdholdコマンドが取得したバックアップ閉塞の排他はすべて解除され,再度同じバックアップ閉塞処理が繰り返されます。このリトライ処理は,最大5回繰り返します。5回目のリトライ処理でもデッドロックが発生する場合は,pdholdコマンドが掛けたバックアップ閉塞をすべて解除し,エラー終了します。
  8. ログレスモードの更新トランザクションがタイムアウト又はデッドロックでエラー終了した場合は,既に更新したRDエリアがあると,そのRDエリアは障害閉塞となるため,注意してください。
  9. 更新可能バックアップ閉塞中に共用RDエリアを更新すると,物理ログが出力されます。そのため,更新可能バックアップ閉塞状態以外の共用RDエリアに対する更新に比べ,出力されるログの量が増加します。更新可能バックアップ閉塞状態の共用RDエリアのバックアップを取得する場合は,更新業務を実行しない,又は,更新量を減らすことをお勧めします。
-w
参照可能バックアップ閉塞(更新WAITモード),又は更新可能バックアップ閉塞(WAITモード)にする場合に指定します。
-u
更新可能バックアップ閉塞にする場合に指定します。
更新バックアップ閉塞のRDエリアに対しては,閉塞中でも参照及び更新ができます。ただし,ログレスモードのUAP,ユティリティなどの更新は,閉塞解除されるまで待ち状態となります。
このオプションを省略した場合は,参照可能バックアップ閉塞となります。
<バックアップ閉塞に共通する留意事項>
  1. バックアップ閉塞中は,pdmod(RDエリアの拡張,再初期化,属性変更),pdload,及びpdrorg(リロード)は実行できません。
  2. 参照可能バックアップ閉塞(更新WAITモード),更新可能バックアップ閉塞,及び更新可能バックアップ閉塞(WAITモード)のRDエリアは,リランのときに状態は引き継がれません。
  3. ログレスモードでの運用時に更新可能バックアップ閉塞にする場合は,事前にpdlogswap -d sys -wコマンドでシステムログファイルのスワップ及びシンクポイントの有効化を必ずしてください。しなかった場合に障害が発生したときは,pdrstrで範囲指定で回復することになります。
  4. 更新可能バックアップ閉塞でのバックアップ取得中にHiRDBを終了又は再開始した場合,取得していたバックアップは保証されなくなります。この場合,再度バックアップを取得し直してください。
  5. 参照可能バックアップ閉塞(更新WAITモード)の場合は,pdholdコマンドと更新トランザクションとの間で,また,更新可能バックアップ閉塞の場合は,pdholdコマンドとログレスモードの更新トランザクションとの間でデッドロックが発生することがあります。デッドロックが発生した場合,RDエリアが既に参照可能バックアップ閉塞(更新WAITモード),又は更新可能バックアップ閉塞となっていれば,そのRDエリアをpdrelsコマンドで閉塞解除した後,再度pdholdコマンドを実行してください。RDエリアが参照可能バックアップ閉塞(更新WAITモード),又は更新可能バックアップ閉塞になっていない場合,時間を空けてから再度pdholdコマンドを実行してください。
  6. 参照可能バックアップ閉塞,参照可能バックアップ閉塞(更新WAITモード),又は更新可能バックアップ閉塞(WAITモード)にする場合,更新トランザクションが実行中のときは,その更新トランザクションが終了するまでpdholdコマンドは待ち状態となります。この待ちでは排他待ち時間を監視しないで,実行中の更新トランザクションの終了を待ち続けます。この待ちの間,同一RDエリアに対する後続のトランザクションは排他待ちになり,待ち時間がクライアント環境定義のPDLCKWAITTIME(省略時はシステム定義のpd_lck_wait_timeout),又はPDCWAITTIME以上になるとタイムアウトします。待ち状態となっているpdholdコマンドを終了したい場合は,pdcancelコマンドでシングルサーバプロセス,又はバックエンドサーバプロセスを終了してください。pdcancelの-uオプションのUAP識別子には文字列pdholdを指定します。
  7. バックアップ閉塞にするpdholdコマンドが,ほかのコマンドが掛けた資源「RDエリア状態」の排他によって待ち状態になった場合,システム定義のpd_lck_wait_timeoutオペランドでのタイムアウトにはなりません。この場合,ほかのコマンドでの排他が解除されるまで待ち状態となります。待ち状態となっているpdholdコマンドを終了したい場合は,pdcancelコマンドでシングルサーバプロセス,又はバックエンドサーバプロセスを終了してください。
  8. 参照可能閉塞になっているRDエリアは,バックアップ閉塞にはできません。RDエリアの状態は,pddblsコマンドで確認できます。
  9. RDエリアの自動増分を適用している場合,そのRDエリアを更新可能バックアップ閉塞,又は更新可能バックアップ閉塞(WAITモード)にすると,RDエリアの自動増分が抑止されます。RDエリアの自動増分の抑止状態を解除したい場合は,pdrelsコマンドを実行して,更新可能バックアップ閉塞,及び更新可能バックアップ閉塞(WAITモード)を解除してください。
  10. RDエリアの自動増分を適用している場合,そのRDエリアを更新可能バックアップ閉塞,又は更新可能バックアップ閉塞(WAITモード)にするときは,事前にデータベース状態解析ユティリティで十分な未使用領域があることを確認してください。

規則

  1. pdholdコマンドは,HiRDBが稼働中のときだけ実行できます。
  2. pdholdコマンドは,シングルサーバ又はシステムマネジャがあるサーバマシンで実行してください。
  3. pdholdコマンドは,RDエリアに対してモードEXで,-i又は-bオプション指定の場合はモードPRで排他制御をします。そのため,指定したRDエリアにほかのトランザクションがアクセスしている場合は,そのトランザクションの終了までpdholdコマンドは待ち状態となります。ただし,-i又は-bオプション指定の場合は,更新系トランザクションがアクセスしているときだけ待ち状態となります。RDエリアの閉塞状態とトランザクションとの関係を次の表に示します。

    表2-4 RDエリアの閉塞状態とトランザクションとの関係

    RDエリアの閉塞状態トランザクション
    参照※1更新※2更新ログレス※3
    コマンド閉塞待ち待ち待ち
    エラーエラーエラー
    参照可能閉塞待ちなし待ち待ち
    待ちなし※4エラーエラー
    参照可能バックアップ閉塞待ちなし待ち※5待ち※5
    待ちなし※4エラーエラー
    参照可能バックアップ閉塞(更新WAITモード)待ちなし待ち※5待ち※5
    待ちなし※4待ち待ち
    更新可能バックアップ閉塞待ちなし待ちなし待ちなし
    待ちなし待ちなし待ち
    更新可能バックアップ閉塞(WAITモード)待ちなし待ち※5待ち※5
    待ちなし※4待ちなし待ち
    上段は,トランザクションが先にRDエリアに排他を掛けた場合を示しています。
    下段は,pdholdコマンドが先にRDエリアに排他を掛けた場合を示しています。
    例えば,参照UAPが先にRDエリアに排他を掛けた場合,そのRDエリアをpdholdコマンドでコマンド閉塞にしようとすると,pdholdコマンドが待ちとなります。また,pdholdコマンド(コマンド閉塞)が先にRDエリアに排他を掛けた場合,そのRDエリアへの参照UAPを実行しようとすると,参照UAPがエラーとなります。
    注※1
    参照トランザクションとは,RDエリアにSR又はPRの排他が掛かるSQLを実行するトランザクションのことをいいます。例えば,WITH SHARE指定のあるSELECT文はSRの排他を掛けるため,参照トランザクションとなります。
    注※2
    更新トランザクションとは,RDエリアにSU,PU,又はEXの排他が掛かるSQLを実行するトランザクションのことをいいます。例えば,WITH EXCLUSIVE指定のあるSELECT文はSUの排他を掛けるため,更新トランザクションとなります。
    注※3
    クライアント環境定義のPDDBLOGにNOを指定した,ログレスモードのトランザクションのことをいいます。
    注※4
    更新トランザクションによってコマンドが待ち状態のときは,後続の参照トランザクションも待ちになります。
    注※5
    排他待ち時間を監視しないで,実行中の更新トランザクションの終了を待ち続けます。この待ちの間,同一RDエリアに対する後続のトランザクションは排他待ちになり,待ち時間がクライアント環境定義のPDLCKWAITTIME(省略時はシステム定義のpd_lck_wait_timeout),又はPDCWAITTIME以上になるとタイムアウトします。待ち状態となっているpdholdコマンドを終了したい場合は,pdcancelコマンドでシングルサーバプロセス,又はバックエンドサーバプロセスを終了してください。pdcancelの-uオプションのUAP識別子には文字列pdholdを指定します。
  4. 閉塞処置中のトランザクションの扱いを次の表に示します。なお,閉塞処理中とは,ACCEPT-HOLD(pddblsコマンドでの実行結果のRDエリアの状態)を指します。

    表2-5 閉塞処置中のトランザクションの扱い

    閉塞処理中の受付内容参照トランザクション更新トランザクション
    コマンド閉塞エラーエラー
    参照可能閉塞待ちエラー
    参照可能バックアップ閉塞待ちエラー
    参照可能バックアップ閉塞(更新WAITモード)待ち待ち
    更新可能バックアップ閉塞待ちなし待ちなし
    更新可能バックアップ閉塞(WAITモード)待ち待ち
    注※
    更新可能バックアップ閉塞は,RDエリアに排他を掛けないため,待ちにはなりません。
  5. データ未完状態の改竄防止表が格納されているRDエリアは,参照可能コマンド閉塞(-i指定),及びバックアップ閉塞(-b指定)にはできません。データ未完状態の改竄防止表に対して,pdrorgで表へのリロードを実行すると,データ未完状態は解除されます。解除された後に,参照可能コマンド閉塞,又はバックアップ閉塞にしてください。
  6. 共用RDエリアに対してpdholdコマンドを実行した場合,全バックエンドサーバに排他を掛けます。このため,該当するRDエリアへのアクセスを複数同時に実行している場合,グローバルデッドロックが発生し,タイムアウトする可能性があります。グローバルデッドロックが発生した場合,再度pdholdコマンドを実行してください。
  7. インメモリRDエリアにpdholdコマンドを実行した場合のHiRDBの処理を次の表に示します。

    表2-6 インメモリRDエリアにpdholdコマンドを実行した場合のHiRDBの処理

    pdholdコマンドの種類pdholdコマンド実行時のHiRDBの処理
    pdhold -b(参照可能バックアップ閉塞)インメモリデータバッファとインメモリRDエリアの同期処理を行います(DB同期状態になります)。
    このとき,インメモリRDエリアは,各オプションの指定に従った閉塞状態になります。
    pdhold -b -w(参照可能バックアップ閉塞(更新WAITモード))
    pdhold -c
    pdhold -b -u(更新可能バックアップ閉塞)pdholdコマンドがエラーになります。
    pdhold -b -u -w(更新可能バックアップ閉塞(WAITモード))
    pdholdインメモリデータバッファとインメモリRDエリアの同期処理を行いません。
    インメモリRDエリアは,各オプションの指定に従った閉塞状態になります。
    pdhold -i

注意事項

  1. pdholdコマンドの結果は,pddblsコマンドで確認できます。
  2. pdholdコマンドのリターンコードを次に示します。
    0:正常終了
    4:警告終了(一部のRDエリアの処理がエラー終了)
    8:異常終了
    12:異常終了(エラーメッセージを表示できない事象が発生)
    12の場合,シングルサーバ又はディクショナリサーバがあるホストのイベントログ中のエラーメッセージを参照して,エラーの要因を取り除いた後,再度コマンドを実行してください。イベントログ中にエラーメッセージが出力されていない場合は保守員に連絡してください。