5.4.3 同期取得時点に回復する場合(関連RDエリアあり)
同期取得時点に回復する場合について説明します。関連するRDエリアがあるため,それらも一緒に同期取得時点に戻します。
(1) 障害発生時の状況
RDDATA01(表格納RDエリア),RDLOB01(LOBデータ格納RDエリア)およびRDIDX01(インデクス格納RDエリア)をインメモリ化しました。RDLOB02(LOBデータ格納RDエリア)はインメモリ化していません。
障害発生時の状況を次の図に示します。
- [説明]
-
-
RDDATA01,RDLOB01およびRDIDX01をインメモリ化しました。また,このとき,関連するRDエリアRDLOB02も一緒にバックアップを取得しました。
-
更新業務を実行し,インメモリデータバッファとRDLOB02のデータを更新しました。
-
pdhold -bコマンドでインメモリデータバッファとRDエリアの同期を取りました。このとき,RDDATA01およびRDLOB01への書き込みは正常にできましたが,RDIDX01への書き込み中にバッファ障害になりました。
このときのインメモリデータバッファと各RDエリアの状態を次に示します。
-
インメモリデータバッファの状態:バッファ障害
-
RDDATA01の状態:正常(最新の状態)
-
RDLOB01の状態:正常(最新の状態)
-
RDIDX01の状態:障害閉塞状態(同期取得時(インメモリ化時)の状態)
-
RDLOB02の状態:正常(最新の状態)
-
(2) 障害回復の手順
pdrstrコマンドでRDDATA01,RDLOB01,RDIDX01およびRDLOB02を同期取得時点(インメモリ化時点)に回復します。そのあとに,RDDATA01,RDLOB01およびRDIDX01のデータをインメモリデータバッファに再度インメモリ化します。
障害回復の手順を次の図に示します。
- [説明]
-
-
RDDATA01,RDLOB01およびRDIDX01のインメモリ化を解除します。
-
バックアップファイルを使ってRDDATA01,RDLOB01,RDIDX01およびRDLOB02を同期取得時点に回復します。
-
RDDATA01,RDLOB01およびRDIDX01を再度インメモリ化します。
-
コマンドの実行手順を次に示します。
-
RDDATA01およびRDLOB01の閉塞を解除します。
pdrels -r RDDATA01,RDLOB01
pdhold -bコマンドを実行したため,RDDATA01およびRDLOB01が参照可能バックアップ閉塞状態になっています。インメモリ化を解除するにはコマンド閉塞クローズ状態になっている必要があるため,いったん参照可能バックアップ閉塞を解除しています。
-
RDDATA01,RDLOB01およびRDLOB02をコマンド閉塞クローズ状態にします。
pdhold -r RDDATA01,RDLOB01,RDLOB02 -c
-
RDDATA01およびRDLOB01のインメモリ化を解除します。
pdmemdb -k rels -r RDDATA01,RDLOB01
-
RDIDX01をクローズ状態にします。
pdclose -r RDIDX01
インメモリ化を強制解除するには,RDエリアの状態が障害閉塞クローズ状態になっている必要があるため,ここでRDIDX01をクローズしています。
-
RDIDX01のインメモリ化を強制的に解除します。
pdmemdb -k rels -r RDIDX01 -d
-
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
-
RDIDX01の障害閉塞クローズを解除します。
pdrels -r RDIDX01 -o
再度インメモリ化するには,RDエリアの状態がコマンド閉塞クローズ状態になっている必要があるため,ここでいったんRDIDX01の障害閉塞クローズを解除しています。
-
RDIDX01をコマンド閉塞クローズ状態にします。
pdhold -r RDIDX01 -c
-
RDDATA01,RDLOB01およびRDIDX01を再度インメモリ化します。
pdmemdb -k stay -r RDDATA01,RDLOB01,RDIDX01
これによって,インメモリデータバッファは同期取得時点の状態に回復されました。
-
RDDATA01,RDLOB01,RDIDX01,およびRDLOB02の閉塞クローズを解除します。
pdrels -r RDDATA01,RDLOB01,RDIDX01,RDLOB02 -o
これによって,業務が再開できるようになりました。
(3) 障害回復時のインメモリデータバッファ,インメモリRDエリアおよびインメモリ化していないRDエリアの状態遷移
障害回復時,障害回復時のインメモリデータバッファ,インメモリRDエリアおよびインメモリ化していないRDエリアの状態は次の表のように遷移します。表の項番は,「障害回復の手順」の実行手順の番号と対応しています。なお,表中の実行コマンドは,一部オプションを省略しています。
項番 |
実行コマンド |
正常に書き込みできたRDエリア |
正常に書き込みできなかったRDエリア |
インメモリ化していないRDエリア |
||
---|---|---|---|---|---|---|
RDDATA01,RDLOB01 |
RDIDX01 |
RDLOB02 |
||||
コマンド実行後のバッファの状態※1 |
コマンド実行後のRDエリアの状態※2 |
コマンド実行後のバッファの状態※1 |
コマンド実行後のRDエリアの状態※2 |
コマンド実行後のRDエリアの状態 |
||
− |
− |
DB同期状態 |
参照可能バックアップ閉塞状態 |
バッファ障害状態 |
障害閉塞かつオープン状態 |
オープン状態 |
1 |
pdrels -r RDDATA01,RDLOB01 |
↓ |
オープン状態 |
↓ |
↓ |
↓ |
2 |
pdhold -r RDDATA01,RDLOB01,RDLOB02 -c |
↓ |
コマンド閉塞かつクローズ状態 |
↓ |
↓ |
コマンド閉塞かつクローズ状態 |
3 |
pdmemdb -k rels -r RDDATA01,RDLOB01 |
未使用状態 |
↓ |
↓ |
↓ |
↓ |
4 |
pdclose -r RDIDX01 |
↓ |
↓ |
↓ |
障害閉塞かつクローズ状態 |
↓ |
5 |
pdmemdb -k rels -r RDIDX01 -d |
↓ |
↓ |
未使用状態 |
↓ |
↓ |
6 |
pdrstr -r RDDATA01,RDLOB01,RDIDX01,RDLOB02 |
↓ |
↓ |
↓ |
↓ |
↓ |
7 |
pdrels -r RDIDX01 -o |
↓ |
↓ |
↓ |
オープン状態 |
↓ |
8 |
pdhold -r RDIDX01 -c |
↓ |
↓ |
↓ |
コマンド閉塞かつクローズ状態 |
↓ |
9 |
pdmemdb -k stay -r RDDATA01,RDLOB01,RDIDX01 |
DB同期状態 |
↓ |
DB同期状態 |
↓ |
↓ |
10 |
pdrels -r RDDATA01,RDLOB01,RDIDX01,RDLOB02 -o |
↓ |
オープン状態 |
↓ |
オープン状態 |
オープン状態 |