スケーラブルデータベースサーバ HiRDB Version 8 バッチ高速化機能

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

5.4.1 最新の状態に回復する場合

最新の状態に回復する場合について説明します。

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

(1) 障害発生時の状況

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

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

図5-6 障害発生時の状況(バッファ障害を最新の状態に回復する場合)

[図データ]

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

(2) 障害回復の手順

pdrstrコマンドでRDDATA01,RDLOB01およびRDIDX01を最新の状態に回復します。そのあとに,RDDATA01,RDLOB01およびRDIDX01を再度インメモリ化します。

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

図5-7 障害回復の手順(バッファ障害を最新の状態に回復する場合)

[図データ]

[説明]
  1. RDDATA01,RDLOB01およびRDIDX01のインメモリ化を解除します。
  2. アンロードログファイルを使ってRDDATA01,RDLOB01およびRDIDX01を最新の状態に回復します(RDDATA01,RDLOB01およびRDIDX01のデータはバックアップ取得時点と同じ状態であるため,回復時にバックアップファイルは使用しません)。
    ただし,RDエリア障害とバッファ障害の両方が発生している場合は,バックアップファイルとアンロードログファイルを使ってRDDATA01,RDLOB01およびRDIDX01を回復します。
  3. RDDATA01およびRDIDX01のデータを再度インメモリ化します。

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

  1. RDDATA01,RDLOB01およびRDIDX01をクローズ状態にします。
     
     pdclose -r RDDATA01,RDLOB01,RDIDX01
     
    インメモリ化を強制解除するには,RDエリアの状態が障害閉塞クローズ状態になっている必要があるため,ここでRDDATA01,RDLOB01およびRDIDX01をクローズしています。
  2. RDDATA01,RDLOB01およびRDIDX01のインメモリ化を強制的に解除します。
     
     pdmemdb -k rels -r RDDATA01,RDLOB01,RDIDX01 -d
     
  3. 現用のシステムログファイルを調べます。
     
     pdlogls -d sys
     
  4. システムログファイルをスワップします。
     
     pdlogswap -d sys -w
     
  5. 現用だったファイルの内容をアンロードします。
     
     pdlogunld -d sys -g log01 -o C:\usr\hirdb\pdlogunld\unldlog01
     
  6. RDDATA01,RDLOB01およびRDIDX01をアンロードログファイルから最新の状態に回復します。
     
     pdrstr -m C:\rdarea\mast\mast01 -d C:\usr\hirdb\pdlogunld
     -p C:\usr\hirdb\pdrstr\list\list01
     -w C:\tmp\sortwork -r RDDATA01,RDLOB01,RDIDX01
     
  7. RDDATA01,RDLOB01およびRDIDX01の障害閉塞クローズを解除します。
     
     pdrels -r RDDATA01,RDLOB01,RDIDX01 -o
     
    再度インメモリ化するには,RDエリアの状態がコマンド閉塞クローズ状態になっている必要があるため,ここでいったんRDDATA01,RDLOB01およびRDIDX01の障害閉塞クローズを解除しています。
  8. RDDATA01,RDLOB01およびRDIDX01をコマンド閉塞クローズ状態にします。
     
     pdhold -r RDDATA01,RDLOB01,RDIDX01 -c
     
  9. RDDATA01,RDLOB01およびRDIDX01を再度インメモリ化します。
     
     pdmemdb -k stay -r RDDATA01,RDLOB01,RDIDX01
     
    これによって,インメモリデータバッファは最新の状態に回復されました。
  10. RDDATA01,RDLOB01およびRDIDX01の閉塞クローズを解除します。
     
     pdrels -r RDDATA01,RDLOB01,RDIDX01 -o
     
    これによって,業務が再開できるようになりました。

RDエリア障害かつバッファ障害の場合
RDエリア障害とバッファ障害の両方が発生している場合は,手順6.でバックアップファイルとアンロードログファイルからRDエリアを最新の状態に回復してください。それ以外の手順については,バッファ障害の場合と同じです。

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

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

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

項番 実行コマンド コマンド実行後のバッファの状態※1 コマンド実行後のRDエリアの状態※2
RDDATA01,RDLOB01,RDIDX01
バッファ障害状態 障害閉塞かつオープン状態
1 pdclose -r RDDATA01,RDLOB01,RDIDX01 障害閉塞かつクローズ状態
2 pdmemdb -k rels -r RDDATA01,RDLOB01,RDIDX01 -d 未使用状態
3 pdlogls -d sys
4 pdlogswap -d sys -w
5 pdlogunld -d sys
6 pdrstr -r RDDATA01,RDLOB01,RDIDX01
7 pdrels -r RDDATA01,RDLOB01,RDIDX01 -o オープン状態
8 pdhold -r RDDATA01,RDLOB01,RDIDX01 -c コマンド閉塞かつクローズ状態
9 pdmemdb -k stay -r RDDATA01,RDLOB01,RDIDX01 DB同期状態
10 pdrels -r RDDATA01,RDLOB01,RDIDX01 -o オープン状態

(凡例)
↓:状態の変化なし
−:該当しない

注※1 バッファの状態とは,インメモリデータバッファの状態のことです。

注※2 RDエリアの状態とは,インメモリRDエリアの状態のことです。