3.2.1 バッチ業務に適用する場合の運用
ここでは,インメモリデータ処理をバッチ業務に適用する場合の運用について,例題を使って説明します。
- 〈この項の構成〉
(1) 例題の条件
この例題での条件を次に示します。
-
二つのバッチ業務を連続して実行します。
-
バッチ業務でアクセスするRDエリアは,RDDATA01(表格納RDエリア)およびRDIDX01(インデクス格納RDエリア)です。
-
ログレスモードでバッチ業務を実行します。
運用の流れを次の図に示します。
(2) コマンド実行手順
コマンドの実行手順を次に示します。
(a) RDエリアをインメモリ化する
-
RDDATA01およびRDIDX01を閉塞クローズ状態にします。
pdhold -r RDDATA01,RDIDX01 -c
-
システムログファイルをスワップします。
pdlogswap -d sys -w
-
RDDATA01およびRDIDX01をインメモリ化します。
pdmemdb -k stay -r RDDATA01,RDIDX01
このとき,インメモリデータバッファとRDエリアは,DB同期状態になります。
なお,ここでは,複数のRDエリアをまとめてインメモリ化しています。この場合の注意事項については,「複数のRDエリアを一度にインメモリ化する場合の注意事項」を参照してください。
-
RDDATA01およびRDIDX01の閉塞クローズを解除します。
pdrels -r RDDATA01,RDIDX01 -o
-
RDDATA01およびRDIDX01のバックアップを取得します。
pdcopy -m C:\rdarea\mast\mast01 -M r -r RDDATA01,RDIDX01 -b C:\pdcopy\backup01 -p C:\pdcopy\list01
バックアップの取得方法については,マニュアル「HiRDB システム運用ガイド」を参照してください。
- ポイント
-
ここでは,RDエリアの閉塞クローズを解除してから参照可能モード(-M r)でバックアップを取得しています。通常と異なり,参照可能モードでバックアップを取得している間も更新ができます。このため,バックアップの取得中にバッチ業務を実行できます。インメモリRDエリアのバックアップ取得の仕組みについては,「バックアップを取得するときに気をつけること」を参照してください。
- 注意事項
-
インメモリ化するときのRDエリアの閉塞は,pdhold -cコマンドで行ってください。pdhold -cコマンドで閉塞クローズ状態にすることによって,ほかのトランザクションが対象RDエリアにアクセスできないようにします。
(b) 一つ目のバッチ業務を実行する
-
バッチ業務を実行します。
インメモリデータバッファの内容が更新され,DB非同期状態になります。
(c) インメモリデータバッファとRDエリアの同期を取る
-
インメモリデータバッファとRDエリアの同期を取ります。
pdhold -r RDDATA01,RDIDX01 -b
一つ目のバッチ業務が終わったら,インメモリデータバッファのデータをRDエリアに書き込み,インメモリデータバッファとRDエリアの同期を取ります。これによって,DB同期状態になります。
pdhold -bコマンドを実行すると,インメモリデータバッファのデータをRDエリアに書き込みます。
-
システムログファイルをスワップします。
pdlogswap -d sys -w
-
RDDATA01およびRDIDX01の閉塞を解除します。
pdrels -r RDDATA01,RDIDX01
-
RDDATA01およびRDIDX01のバックアップを取得します。
pdcopy -m C:\rdarea\mast\mast01 -M r -r RDDATA01,RDIDX01 -b C:\pdcopy\backup02 -p C:\pdcopy\list02
- ポイント
-
ログレスモードで業務を実行しているため,一つ目のバッチ業務が終わったら,必ずインメモリデータバッファとRDエリアの同期を取ります。ここで同期を取らないと,二つ目のバッチ業務を実行中にバッファ障害が発生した場合,一つ目のバッチ業務から再実行しなくてはなりません。
(d) 二つ目のバッチ業務を実行する
-
バッチ業務を実行します。
インメモリデータバッファの内容が更新され,DB非同期状態になります。
(e) インメモリデータバッファとRDエリアの同期を取る
-
インメモリデータバッファとRDエリアの同期を取ります。
pdhold -r RDDATA01,RDIDX01 -c
二つ目のバッチ業務が終わったら,インメモリデータバッファのデータをRDエリアに書き込み,インメモリデータバッファとRDエリアの同期を取ります。これによって,DB同期状態になります。
pdhold -cコマンドを実行すると,インメモリデータバッファのデータをRDエリアに書き込みます。
- 注意事項
-
ここで,pdhold -cコマンドを使用しているのは,(f)でインメモリ化を解除するためです。インメモリ化を解除するときのRDエリアの閉塞は,pdhold -cコマンドで行います。pdhold -cコマンドで閉塞クローズ状態にすることによって,ほかのトランザクションが対象RDエリアにアクセスできないようにします。
(f) インメモリ化を解除する
-
RDDATA01およびRDIDX01のインメモリ化を解除します。
pdmemdb -k rels -r RDDATA01,RDIDX01
インメモリデータバッファがなくなります。これ以降は,グローバルバッファを使用します。
-
システムログファイルをスワップします。
pdlogswap -d sys -w
-
RDDATA01およびRDIDX01のバックアップを取得します。
pdcopy -m C:\rdarea\mast\mast01 -M r -r RDDATA01,RDIDX01 -b C:\pdcopy\backup03 -p C:\pdcopy\list03
ここでは前の手順と異なり,RDエリアの閉塞クローズを解除する前にバックアップを取得してください。バックアップを取得する前にRDエリアの閉塞クローズを解除すると,ほかのUAPからの更新が発生する場合があります。更新が発生したあとでRDエリアに障害が発生した場合,ログレスモードでバッチ業務を実行しているため,その更新内容を回復することができません。
-
RDDATA01およびRDIDX01の閉塞を解除します。
pdrels -r RDDATA01,RDIDX01 -o