5.4.3 同期取得時点に回復する場合(関連RDエリアあり)

同期取得時点に回復する場合について説明します。関連するRDエリアがあるため,それらも一緒に同期取得時点に戻します。

<この項の構成>
(1) 障害発生時の状況
(2) 障害回復の手順
(3) 障害回復時のインメモリデータバッファ,インメモリRDエリアおよびインメモリ化していないRDエリアの状態遷移

(1) 障害発生時の状況

RDDATA01(表格納RDエリア),RDLOB01(LOBデータ格納RDエリア)およびRDIDX01(インデクス格納RDエリア)をインメモリ化しました。RDLOB02(LOBデータ格納RDエリア)はインメモリ化していません。

障害発生時の状況を次の図に示します。

図5-10 障害発生時の状況(バッファ障害を同期取得時点に回復する場合(関連RDエリアあり))

[図データ]

[説明]
  1. RDDATA01,RDLOB01およびRDIDX01をインメモリ化しました。また,このとき,関連するRDエリアRDLOB02も一緒にバックアップを取得しました。
  2. 更新業務を実行し,インメモリデータバッファとRDLOB02のデータを更新しました。
  3. pdhold -bコマンドでインメモリデータバッファとRDエリアの同期を取りました。このとき,RDDATA01およびRDLOB01への書き込みは正常にできましたが,RDIDX01への書き込み中にバッファ障害になりました。
このときのインメモリデータバッファと各RDエリアの状態を次に示します。
  • インメモリデータバッファの状態:バッファ障害
  • RDDATA01の状態:正常(最新の状態)
  • RDLOB01の状態:正常(最新の状態)
  • RDIDX01の状態:障害閉塞状態(同期取得時(インメモリ化時)の状態)
  • RDLOB02の状態:正常(最新の状態)

(2) 障害回復の手順

pdrstrコマンドでRDDATA01,RDLOB01,RDIDX01およびRDLOB02を同期取得時点(インメモリ化時点)に回復します。そのあとに,RDDATA01,RDLOB01およびRDIDX01のデータをインメモリデータバッファに再度インメモリ化します。

障害回復の手順を次の図に示します。

図5-11 障害回復の手順(バッファ障害を同期取得時点に回復する場合(関連RDエリアあり))

[図データ]

[説明]
  1. RDDATA01,RDLOB01およびRDIDX01のインメモリ化を解除します。
  2. バックアップファイルを使ってRDDATA01,RDLOB01,RDIDX01およびRDLOB02を同期取得時点に回復します。
  3. RDDATA01,RDLOB01およびRDIDX01を再度インメモリ化します。

コマンドの実行手順を次に示します。

  1. RDDATA01およびRDLOB01の閉塞を解除します。

    pdrels -r RDDATA01,RDLOB01

    pdhold -bコマンドを実行したため,RDDATA01およびRDLOB01が参照可能バックアップ閉塞状態になっています。インメモリ化を解除するにはコマンド閉塞クローズ状態になっている必要があるため,いったん参照可能バックアップ閉塞を解除しています。
  2. RDDATA01,RDLOB01およびRDLOB02をコマンド閉塞クローズ状態にします。

    pdhold -r RDDATA01,RDLOB01,RDLOB02 -c

  3. RDDATA01およびRDLOB01のインメモリ化を解除します。

    pdmemdb -k rels -r RDDATA01,RDLOB01

  4. RDIDX01をクローズ状態にします。

    pdclose -r RDIDX01

    インメモリ化を強制解除するには,RDエリアの状態が障害閉塞クローズ状態になっている必要があるため,ここでRDIDX01をクローズしています。
  5. RDIDX01のインメモリ化を強制的に解除します。

    pdmemdb -k rels -r RDIDX01 -d

  6. RDDATA01,RDLOB01,RDIDX01,およびRDLOB02をバックアップファイルから同期取得時点に回復します。

    pdrstr -m C:¥rdarea¥mast¥mast01 -b C:¥usr¥hirdb¥pdcopy¥backup01
    -p C:¥usr¥hirdb¥pdrstr¥list¥list01 -r RDDATA01,RDLOB01,RDIDX01,RDLOB02

  7. RDIDX01の障害閉塞クローズを解除します。

    pdrels -r RDIDX01 -o

    再度インメモリ化するには,RDエリアの状態がコマンド閉塞クローズ状態になっている必要があるため,ここでいったんRDIDX01の障害閉塞クローズを解除しています。
  8. RDIDX01をコマンド閉塞クローズ状態にします。

    pdhold -r RDIDX01 -c

  9. RDDATA01,RDLOB01およびRDIDX01を再度インメモリ化します。

    pdmemdb -k stay -r RDDATA01,RDLOB01,RDIDX01

    これによって,インメモリデータバッファは同期取得時点の状態に回復されました。
  10. RDDATA01,RDLOB01,RDIDX01,およびRDLOB02の閉塞クローズを解除します。

    pdrels -r RDDATA01,RDLOB01,RDIDX01,RDLOB02 -o

    これによって,業務が再開できるようになりました。

(3) 障害回復時のインメモリデータバッファ,インメモリRDエリアおよびインメモリ化していないRDエリアの状態遷移

障害回復時,障害回復時のインメモリデータバッファ,インメモリRDエリアおよびインメモリ化していないRDエリアの状態は次の表のように遷移します。表の項番は,「(2)障害回復の手順」の実行手順の番号と対応しています。なお,表中の実行コマンドは,一部オプションを省略しています。

表5-5 障害回復時のインメモリデータバッファ,インメモリRDエリアおよびインメモリ化していないRDエリアの状態遷移

項番実行コマンド正常に書き込みできたRDエリア正常に書き込みできなかったRDエリアインメモリ化していないRDエリア
RDDATA01,RDLOB01RDIDX01RDLOB02
コマンド実行後のバッファの状態※1コマンド実行後のRDエリアの状態※2コマンド実行後のバッファの状態※1コマンド実行後のRDエリアの状態※2コマンド実行後のRDエリアの状態
DB同期状態参照可能バックアップ閉塞状態バッファ障害状態障害閉塞かつオープン状態オープン状態
1pdrels -r RDDATA01,RDLOB01オープン状態
2pdhold -r RDDATA01,RDLOB01,RDLOB02 -cコマンド閉塞かつクローズ状態コマンド閉塞かつクローズ状態
3pdmemdb -k rels -r RDDATA01,RDLOB01未使用状態
4pdclose -r RDIDX01障害閉塞かつクローズ状態
5pdmemdb -k rels -r RDIDX01 -d未使用状態
6pdrstr -r RDDATA01,RDLOB01,RDIDX01,RDLOB02
7pdrels -r RDIDX01 -oオープン状態
8pdhold -r RDIDX01 -cコマンド閉塞かつクローズ状態
9pdmemdb -k stay -r RDDATA01,RDLOB01,RDIDX01DB同期状態DB同期状態
10pdrels -r RDDATA01,RDLOB01,RDIDX01,RDLOB02 -oオープン状態オープン状態オープン状態
(凡例)
↓:状態の変化なし
-:該当しない
注※1 バッファの状態とは,インメモリデータバッファの状態のことです。
注※2 RDエリアの状態とは,インメモリRDエリアの状態のことです。