ノンストップデータベース　HiRDB Version 10 バッチ高速化機能

解説・手引・操作書

3020-6-567-10

前書き

対象製品

●適用OS：AIX V7.1，AIX V7.2

P-1M62-35A1 HiRDB Server Version 10 10-06

P-F1M62-11A1A HiRDB Accelerator Version 10 10-00

●適用OS：Red Hat Enterprise Linux 7 (64-bit x86_64)，Red Hat Enterprise Linux 8 (64-bit x86_64)

P-8462-35A1 HiRDB Server Version 10 10-06

P-F8462-11A1A HiRDB Accelerator Version 10 10-00

●適用OS：Windows Server 2016，Windows Server 2019，Windows Server 2022，Windows 10 Pro (x64)，Windows 10 Enterprise (x64)，Windows 11

P-2962-91A4 HiRDB Server Version 10 10-06

P-2962-7PA4 HiRDB Accelerator Version 10 10-00

これらのプログラムプロダクトのほかにもこのマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。

輸出時の注意

本製品を輸出される場合には、外国為替及び外国貿易法の規制並びに米国輸出管理規則など外国の輸出関連法規をご確認の上、必要な手続きをお取りください。

なお、不明な場合は、弊社担当営業にお問い合わせください。

商標類

HITACHI，HiRDB，Cosminexus，HAモニタ，JP1，OpenTP1，TPBroker，uCosminexus，VOS3/LS，VOS3/US，VOS3/XS，XDMは，株式会社 日立製作所の商標または登録商標です。

Amazon Web Services，AWS，Powered by AWSロゴ，Amazon EC2，Amazon Route 53は，Amazon.com, Inc.またはその関連会社の商標です。

AMDは，Advanced Micro Devices, Inc.の商標です。

Ansible is a registered trademark of Red Hat, Inc. in the United States and other countries.

Ansibleは，米国およびその他の国におけるRed Hat, Inc.の登録商標です。

Hibernate is a registered trademark of Red Hat, Inc. in the United States and other countries.

Hibernateは，米国およびその他の国におけるRed Hat, Inc.の登録商標です。

IBM，AIX，DataStageおよびPowerHAは，世界の多くの国で登録されたInternational Business Machines Corporationの商標です。

Jboss is a registered trademark of Red Hat, Inc. in the United States and other countries.

Jbossは，米国およびその他の国におけるRed Hat, Inc.の登録商標です。

Linuxは，Linus Torvalds氏の日本およびその他の国における登録商標または商標です。

Microsoft, Access, ActiveX, Azure, Excel, Visual Basic, Visual C++, Visual Studio, Windows, Windows Serverは，マイクロソフト 企業グループの商標です。

OracleおよびJavaは，オラクルおよびその関連会社の登録商標です。

Red Hat is a registered trademark of Red Hat, Inc. in the United States and other countries.

Red Hatは，米国およびその他の国におけるRed Hat, Inc.の登録商標です。

Red Hat Enterprise Linux is a registered trademark of Red Hat, Inc. in the United States and other countries.

Red Hat Enterprise Linuxは，米国およびその他の国におけるRed Hat, Inc.の登録商標です。

UNIXは，The Open Groupの商標です。

VeritasおよびVeritasロゴは、米国およびその他の国におけるVeritas Technologies LLCまたはその関連会社の商標または登録商標です。

その他記載の会社名，製品名などは，それぞれの会社の商標もしくは登録商標です。

発行

2022年10月　3020-6-567-10

著作権

All Rights Reserved. Copyright (C) 2018, 2022, Hitachi, Ltd.

変更内容

変更内容(3020-6-567-10)　HiRDB Version 10 10-06

追加・変更内容

変更個所

HP-UXに関する説明を削除しました。

−

単なる誤字・脱字などはお断りなく訂正しました。

変更内容(3020-6-567)　HiRDB Version 10 10-00

追加・変更内容

HiRDBを10-00にバージョンアップしました。

変更内容(3020-6-368-50)　HiRDB Version 9 09-66，HiRDB Accelerator Version 8 08-03

追加・変更内容

マニュアルの体裁を変更しました。

変更内容(3020-6-368-40)　HiRDB Version 9 09-65，HiRDB Accelerator Version 8 08-03

追加・変更内容

HiRDBのサポートプラットフォームに次のOSを追加しました。

AIX V7.2

Windows Server 2016

はじめに

このマニュアルは，HiRDB Accelerator Version 10を使用したバッチ高速化機能の運用方法について説明したものです。なお，ここに記載されていない前提情報については，マニュアル「HiRDB Version 10 解説」を参照してください。

対象読者

バッチ高速化機能を使ってHiRDB Version 10（以降，HiRDBと表記します）を運用する方々を対象にしています。

このマニュアルの記述は，次に示す知識があることを前提にしています。

UNIX，またはWindowsのシステム管理の基礎的な知識

HiRDBのシステム管理の基礎的な知識

また，このマニュアルは，マニュアル「HiRDB Version 10 解説」を前提としていますので，あらかじめお読みいただくことをお勧めします。

図中で使用する記号

このマニュアルの図中で使用する記号を次のように定義します。

1　バッチ処理の高速化

この章では，大量のデータを扱うバッチ処理の高速化を実現するインメモリデータ処理について説明します。

1.1　バッチ処理の高速化が必要とされる理由

企業や組織が保有するデータは増加の一途をたどっています。データ量の増加に伴い，バッチ処理に掛かる時間は長くなる一方です。さらに，業務のサービス時間は延長傾向にあるため，バッチ処理を実行できる時間が短くなってきています。また，これまでメインフレームでやっていたような大量のバッチ処理を，オープンシステムでも実施するという需要が高まっています。このような理由から，オープンシステムでのバッチ処理の高速化が企業や組織の課題となっています。

HiRDBでは，大量のデータを扱うバッチ処理を高速化するために，RDエリア内の全データをメモリ上に一括して読み込み，バッチ処理の実行中はメモリ上のデータだけを更新し，ディスク上のデータは更新しません。バッチ処理が完了したあとにメモリ上の更新データを一括してディスクに書き込みます。バッチ処理中はディスク入出力が発生しないため，その分バッチ処理に掛かる時間を短縮できます。

このバッチ高速化を実現するための処理方式をインメモリデータ処理といいます。

例えば，次のようなケースに当てはまる場合は，インメモリデータ処理を適用してバッチ処理の高速化を検討してください。

ケース1

バッチ処理を実行できる時間の範囲が午前0時から午前6時までの6時間と決まっていて，バッチ処理が完了するまで4時間掛かります。バッチ処理の途中でエラーが発生した場合，決められた時間内にバッチ処理を完了できないおそれがあります。

ケース2

データ量の増加によって，3か月後のバッチ処理時間が12時間以上になると予想され，翌日のオンライン業務に影響が出ると考えられます。

ケース3

将来，メインフレームからデータを移行する予定があります。しかし，データの移行に掛かる時間を試算した結果，移行予定期間内にデータの移行が終わりそうにありません。

1.2　インメモリデータ処理の仕組み

ここでは，インメモリデータ処理の仕組みについて説明します。

なお，インメモリデータ処理を実行するにはHiRDB Acceleratorが必要です。

1.2.1　インメモリデータ処理の概要

インメモリデータ処理では，RDエリア内の全データをメモリ上に一括して読み込み，バッチ処理の実行中はメモリ上のデータだけを更新し，ディスク上のデータは更新しません。バッチ処理が完了したあとにメモリ上の更新データを一括してディスクに書き込みます。バッチ処理中はディスク入出力が発生しません。ディスク入出力が発生するのは，RDエリア内のデータをメモリ上に読み込むときと，メモリ上の更新データをディスクに書き込むときの2回だけです。

インメモリデータ処理の概要を次に示します。

図1‒1　インメモリデータ処理の概要

［説明］

RDエリア内の全データをメモリ上に一括して読み込むことをインメモリ化といいます。インメモリ化はRDエリアごとに行います。インメモリ化しているRDエリアをインメモリRDエリアといいます。また，インメモリデータ処理で使用するデータバッファをインメモリデータバッファといいます。

ポイント

インメモリデータ処理を実行する場合は，グローバルバッファを使用しないでインメモリデータバッファを使用します。インメモリデータバッファは，HiRDBが動的に共用メモリ上に確保するため，HiRDB管理者がインメモリデータバッファを定義する必要はありません。

バッチ処理の実行中はインメモリデータバッファ上のデータだけが更新されて，ディスク上のデータは更新されません。バッチ処理が完了したあとにコマンド（pdholdコマンド）を実行して，インメモリデータバッファ上の更新情報を一括してディスクに書き込みます。シンクポイント時もディスクへの書き込みが発生しません。なお，ログ取得モードであれば，インメモリデータ処理中でも，通常と同じようにデータベースの更新ログが取得されます。障害が発生した場合，そのログを使って，データベースを最新の状態に回復できます。

1.2.2　インメモリデータバッファの優位点

ここでは，グローバルバッファと比較したときのインメモリデータバッファの優位点について説明します。性能面ではインメモリデータバッファの方が優れていますが，障害発生時の対処方法がグローバルバッファに比べてやや複雑になります。

インメモリデータバッファとグローバルバッファのそれぞれの優位点を次に説明します。

(1)　インメモリデータバッファが優位な点

インメモリデータバッファが優位な点を次に示します。

ディスク入出力回数が少ない

グローバルバッファを使用している場合はディスク入出力が定期的に発生しますが，インメモリデータバッファを使用している場合は，ディスク入出力が発生するのはインメモリ化した時点とディスクへのデータ書き込み時点の2回だけです。シンクポイント時にもディスクへの書き込みが発生しません。そのため，インメモリデータバッファを使用する方が，グローバルバッファを使用したときに比べてディスク入出力回数が少なくなります。

バッファの管理処理が少ない

グローバルバッファを使用している場合は次に示すバッファ管理処理が発生しますが，インメモリデータバッファを使用している場合はこれらのバッファ管理処理が発生しません。

キャッシュバッファチェーン（バッファへのポインタの集合）の管理処理

LRUリストの管理処理

更新バッファの管理処理

インメモリデータバッファを使用した方が，これらの管理処理が不要になり，その分性能が向上します。また，トランザクションの同時実行性も向上します。

チューニングが不要

グローバルバッファの場合はヒット率を意識してグローバルバッファのチューニングをする必要があります。一方，インメモリデータバッファの場合はヒット率を意識する必要がないため，チューニングが必要ありません。そのため，チューニングに掛かるコストを削減できます。

(2)　グローバルバッファが優位な点

グローバルバッファが優位な点を次に示します。

HiRDBが異常終了したときのデータの回復方法

グローバルバッファを使用している場合は，HiRDBが異常終了しても，再開始時に最新の状態にHiRDBが回復します。インメモリデータバッファを使用している場合は，HiRDBが異常終了して再開始しても，HiRDBは自動回復しません。この場合，HiRDB管理者がバックアップとログを使用して最新の状態に回復するか，またはインメモリ化時点以降の処理を再実行する必要があります。

1.2.3　インメモリデータ処理に関する用語

インメモリデータ処理に関する用語を次の表に示します。

表1‒1　インメモリデータ処理に関する用語

用語

説明

インメモリデータ処理

RDエリア内の全データをメモリ（インメモリデータバッファ）上に常駐させて，ディスク入出力回数を抑える処理方式のことです。

インメモリデータバッファ

インメモリデータ処理で使用するデータバッファのことです。

インメモリ化

インメモリデータ処理で，RDエリア内の全データをメモリ上に一括して読み込み，常駐させることです。

インメモリRDエリア

インメモリデータ処理の対象となっているRDエリアのことです。このRDエリア内の全データがメモリ上に常駐します。

DB同期状態

インメモリRDエリア内のデータとインメモリデータバッファ上のデータの同期が取れている状態のことです。

DB非同期状態

インメモリRDエリア内のデータとインメモリデータバッファ上のデータの同期が取れていない状態のことです。

RDエリア障害

インメモリRDエリアに障害が発生した状態です。

バッファ障害

インメモリデータバッファに障害が発生した状態です。

1.3　インメモリデータ処理を適用すると効果が期待できるケース

次の場合にインメモリデータ処理を適用すると効果が期待できます。

処理時間の長いバッチ処理を実行している場合

大量のデータ更新を行う，処理時間の長いバッチ処理にインメモリデータ処理を適用すると，効果が期待できます。また，ログレスモードを適用すると，さらに処理時間を短縮できます。

バッチ処理に掛かる時間が長いほど，ディスク入出力回数に差が出るため，インメモリデータ処理を適用したときの効果が期待できます。

複数のバッチ処理を連続して実行している場合

複数のバッチ処理を連続して実行する場合にインメモリデータ処理を適用すると効果が期待できます。

バッチ処理を連続して行うほど，ディスク入出力回数に差が出るため，インメモリデータ処理を適用したときの効果が期待できます。

グローバルバッファの排他競合が原因で性能が上がらない場合

グローバルバッファの排他競合が原因で性能が上がらない場合に，インメモリデータ処理を適用すると性能向上が期待できます。

グローバルバッファを使用する場合（インメモリデータ処理を使用しない場合），参照または更新処理の発生時，グローバルバッファ上にデータがキャッシュされているかどうかを検索する処理（キャッシュサーチ処理）が行われます。このとき，グローバルバッファの全ページに対して排他が掛かるため，ほかの参照または更新処理は排他待ちとなります。インメモリデータ処理の場合は，インメモリデータバッファ上に全データがキャッシュされているため，キャッシュサーチ処理が発生しません。グローバルバッファの全ページに対する排他制御がなくなるため，同時実行性の向上が見込まれ，その分性能向上が期待できます。例えば，同じグローバルバッファを割り当てている複数のRDエリアを更新するバッチ処理などで排他競合が多発している場合に，インメモリデータ処理を適用すると性能向上が期待できます。

なお，排他競合の発生頻度については，統計解析ユティリティのグローバルバッファに関する統計情報で確認できます。

メインフレームからデータを移行する場合

メインフレームの膨大なデータをHiRDBに移行する場合（データをHiRDBのデータベースにデータロードする場合）に，インメモリデータ処理を適用すると効果が期待できます。

参考

インメモリデータ処理はユティリティにも適用できます。データロードや表の再編成など，処理時間の長いユティリティを実行する場合にも，効果が期待できます。

1.4　インメモリデータ処理を適用しても効果が期待できないケース

次のような場合にインメモリデータ処理を適用しても効果が期待できません。

処理時間の短いバッチ処理を実行している場合

インメモリデータ処理では，RDエリア内の全データをインメモリ化します。そのため，RDエリアのデータ量に比例して，インメモリ化に掛かる時間や，インメモリデータバッファ上のデータをディスクに書き込む時間が長くなります。これらの処理に掛かる時間とバッチ業務の処理時間を考慮した上で，インメモリデータ処理の適用を検討してください。

例えば，処理時間が30分のバッチ業務にインメモリデータ処理を適用したとします。インメモリデータ処理の適用によってバッチ業務の処理時間は20分と短くなりましたが，インメモリ化の処理に10分，インメモリデータバッファ上のデータをディスクに書き込む時間が10分掛かると，合計40分掛かり，インメモリデータ処理を適用する前より処理時間が長くなってしまいます。

参考

ここの説明で使用している時間はあくまで例です。業務の内容によって各処理に掛かる時間は変わります。

RDエリア内の全データをグローバルバッファ上にキャッシュしている場合

RDエリア内の全データをグローバルバッファ上にキャッシュしている場合と，インメモリデータ処理を適用した場合では，あまり性能に差がありません。

1.5　インメモリデータ処理が適用できないケース

1.5.1　インメモリデータ処理が適用できないケースの説明

ここでは，インメモリデータ処理が適用できないケースについて説明します。

(1)　インメモリデータ処理を適用できないRDエリア

ユーザ用RDエリア，ユーザLOB用RDエリア，およびリスト用RDエリアに対してだけ，インメモリデータ処理を適用できます。次に示すRDエリアについては，インメモリデータ処理を適用できません。

マスタディレクトリ用RDエリア

データディクショナリ用RDエリア

データディレクトリ用RDエリア

データディクショナリLOB用RDエリア

レジストリ用RDエリア

レジストリLOB用RDエリア

なお，ユーザ用RDエリアおよびユーザLOB用RDエリアについても，オープン契機がSCHEDULE属性のRDエリアの場合はインメモリ化できません。また，ユーザ用RDエリアが共用RDエリアの場合もインメモリ化できません。

(2)　リアルタイムSANレプリケーション（ログ同期方式を除く）を使用している場合

全同期方式，全非同期方式，またはハイブリッド方式のリアルタイムSANレプリケーションを使用している場合は，インメモリデータ処理を適用できません。

ログ同期方式のリアルタイムSANレプリケーションの場合は，インメモリデータ処理を適用できます。ただし，ログ適用サイトのデータベースの更新ができなくなるため，ログレスモードは使用しないでください。

2　インメモリデータ処理を実行するための環境を作る

この章では，インメモリデータ処理を実行するために必ず行う準備と，処理性能を向上させるために考えておくことについて説明します。

2.1　必ず行う準備

ここでは，インメモリデータ処理を実行するために必ず行う準備について説明します。準備の手順を次の図に示します。

図2‒1　必ず行う準備

なお，これ以降の説明は，HiRDBのインストールおよびセットアップは完了していて，すでにHiRDBを運用していることを前提としています。

2.1.1　マシン環境の確認

インメモリデータ処理を実行するためには，マシン環境がここで説明する条件を満たしている必要があります。マシン環境について確認してください。

(1)　前提プラットフォーム

インメモリデータ処理は次のプラットフォームで実行できます。

AIX（64ビットモード）

Linux (EM64T)

Windows (x64)

(2)　メモリ容量の確認

インメモリデータ処理を実行するためのメモリ容量が十分にあるか確認してください。インメモリデータ処理に必要なメモリ容量は，インメモリ化するRDエリアの容量に，HiRDBがインメモリデータバッファを管理するための領域を加えた値になります。

インメモリデータ処理で必要なメモリ所要量については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

(3)　OSのオペレーティングシステムパラメタの確認（UNIX限定）

次に示す設定をするオペレーティングシステムパラメタの値を見直してください。

共用メモリセグメントの合計サイズ

システム上の共用メモリセグメントの最大数

1プロセス当たりの共用メモリセグメントの最大数

OSのオペレーティングシステムパラメタの見積もりについては，マニュアル「HiRDB システム導入・設計ガイド」またはOSのマニュアルを参照してください。

2.1.2　HiRDB Acceleratorのインストール

ここでは，HiRDB Acceleratorのインストールおよびアンインストールの手順について説明します。

(1)　インストール手順

HiRDB Acceleratorのインストール手順を次に示します。

Windows版の場合

pdstopコマンドでHiRDBを正常終了します。

［コントロールパネル］の［サービス］でHiRDBのサービスを停止します。

HiRDB Acceleratorをインストールします。Administrators権限を持つユーザがインストールを実行してください。手順はインストーラの指示に従ってください。

なお，HiRDB/パラレルサーバの場合は，すべてのサーバマシンにHiRDB Acceleratorをインストールしてください。系切り替え機能を使用している場合は予備系のサーバマシンにも，HiRDB Acceleratorをインストールしてください。

また，マルチHiRDB構成のときは，セットアップ識別子の指定が必要です。セットアップ識別子はpdntenvコマンドで確認できます。

UNIX版の場合

pdstopコマンドでHiRDBを正常終了します。

日立PPインストーラを実行してHiRDB Acceleratorをインストールします。

なお，HiRDB/パラレルサーバの場合は，すべてのサーバマシンにHiRDB Acceleratorをインストールしてください。

また，系切り替え機能を使用している場合は予備系のサーバマシンに，リアルタイムSANレプリケーションを使用している場合はリモートサイトのサーバマシンにも，HiRDB Acceleratorをインストールしてください。

注意事項

HiRDBをバージョンアップした場合（例えば，バージョン08-03から09-00にバージョンアップした場合など）は，HiRDB Acceleratorを再インストールする必要があります。

(2)　アンインストール手順

HiRDB Acceleratorのアンインストール手順を次に示します。

Windows版の場合

pdstopコマンドでHiRDBを正常終了します。

［コントロールパネル］の［サービス］でHiRDBのサービスを停止します。

［コントロールパネル］の［アプリケーションの追加と削除］からHiRDB Acceleratorをアンインストールします。

UNIX版の場合

pdstopコマンドでHiRDBを正常終了します。

pdopsetupコマンドでHiRDB Acceleratorのセットアップを解除します。

なお，HiRDB/パラレルサーバの場合は，すべてのサーバマシンでpdopsetupコマンドを実行してください。

pdopsetup -d -k acl $PDDIR

$PDDIRには，HiRDB運用ディレクトリを指定してください。

日立PPインストーラを実行してHiRDB Acceleratorをアンインストールします。

2.1.3　HiRDB Acceleratorのセットアップ（UNIX限定）

UNIX版の場合，HiRDB Acceleratorのセットアップをしてください。セットアップは，pdopsetupコマンドで実行します。

なお，HiRDB/パラレルサーバの場合，すべてのサーバマシンでpdopsetupコマンドを実行する必要があります。

2.1.4　システム定義の設定

インメモリデータ処理を実行するには，次に示すオペランドを指定してください。

pd_max_resident_rdarea_no

インメモリ化するRDエリアの最大数を指定します。このオペランドに1以上の値を指定すると，インメモリデータ処理を実行できます。

OSがページ固定に対応しているWindowsで，このオペランドに1以上の値を指定した場合は，SHMMAXオペランドにWindowsのLarge Pageのページサイズに切り上げた値を指定してください。

Windowsがページ固定に対応しているかどうか，およびLarge Pageのページサイズについては，pdntenv -osコマンドで確認してください。

pd_max_resident_rdarea_shm_no

インメモリデータバッファが使用する共用メモリセグメントの最大数を指定します。

注意事項

インメモリ化するRDエリアには，pdbufferオペランドでグローバルバッファが割り当てられている必要があります。グローバルバッファが割り当てられていないRDエリアは，インメモリ化できません。

2.2　インメモリデータ処理をより効果的に実行するために考えておくこと

ここでは，インメモリデータ処理をより効果的に実行するために検討するとよいポイントについて説明します。あらかじめインメモリデータ処理に適したシステム構成にしておくことで，処理性能の向上が期待できます。

2.2.1　どのRDエリアをインメモリ化するか

インメモリデータ処理をより効果的に実行するには，表格納RDエリアだけではなく，インデクス格納RDエリアも一緒にインメモリ化してください。

特に，次に示すRDエリアはまとめてインメモリ化してください。

表に定義されているインデクスを格納しているRDエリア

表を横分割している場合，その横分割表が格納されているすべてのRDエリア

2.2.2　RDエリア内の表構成にむだがないか

インメモリ化するRDエリアに，業務ではアクセスしない表が混在している場合，そのような表は別のRDエリアに格納することをお勧めします。これによって，メモリ領域がむだに確保されることを防ぎます。

RDエリア内に使用しない表が混在している場合の対処例を次の図に示します。

図2‒2　RDエリア内に使用しない表が混在している場合の対処例

2.2.3　一括指定ができるRDエリア名になっているか

インメモリデータ処理に使用するコマンド（pdmemdbコマンド，pdholdコマンド）は，RDエリア名一括指定ができます。RDエリア名一括指定ができるように，RDエリア名の末尾をそろえておくなどの工夫をすると便利です。

（例）

インメモリ化するRDエリア名の末尾を次のようにそろえます。

RDDATA01_mem，RDDATA02_mem，RDIDX01_mem，RDIDX02_mem

上記四つのRDエリアをまとめてインメモリ化する場合，次のように指定できます。

 pdmemdb -k stay -r “*_mem”

運用コマンドでのRDエリア名一括指定については，マニュアル「HiRDB コマンドリファレンス」を参照してください。

2.2.4　ログレスモードを適用できるか

インメモリデータ処理でバッチ業務を実行する場合，ログレスモードで実行すると，より処理時間を短縮できます。バッチ業務を実行する場合は，ログレスモードの適用を検討してください。

3　インメモリデータ処理を適用する

この章では，業務の種類に応じたインメモリデータ処理の適用例について説明します。

3.1　基本的な運用の流れ

ここでは，インメモリデータ処理を実行するときの基本的な運用の流れについて説明します。

運用には，大きく分けて次の四つのステップがあります。

RDエリアをインメモリ化する

業務を実行する

インメモリデータバッファとRDエリアの同期を取る

インメモリ化を解除する

基本的な運用の流れを次の図に示します。

図3‒1　基本的な運用の流れ

ポイント

RDエリアのデータとインメモリデータバッファのデータが同じ場合をDB同期状態といい，異なる場合をDB非同期状態といいます。

ステップ2.で業務を実行している間は，インメモリデータバッファ上のデータだけが更新され，RDエリアのデータは更新されないため，DB非同期状態になります。インメモリデータバッファとRDエリアの状態は，pddblsコマンドで確認できます。詳細は，「インメモリデータバッファの利用状況を確認するには」を参照してください。

注意事項

ステップ1.のインメモリ化は，RDエリアのデータ量に比例して時間が掛かります。その間はシンクポイントが取得されないため，注意してください。

この基本的な運用の流れを基に，3.2ではバッチ業務に適用する場合の手順，3.3ではオンライン業務に適用する場合の手順について説明します。

3.2　バッチ業務に適用する場合

3.2.1　バッチ業務に適用する場合の運用

ここでは，インメモリデータ処理をバッチ業務に適用する場合の運用について，例題を使って説明します。

(1)　例題の条件

この例題での条件を次に示します。

二つのバッチ業務を連続して実行します。

バッチ業務でアクセスするRDエリアは，RDDATA01（表格納RDエリア）およびRDIDX01（インデクス格納RDエリア）です。

ログレスモードでバッチ業務を実行します。

運用の流れを次の図に示します。

図3‒2　バッチ業務に適用する場合の運用の流れ

参考

初期データロードにもインメモリデータ処理を適用できます。その際，長時間シンクポイントを取得できなくなるのを防ぐため，同期点指定のデータロードの適用を検討してください。同期点指定のデータロードについては，マニュアル「HiRDB コマンドリファレンス」を参照してください。

初期データロードにインメモリデータ処理を適用する場合の手順は，バッチ業務に適用する場合の手順と同じです。(2)(b)および(d)のバッチ業務をpdloadコマンドによる初期データロードに置き換えてお読みください。

なお，初期データロードの場合，(2)(a)のバックアップの取得は必要ありません。

(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

3.3　オンライン業務に適用する場合

3.3.1　オンライン業務に適用する場合の運用

ここでは，インメモリデータ処理をオンライン業務に適用する場合の運用について，例題を使って説明します。

(1)　例題の条件

この例題での条件を次に示します。

オンライン業務でアクセスするRDエリアは，RDDATA01（表格納RDエリア）およびRDIDX01（インデクス格納RDエリア）です。

運用の流れを次の図に示します。

図3‒3　オンライン業務に適用する場合の運用の流れ

(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 -c

オンライン業務が終わったら，インメモリデータバッファのデータをRDエリアに書き込み，インメモリデータバッファとRDエリアの同期を取ります。これによって，DB同期状態になります。

pdhold -cコマンドを実行すると，インメモリデータバッファのデータをRDエリアに書き込みます。

注意事項

ここで，pdhold -cコマンドを使用しているのは，(d)でインメモリ化を解除するためです。インメモリ化を解除するときのRDエリアの閉塞は，pdhold -cコマンドで行います。pdhold -cコマンドで閉塞クローズ状態にすることによって，ほかのトランザクションが対象RDエリアにアクセスできないようにします。

(d)　インメモリ化を解除する

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

 pdmemdb -k rels -r RDDATA01,RDIDX01

インメモリデータバッファがなくなります。これ以降は，グローバルバッファを使用します。

RDDATA01およびRDIDX01の閉塞を解除します。

 pdrels -r RDDATA01,RDIDX01 -o

3.4　テスト業務に適用する場合

3.4.1　テスト業務に適用する場合の運用

ここでは，インメモリデータバッファの更新内容を破棄したり，RDエリアのデータをインメモリデータバッファに再読み込みしたりするなどの運用方法を，インメモリデータ処理をテスト業務に適用する場合の応用例を使って説明します。

(1)　例題の条件

この例題での条件を次に示します。

テスト業務を連続して2回実行します。

テスト業務でアクセスするRDエリアは，RDDATA01（表格納RDエリア）およびRDIDX01（インデクス格納RDエリア）です。

テスト業務の更新内容は，RDエリアに書き込まないで破棄します。

運用の流れを次の図に示します。

図3‒4　テスト業務に適用する場合の運用の流れ

(2)　コマンド実行手順

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

(a)　RDエリアをインメモリ化する

RDDATA01およびRDIDX01を閉塞クローズ状態にします。

 pdhold -r RDDATA01,RDIDX01 -c

RDDATA01およびRDIDX01をインメモリ化します。

 pdmemdb -k stay -r RDDATA01,RDIDX01

このとき，インメモリデータバッファとRDエリアは，DB同期状態になります。

なお，ここでは，複数のRDエリアをまとめてインメモリ化しています。この場合の注意事項については，「複数のRDエリアを一度にインメモリ化する場合の注意事項」を参照してください。

注意事項

インメモリ化するときのRDエリアの閉塞は，pdhold -cコマンドで行ってください。pdhold -cコマンドで閉塞クローズ状態にすることによって，ほかのUAPが対象RDエリアにアクセスできないようにします。

RDDATA01およびRDIDX01の閉塞クローズを解除します。

 pdrels -r RDDATA01,RDIDX01 -o

(b)　テスト業務を実行する

1回目のテスト業務を実行します。

インメモリデータバッファの内容が更新され，DB非同期状態になります。

(c)　インメモリデータバッファ上の更新内容を破棄する

RDDATA01およびRDIDX01を閉塞状態にします。

 pdhold -r RDDATA01,RDIDX01

インメモリデータバッファ上のデータを破棄して更新を無効にします。

 pdmemdb -k cancel -r RDDATA01,RDIDX01

このとき，インメモリデータバッファはバッファ障害状態に，RDエリアは障害閉塞状態になります。

(d)　RDエリアのデータを再読み込みする

RDDATA01およびRDIDX01をクローズ状態にします。

 pdclose -r RDDATA01,RDIDX01

RDエリアのデータをインメモリデータバッファへ再読み込みします。

 pdmemdb -k reload -r RDDATA01,RDIDX01

これによって，テスト業務実行前の状態に戻ります。このとき，インメモリデータバッファとRDエリアは，DB同期状態になります。

RDDATA01およびRDIDX01の閉塞を解除します。

 pdrels -r RDDATA01,RDIDX01

(e)　テスト業務を実行する

2回目のテスト業務を実行します。

インメモリデータバッファの内容が更新され，DB非同期状態になります。

(f)　インメモリ化を強制解除する

RDDATA01およびRDIDX01を閉塞状態にします。

 pdhold -r RDDATA01,RDIDX01

RDDATA01およびRDIDX01のインメモリ化を強制解除します。

 pdmemdb -k rels -r RDDATA01,RDIDX01 -d

これによって，インメモリデータバッファはなくなり，RDエリアは障害閉塞クローズ状態になります。なお，更新情報はRDエリアに反映されません。

RDDATA01およびRDIDX01の閉塞を解除します。

 pdrels -r RDDATA01,RDIDX01 -o

3.5　複数のRDエリアを一度にインメモリ化する場合の注意事項

複数のRDエリアをインメモリ化する場合，一度にまとめてインメモリ化する方法と，個別にインメモリ化する方法があります。運用が煩雑になるのを防ぐため，関連するRDエリアはまとめてインメモリ化することをお勧めしますが，その場合は次のことに注意してください。

3.5.1　インメモリ化に失敗したとき

複数のRDエリアのうち，一つでもインメモリ化に失敗した場合は，一緒に指定したそのほかのRDエリアもインメモリ化しません。この場合は，pdmemdb -k stayコマンドを再実行してください。

なお，HiRDB/パラレルサーバの場合は，バックエンドサーバごとにこの仕組みが適用されます。

（例）

pdmemdb -k stay -r RD01,RD02,RD03,RD04

RD01とRD02はバックエンドサーバ1で，RD03とRD04はバックエンドサーバ2で管理されています。RD02のインメモリ化に失敗した場合，RD01もインメモリ化しません。RD03とRD04はインメモリ化します。

注意事項

インメモリ化時だけではなく，インメモリ化の解除，再読み込み，インメモリデータバッファの破棄を行うときにも，この仕組みが適用されます。pdmemdbコマンドで複数のRDエリアを操作したときに，一部のRDエリアに対する処理でエラーが発生すると，すべてのRDエリアの処理を無効化します。

3.5.2　セグメントの割り当てについて

インメモリデータバッファもグローバルバッファと同様に，共用メモリセグメント上に割り当てられます。

インメモリデータバッファに割り当てられる共用メモリセグメントを効率的に使用するために，複数のRDエリアをまとめてインメモリ化した場合は，インメモリ化を解除するときもまとめて解除してください。共用メモリセグメントの割り当ての仕組みを次に示す例を使って説明します。

（例）

共用メモリセグメントの最大サイズ：1GB

RDエリア（RD01）のサイズ：1.5GB

RDエリア（RD02）のサイズ：0.4GB

RDエリア（RD03）のサイズ：0.7GB

この条件下での共用メモリセグメントの割り当ての仕組みを次の図に示します。

図3‒5　共用メモリセグメントの割り当ての仕組み

［説明］

RD01とRD02をまとめてインメモリ化し，それとは別にRD03をインメモリ化しました。

RD01のインメモリデータバッファはセグメント1およびセグメント2に割り当てられます。RD02のインメモリデータバッファはRD01と同じセグメント2に割り当てられます。

RD03のインメモリデータバッファはRD01，RD02とは別のセグメント（セグメント3）に割り当てられます。

RD01のインメモリ化を解除すると，セグメント1は解放されて利用できますが，セグメント2のRD01のインメモリデータバッファに割り当てられた領域は解放されません。そのため，このメモリ領域がむだになります。

RD01を再度インメモリ化すると，新しいセグメント（セグメント1とセグメント4）が割り当てられます。

ポイント

メモリ領域がむだになるのを防ぐため，複数のRDエリアをまとめてインメモリ化した場合は，インメモリ化の解除もまとめて行うようにしてください。

4　運用時に気をつけること

インメモリデータ処理を実行する場合に，そのほかの機能や運用で注意が必要なときがあります。この章では，そのような注意事項について説明します。

4.1　バックアップを取得するときに気をつけること

ここでは，インメモリRDエリアのバックアップを取得するときの注意点について説明します。

なお，インメモリRDエリアのバックアップを取得する場合，バックアップ取得モードは参照・更新不可能モード（-M x），または参照可能モード（-M r）のどちらかです。更新可能モード（-M s）でのバックアップ取得はできません。

また，インメモリRDエリアの差分バックアップは取得できません。

4.1.1　バックアップを取得するタイミング

バックアップは，次のタイミングで取得してください。

RDエリアをインメモリ化したあと

インメモリデータバッファとRDエリアの同期を取ったあと

バックアップを取得するタイミングを次の図に示します。

図4‒1　バックアップを取得するタイミング

RDエリアとインメモリデータバッファの両方に障害が発生した場合，pdrstrコマンドでRDエリアを回復します。前記で説明した時点でバックアップを取得しないと，インメモリ化時点または同期時点（例えば，バッチ業務の開始前の時点）にRDエリアを回復するときの手順が煩雑になります。

また，バックアップを取得するときは，インメモリRDエリア（表格納RDエリア）だけではなく，関連するRDエリア（インデクス格納RDエリアや，ユーザLOB用RDエリア）も一緒にバックアップを取得してください。関連するRDエリアと一緒にバックアップを取得しておかないで，インメモリRDエリアだけをバックアップ取得時点に回復すると，関連するRDエリアとデータの不整合が発生するおそれがあります。

ポイント

バックアップを取得するときは，次のことに注意してください。

DB同期状態のときにバックアップを取得する

関連するRDエリアはまとめてバックアップを取得する

4.1.2　参照可能モード（-M r）でバックアップを取得する場合

参照可能モードでバックアップを取得する場合，インメモリデータ処理を実行していないときの運用と異なる点について説明します。

(1)　同時に更新業務を実行できる

参照可能モードでバックアップを取得する場合，同時に更新業務を実行できます（RDエリアのバックアップを取得しながら，インメモリデータバッファの内容を更新できます）。

(2)　バックアップ取得の仕組み

参照可能モードでバックアップを取得する場合，通常はグローバルバッファの更新情報がRDエリアに書き込まれてから，バックアップが取得されます。これによって，最新の状態のバックアップが取得できます。

しかし，インメモリRDエリアのバックアップを参照可能モードで取得する場合，インメモリデータバッファの更新情報はRDエリアに書き込まれません。そのため，いったんインメモリデータバッファとRDエリアの同期を取り，インメモリデータバッファの更新情報をRDエリアに書き込んでからバックアップを取得してください。

バックアップ取得の手順

参照可能モードでバックアップを取得する場合の手順を次に示します。

pdhold -bコマンドでインメモリデータバッファとRDエリアの同期を取ります。

pdlogswapコマンドでシステムログファイルをスワップします。

pdrelsコマンドでRDエリアの閉塞を解除します。

pdcopy -M rコマンドでRDエリアのバックアップを取得します。

バックアップの取得方法については，マニュアル「HiRDB システム運用ガイド」を参照してください。

更新業務を開始します。

参考

「インメモリデータバッファとRDエリアの同期を取る」に，運用の流れの中でのバックアップの取得手順が記載されています。

ポイント

通常はバックアップとバックアップ取得時点以降のログがあれば，RDエリアを最新の状態に回復できますが，DB非同期状態のときにバックアップを取得した場合，バックアップ取得以前のログも必要になります。

RDエリアを最新の状態に回復するには，インメモリ化した時点（または前回の同期取得時点）からのログが必要になります。DB非同期状態でバックアップを取得した場合の例を次に示します。

DB非同期状態でバックアップを取得した場合の例

DB非同期状態でバックアップを取得した場合の例を次の図に示します。

図4‒2　DB非同期状態でバックアップを取得した場合の例

［障害発生時の状況］

9:00にRDエリアをインメモリ化し，その後インメモリデータバッファの内容を更新しました。DB非同期状態のまま，10:00に参照可能モードでRDエリアのバックアップを取得しました。その後，再び更新業務を行ったあと，更新内容をRDエリアに書き込むときに，インメモリデータバッファとRDエリアに障害が発生しました。

［障害回復時の流れ］

この場合，バックアップを取得した時刻は10:00ですが，バックアップファイルの内容は9:00の時点のままになっています。RDエリアを最新（11:00）の状態に回復するには，10:00に取得したバックアップファイルと9:00からのログが必要になります。

通常では，バックアップ取得時点より古いログは使用しません。通常と同じ運用ができるように，インメモリRDエリアのバックアップを参照可能モードで取得する場合は，インメモリデータバッファとRDエリアの同期を取ったあと（DB同期状態のとき）に行うことをお勧めします。

参考

参照・更新不可能モード（-M x）でバックアップを取得する場合は，必ずRDエリアをpdhold -cコマンドで閉塞クローズ状態にするため，インメモリデータバッファの更新情報がRDエリアに書き込まれてDB同期状態になります。したがって，RDエリアを最新の時点に回復する場合は，バックアップとバックアップ取得時点以降のログを使うという通常と同じ考えでRDエリアを回復できます。

4.2　HiRDBを終了するときに気をつけること

インメモリRDエリアがある場合は，HiRDBの正常終了，および計画停止ができません。HiRDBを停止する場合は，インメモリ化を解除してから停止するか，強制終了してください。

なお，HiRDBを強制終了した場合，インメモリデータバッファ上の更新情報はRDエリアに反映されません。また，再開始後，インメモリ化は解除された状態になります。

注意事項

RDエリアは障害閉塞状態になります。pddblsコマンドでRDエリアの状態を確認してから，pdrelsコマンドで障害閉塞状態を解除してください。

4.3　データベース構成変更ユティリティを使用するときに気をつけること

インメモリRDエリアに対しては，データベース構成変更ユティリティを使った次の操作ができません。次の操作をする場合は，インメモリ化を解除してから実行してください。

RDエリアの拡張

RDエリアの再初期化

RDエリアの削除

RDエリアの移動

RDエリアの属性変更

RDエリアのレプリカ定義（インナレプリカ機能）

RDエリアの構成情報複写（インナレプリカ機能）

RDエリアの統合（インナレプリカ機能）

4.4　インナレプリカ機能を使用しているときに気をつけること

インメモリRDエリアのレプリカRDエリアは作成できません。また，レプリカRDエリアをインメモリ化することもできません。オリジナルRDエリアはインメモリ化できますが，オリジナルRDエリアをインメモリ化したまま，更新可能なオンライン再編成を実行することはできません。更新可能なオンライン再編成をする場合は，オリジナルRDエリアのインメモリ化を解除してから実行してください。

注意事項

インメモリRDエリアに追い付き状態管理表を作成しないでください。インメモリRDエリアに追い付き状態管理表を格納した場合，HiRDBが異常終了するなどしてインメモリデータバッファの更新情報がなくなると，追い付き反映ができなくなることがあります。

ポイント

レプリカRDエリアは常にインメモリ化できません。

pdorbeginコマンドの実行からpdorendコマンドの実行の間はオリジナルRDエリアもインメモリ化できません。

インメモリ化している間はpdorbeginコマンドを実行できません。

4.5　系切り替え機能を使用しているときに気をつけること

インメモリRDエリアがある場合に系切り替えが発生すると，インメモリデータバッファがなくなってしまうため，更新情報がRDエリアに反映されません。これは，計画系切り替えや，スローダウンによる系切り替えの場合も同じです。そのため，計画系切り替えは，インメモリ化を解除してから実行してください。

なお，インメモリRDエリアがある場合に系切り替えが発生したとき，またはインメモリ化を解除しないで計画系切り替えを実行したとき，インメモリ化していたRDエリアは障害閉塞状態になります。この場合はpdrelsコマンドで閉塞を解除してから，再度インメモリ化してください。

注意事項

系が切り替わると，インメモリデータバッファのデータがなくなり，更新情報がRDエリアに反映されません。また，インメモリ化していたRDエリアは障害閉塞状態になります。

1：1スタンバイレス型系切り替え機能を使用している場合，代替BES下のRDエリアのオープン契機は常にSCHEDULE属性になります。このSCHEDULE属性を変えることができないため，代替BES下のRDエリアをインメモリ化することはできません。

4.6　その他の注意事項

4.6.1　その他の注意事項の説明

ここでは，その他の注意事項について説明します。

(1)　システム用RDエリアを更新するような操作を行う場合

インメモリRDエリアに対して，システム用RDエリアを更新するような操作（例えば，CREATE TABLEや，ALTER TABLEなど）を行わないでください。インメモリRDエリアに対して，システム用RDエリアを更新するような操作を行うと，HiRDBが異常終了するなどの障害が発生したときに，システム用RDエリアと同期を合わせて回復する必要があるため，回復作業が難しくなります。

システム用RDエリアを更新するような操作については，マニュアル「HiRDB システム運用ガイド」の「同時にバックアップを取得する必要があるRDエリア」を参照してください。

(2)　セキュリティ監査機能を使用している場合

監査証跡表を格納しているRDエリアをインメモリ化しないでください。インメモリ化している間にHiRDBが強制終了または異常終了した場合，インメモリデータバッファ上の更新情報がRDエリア（監査証跡表）に反映されません。

監査証跡表も，ほかの表と同様にデータベース回復ユティリティを使用すれば，更新情報を反映してインメモリRDエリアを最新の状態に回復できますが，セキュリティ上の観点から，インメモリデータ処理の適用はお勧めしません。

また，監査証跡表の自動データロード機能は更新前ログ取得モードで動作するため，自動データロード機能を使用している場合は，監査証跡表に更新情報を反映できなくなるおそれがあります。

(3)　改竄防止表を定義している場合

改竄防止表を格納しているRDエリアをインメモリ化しないでください。インメモリ化している間にHiRDBが強制終了または異常終了した場合，インメモリデータバッファ上の更新情報がRDエリア（改竄防止表）に反映されません。

改竄防止表も，ほかの表と同様にデータベース回復ユティリティを使用すれば，更新情報を反映してインメモリRDエリアを最新の状態に回復できますが，セキュリティ上の観点から，インメモリデータ処理の適用はお勧めしません。

(4)　システム構成変更コマンドを実行する場合

インメモリRDエリアがある場合は，システム構成変更コマンド（pdchgconf）を実行できません。システム構成変更コマンドを実行する場合は，インメモリ化を解除してから行ってください。

(5)　修正版HiRDBの入れ替えを行う場合

インメモリRDエリアがある場合は，修正版HiRDBの入れ替え（pdprgrenew）を実行できません。修正版HiRDBの入れ替えを行う場合は，インメモリ化を解除してから行ってください。

(6)　RDエリアの自動増分機能を使用する場合

インメモリRDエリアには，RDエリアの自動増分は適用されません。ただし，インメモリ化を解除すれば，自動増分が適用されます。そのため，インメモリ化を解除したあとに再度RDエリアの容量不足が発生した場合は，自動的にRDエリアの容量が拡張されます。

(7)　アンロードレスシステムログ運用を適用している場合

バックアップ対象RDエリアにインメモリRDエリアがある場合は，ログポイント情報ファイルを取得できません。

(8)　ローカルバッファを割り当てた場合

インメモリRDエリアにローカルバッファを割り当てた場合でも，そのRDエリアに対するアクセスはインメモリデータバッファを介して行われます。ローカルバッファは使用されません。

(9)　更新可能バックアップ閉塞を実行する場合

インメモリRDエリアに対しては，更新可能バックアップ閉塞（pdhold -b -u）を実行できません。

5　トラブルシュート

この章では，インメモリデータ処理中に障害が発生した場合の回復方法について説明します。

5.1　障害回復の基本的な考え方

5.1.1　障害の種類と回復方法を決めるときの基準

ここでは，インメモリデータ処理中に発生した障害を回復するときの，基本的な考え方について説明します。

注意事項

HiRDBが異常終了して再開始した場合，異常終了する前までの更新情報はRDエリアに反映されません（HiRDBが自動的に最新の状態に回復することはありません）。また，インメモリデータバッファはなくなり，インメモリ化が解除された状態になります。

(1)　障害の種類

インメモリデータ処理中に障害が発生した場合，インメモリデータバッファの状態とRDエリアの状態を確認する必要があります。

インメモリデータ処理中の障害には，次の3種類があります。

RDエリア障害

RDエリアに障害が発生している状態です。

RDエリアの障害を取り除いたあと，インメモリデータバッファ上のデータをRDエリアに書き込むことで回復できます。インメモリデータバッファ上のデータは最新であるため，RDエリアも最新の状態に回復できます。

バッファ障害

インメモリデータバッファに障害が発生している状態です。

最新の状態に回復する場合は，いったんインメモリ化を解除してから，アンロードログファイルを使ってpdrstrコマンドでRDエリアを最新の状態に回復し，再度インメモリ化します。または，インメモリ化したままアンロードログファイルを使ってpdrstrコマンドでRDエリアを最新の状態に回復し，その内容をインメモリデータバッファに再読み込みします。

同期取得時点に回復する場合は，いったんインメモリ化を解除してから，RDエリアを再度インメモリ化します。または，RDエリアの内容をインメモリデータバッファに再読み込みします。

RDエリア障害かつバッファ障害

インメモリデータバッファとRDエリアの両方に障害が発生している状態です。

最新の状態に回復する場合は，バックアップファイルとアンロードログファイルを使ってpdrstrコマンドでRDエリアを最新の状態に回復し，その内容を再度インメモリ化します。

同期取得時点に回復する場合は，バックアップファイルを使ってpdrstrコマンドでRDエリアを同期取得時点に回復し，その内容を再度インメモリ化します。

これらの障害状態については，pddbls -Mコマンドで確認できます。詳細については，「障害が発生したときに最初に確認すること」を参照してください。

ポイント

バッファ障害で，かつRDエリアが障害閉塞クローズ状態のときだけ，データベース回復ユティリティ（pdrstr）を実行できます。RDエリア障害が発生している場合（RDエリア障害かつバッファ障害を含む）は，一度インメモリ化を解除してから回復する必要があります。

(2)　回復方法を決めるときの基準

バッファ障害が発生している場合，回復方法は次の条件によって異なります。

どの時点に回復するか（最新の状態か，または同期取得時点か）

同期取得時点に回復する場合，関連RDエリアがあるか

詳細については，図「回復手順の参照先を決めるフローチャート」を参照してください。

5.2　障害が発生したときに最初に確認すること

障害が発生したときは，まずpddbls -Mコマンドを実行して障害発生個所を確認します。pddbls -Mコマンドの実行結果を次の図に示します。

図5‒1　pddbls -Mコマンドの実行結果

MEMORY-STATUSに表示されるRDエリアとインメモリデータバッファの状態から障害発生個所を確認します。RDエリアとインメモリデータバッファの状態を次の表に示します。

表5‒1　RDエリアとインメモリデータバッファの状態

MEMORY-STATUSの表示

状態

意味

Y(SYNC)

正常

DB同期状態

Y(ASYNC)

正常

DB非同期状態

Y(OBST-MEM)

障害発生

バッファ障害状態

Y(OBST-DB)

障害発生

RDエリア障害状態

Y(OBST-ALL)

障害発生

RDエリア障害状態かつバッファ障害状態

N

正常

インメモリ化していない

バッファ障害が発生している場合は，データベースをどの時点に回復するか（最新の状態か，または同期取得時点か）を決めます。また，関連RDエリアがあるかどうかについても確認してください。回復手順の参照先を決めるフローチャートを次の図に示します。

5.3以降では，それぞれの回復方法について説明しています。どのパターンに該当するか，次のフローチャートで確認してください。

図5‒2　回復手順の参照先を決めるフローチャート

ポイント

RDエリア障害だけの場合は，常に最新の状態に回復できます。

最新の状態に回復する場合は，関連RDエリアの有無を意識する必要はありません。

同期取得時点とは，DB同期状態のときを指します（インメモリ化した時点，またはRDエリアとインメモリデータバッファの同期を取った時点）。

ログレスモードでバッチ業務を実行中に障害が発生した場合

ログレスモードでバッチ業務を実行中に障害が発生した場合は，次のフローチャートに従ってください。回復手順の参照先を決めるフローチャート（ログレスモードでバッチ業務を実行した場合）を次の図に示します。

図5‒3　回復手順の参照先を決めるフローチャート（ログレスモードでバッチ業務を実行した場合）

ポイント

RDエリア障害だけの場合は，インメモリデータバッファ上に最新のデータがあるため，再度インメモリデータバッファとインメモリRDエリアの同期を取ることで，常に最新の状態に回復できます。

バッファ障害が発生している場合（RDエリア障害かつバッファ障害を含む）は，同期取得時点から業務を再実行する必要があります。

同期取得時点とは，DB同期状態のときを指します（インメモリ化した時点，またはRDエリアとインメモリデータバッファの同期を取った時点）。

5.3　RDエリア障害が発生した場合の回復手順

5.3.1　RDエリア障害が発生した場合の回復手順の例題

ここでは，RDエリア障害が発生した場合の回復手順について，例題を使って説明します。

(1)　障害発生時の状況

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

また，RDDATA01，RDLOB01およびRDIDX01は異なるHiRDBファイルシステム領域に作成されているとします。

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

図5‒4　障害発生時の状況（RDエリア障害が発生した場合）

［説明］

RDDATA01，RDLOB01およびRDIDX01をインメモリ化しました。

更新業務を実行し，インメモリデータバッファとRDLOB02のデータを更新しました。

pdhold -bコマンドでインメモリデータバッファとRDエリアの同期を取りました。このとき，RDDATA01およびRDLOB01への書き込みは正常にできましたが，RDIDX01が書き込みエラーによってRDエリア障害になりました。

このときのインメモリデータバッファと各RDエリアの状態を次に示します。

インメモリデータバッファの状態：正常（最新の状態）

RDDATA01の状態：正常（最新の状態）

RDLOB01の状態：正常（最新の状態）

RDIDX01の状態：RDエリア障害

RDLOB02の状態：正常（最新の状態）

(2)　障害回復の手順

インメモリデータバッファ上に最新のデータがあるため，インメモリデータバッファとRDIDX01の同期を再度取り，RDIDX01を最新の状態に回復します。

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

図5‒5　障害回復の手順（RDエリア障害が発生した場合）

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

サーバプロセスをリフレッシュします。

 pdpfresh -s BES1

ディスク交換を行う場合にこの操作を実行してください。この操作を実行しないとディスクを切り離すことができません。

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

 pdrels -r RDDATA01,RDLOB01

pdhold -bコマンドを実行したため，RDDATA01およびRDLOB01が参照可能バックアップ閉塞状態になっています。閉塞を解除して，RDDATA01およびRDLOB01に対する更新業務を続行します。

RDIDX01の障害を取り除きます。

ディスク障害が発生した場合は，マニュアル「HiRDB システム運用ガイド」の「ディスク障害が発生したときの対処方法」を参照して対処してください。

インメモリデータバッファとRDIDX01の同期を取ります。

 pdhold -r RDIDX01 -b

インメモリデータバッファ上のデータがRDIDX01に書き込まれました。これによって，RDIDX01は最新の状態に回復されました。

RDIDX01の閉塞を解除します。

 pdrels -r RDIDX01

参考

RDエリア障害の回復を行う場合は，バックアップファイルを使用しません。

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

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

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

項番

実行コマンド

障害が発生したRDエリア

障害が発生していないRDエリア

RDIDX01

RDDATA01，RDLOB01

コマンド実行後のバッファの状態※1

コマンド実行後のRDエリアの状態※2

コマンド実行後のバッファの状態※1

コマンド実行後のRDエリアの状態※2

−

−

RDエリア障害状態

障害閉塞かつオープン状態

DB同期状態

参照可能バックアップ閉塞状態

1

pdpfresh

↓

↓

↓

↓

2

pdrels -r RDDATA01,RDLOB01

↓

↓

↓

オープン状態

3

−

↓

↓

↓

↓

4

pdhold -r RDIDX01 -b

DB同期状態

参照可能バックアップ閉塞状態

↓

↓

5

pdrels -r RDIDX01

↓

オープン状態

↓

↓

（凡例）

↓：状態の変化なし

−：該当しない

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

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

5.4　バッファ障害が発生した場合の回復手順

ここでは，バッファ障害が発生した場合の回復手順について，例題を使って説明します。また，インメモリデータバッファとRDエリアの両方に障害が発生している場合も，基本的な回復手順は同じであるため，ここで一緒に説明します。

なお，ここで説明する回復手順は，インメモリ化するときにバックアップを取得していることを前提としています。バックアップを取得するタイミングについては，「バックアップを取得するタイミング」を参照してください。

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

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

(1)　障害発生時の状況

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

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

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

［説明］

RDDATA01，RDLOB01およびRDIDX01をインメモリ化しました。また，関連するRDエリアRDLOB02と一緒にバックアップを取得しました。

更新業務を実行し，インメモリデータバッファとRDLOB02のデータを更新しました。

pdhold -bコマンドでインメモリデータバッファとRDエリアの同期を取りました。このとき，バッファ障害になりました。

このときのインメモリデータバッファと各RDエリアの状態を次に示します。

インメモリデータバッファの状態：バッファ障害

RDDATA01の状態：障害閉塞状態（同期取得時（インメモリ化時）の状態）

RDLOB01の状態：障害閉塞状態（同期取得時（インメモリ化時）の状態）

RDIDX01の状態：障害閉塞状態（同期取得時（インメモリ化時）の状態）

RDLOB02の状態：正常（最新の状態）

(2)　障害回復の手順

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

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

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

［説明］

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

アンロードログファイルを使ってRDDATA01，RDLOB01およびRDIDX01を最新の状態に回復します（RDDATA01，RDLOB01およびRDIDX01のデータはバックアップ取得時点と同じ状態であるため，回復時にバックアップファイルは使用しません）。

ただし，RDエリア障害とバッファ障害の両方が発生している場合は，バックアップファイルとアンロードログファイルを使ってRDDATA01，RDLOB01およびRDIDX01を回復します。

RDDATA01およびRDIDX01のデータを再度インメモリ化します。

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

RDDATA01，RDLOB01およびRDIDX01をクローズ状態にします。

 pdclose -r RDDATA01,RDLOB01,RDIDX01

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

RDDATA01，RDLOB01およびRDIDX01のインメモリ化を強制的に解除します。

 pdmemdb -k rels -r RDDATA01,RDLOB01,RDIDX01 -d

現用のシステムログファイルを調べます。

 pdlogls -d sys

システムログファイルをスワップします。

 pdlogswap -d sys -w

現用だったファイルの内容をアンロードします。

 pdlogunld -d sys -g log01 -o C:¥usr¥hirdb¥pdlogunld¥unldlog01

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

RDDATA01，RDLOB01およびRDIDX01の障害閉塞クローズを解除します。

 pdrels -r RDDATA01,RDLOB01,RDIDX01 -o

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

RDDATA01，RDLOB01およびRDIDX01をコマンド閉塞クローズ状態にします。

 pdhold -r RDDATA01,RDLOB01,RDIDX01 -c

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

 pdmemdb -k stay -r RDDATA01,RDLOB01,RDIDX01

これによって，インメモリデータバッファは最新の状態に回復されました。

RDDATA01，RDLOB01およびRDIDX01の閉塞クローズを解除します。

 pdrels -r RDDATA01,RDLOB01,RDIDX01 -o

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

RDエリア障害かつバッファ障害の場合

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

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

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

表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エリアの状態のことです。

5.4.2　同期取得時点に回復する場合（関連RDエリアなし）

同期取得時点に回復する場合について説明します。

(1)　障害発生時の状況

RDDATA01（表格納RDエリア），RDLOB01（LOBデータ格納RDエリア）およびRDIDX01（インデクス格納RDエリア）をインメモリ化しました。

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

図5‒8　障害発生時の状況（バッファ障害を同期取得時点に回復する場合（関連RDエリアなし））

［説明］

RDDATA01，RDLOB01およびRDIDX01をインメモリ化しました。また，このとき，バックアップを取得しました。

更新業務を実行し，インメモリデータバッファ上のデータを更新しました。

pdhold -bコマンドでインメモリデータバッファとRDエリアの同期を取ろうとしましたが，バッファ障害によって，RDDATA01，RDLOB01およびRDIDX01との同期が取れませんでした。

このときのインメモリデータバッファと各RDエリアの状態を次に示します。

インメモリデータバッファの状態：バッファ障害

RDDATA01の状態：障害閉塞状態（同期取得時（インメモリ化時）の状態）

RDLOB01の状態：障害閉塞状態（同期取得時（インメモリ化時）の状態）

RDIDX01の状態：障害閉塞状態（同期取得時（インメモリ化時）の状態）

(2)　障害回復の手順

RDDATA01，RDLOB01およびRDIDX01中のデータは同期取得時（インメモリ化時）のままです。RDDATA01，RDLOB01およびRDIDX01のデータを再度インメモリ化してインメモリデータバッファを同期取得時点に回復します。

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

図5‒9　障害回復の手順（バッファ障害を同期取得時点に回復する場合（関連RDエリアなし））

［説明］

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

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

ただし，RDエリア障害とバッファ障害の両方が発生している場合は，バックアップファイルを使ってRDDATA01，RDLOB01およびRDIDX01を回復したあとにインメモリ化します。

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

RDDATA01，RDLOB01およびRDIDX01をクローズ状態にします。

 pdclose -r RDDATA01,RDLOB01,RDIDX01

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

RDDATA01，RDLOB01およびRDIDX01のインメモリ化を強制的に解除します。

 pdmemdb -k rels -r RDDATA01,RDLOB01,RDIDX01 -d

RDDATA01，RDLOB01およびRDIDX01の障害閉塞クローズを解除します。

 pdrels -r RDDATA01,RDLOB01,RDIDX01 -o

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

RDDATA01，RDLOB01およびRDIDX01をコマンド閉塞クローズ状態にします。

 pdhold -r RDDATA01,RDLOB01,RDIDX01 -c

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

 pdmemdb -k stay -r RDDATA01,RDLOB01,RDIDX01

これによって，インメモリデータバッファは同期取得時点の状態に回復されました。

RDDATA01，RDLOB01およびRDIDX01の閉塞クローズを解除します。

 pdrels -r RDDATA01,RDLOB01,RDIDX01 -o

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

RDエリア障害かつバッファ障害の場合

RDエリア障害とバッファ障害の両方が発生している場合は，手順2.でインメモリ化を解除したあと，バックアップファイルからRDエリアを同期取得時点に回復してください。それ以外の手順については，バッファ障害の場合と同じです。

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

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

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

項番

実行コマンド

コマンド実行後のバッファの状態※1

コマンド実行後のRDエリアの状態※2

RDDATA01，RDLOB01，RDIDX01

−

−

バッファ障害状態

障害閉塞かつオープン状態

1

pdclose -r RDDATA01,RDLOB01,RDIDX01

↓

障害閉塞かつクローズ状態

2

pdmemdb -k rels -r RDDATA01,RDLOB01,RDIDX01 -d

未使用状態

↓

3

pdrels -r RDDATA01,RDLOB01,RDIDX01 -o

↓

オープン状態

4

pdhold -r RDDATA01,RDLOB01,RDIDX01 -c

↓

コマンド閉塞かつクローズ状態

5

pdmemdb -k stay -r RDDATA01,RDLOB01,RDIDX01

DB同期状態

↓

6

pdrels -r RDDATA01,RDLOB01,RDIDX01 -o

↓

オープン状態

（凡例）

↓：状態の変化なし

−：該当しない

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

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

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

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

(1)　障害発生時の状況

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

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

図5‒10　障害発生時の状況（バッファ障害を同期取得時点に回復する場合（関連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のデータをインメモリデータバッファに再度インメモリ化します。

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

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

［説明］

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エリアの状態は次の表のように遷移します。表の項番は，「障害回復の手順」の実行手順の番号と対応しています。なお，表中の実行コマンドは，一部オプションを省略しています。

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

項番

実行コマンド

正常に書き込みできたRDエリア

正常に書き込みできなかったRDエリア

インメモリ化していないRDエリア

RDDATA01，RDLOB01

RDIDX01

RDLOB02

コマンド実行後のバッファの状態※１

コマンド実行後の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

↓

オープン状態

↓

オープン状態

オープン状態

（凡例）

↓：状態の変化なし

−：該当しない

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

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

6　こんなときどうする

この章では，インメモリデータ処理を実行する場合に知っておくとよい操作について説明します。

6.1　インメモリデータバッファとRDエリアの同期を取るには

ここでは，インメモリデータバッファとRDエリアの同期を取る方法，およびそのタイミングについて説明します。

6.1.1　同期を取る方法

インメモリデータバッファとRDエリアの同期を取る場合，ほかのトランザクションが対象RDエリアを参照できるように，通常はpdhold -bコマンドを使います。

また，pdhold -b以外のコマンドでも，インメモリデータバッファとRDエリアの同期が取れます。インメモリデータバッファとRDエリアの同期を取るコマンドを次に示します。

pdhold -b

pdhold -b -w

pdhold -c

pdclose

なお，どのコマンドを使用しても，同期の取得に掛かる処理時間は同じです。

注意事項

同期取得中の更新トランザクションに対する処理は，使用するコマンドによって異なります。このことを考慮して同期取得に使用するコマンドを決定してください。または，同期を取るときは更新業務を停止してください。

コマンド実行後はRDエリアの状態が変わります（バックアップ閉塞，または閉塞かつクローズ状態）。そのため，業務を続行する場合は，pdrelsコマンドで閉塞を解除する必要があります。

pdhold -bコマンドの場合，リスト用RDエリアは指定できません。

6.1.2　同期を取るタイミング

バッファとRDエリアの同期を取るタイミングは，主に次の二つが考えられます。

バックアップを取得する前

バックアップを取得する前には，バッファとRDエリアの同期を取ることをお勧めします。

バッチ業務を実行したあと

バッチ業務を実行したあとには，バッチ実行後のインメモリデータバッファ障害に備えて，バッファとRDエリアの同期を取ることをお勧めします。

6.2　インメモリデータバッファの利用状況を確認するには

インメモリデータバッファの利用状況は，pddbls -Mコマンドを実行することで確認できます。コマンドの実行例と実行結果を次に示します。

［コマンド実行例］

 pddbls -r ALL -M

［実行結果］

［説明］

インメモリデータバッファの利用状況は，MEMORY-STATUSの値で確認します。

Y：インメモリ化しています。

N：インメモリ化していません。

また，RDエリアとインメモリデータバッファの状態は，次の六つのどれかになります。

MEMORY-STATUSの表示

意味

Y(SYNC)

DB同期状態

Y(ASYNC)

DB非同期状態

Y(OBST-MEM)

バッファ障害状態

Y(OBST-DB)

RDエリア障害状態

Y(OBST-ALL)

RDエリア障害状態かつバッファ障害状態

N

インメモリ化していない

6.3　インメモリデータバッファの統計情報を確認するには

6.3.1　確認方法

(1)　インメモリデータバッファの名称を調べる

インメモリデータバッファの統計情報を確認するには，まず，HiRDBが決定したインメモリデータバッファの名称を調べます。

インメモリデータバッファの名称は，pdbuflsコマンドの実行結果で確認できます。実行結果にインメモリデータバッファの名称を表示させるには，-Mオプションを指定します。コマンドの実行例と実行結果を次に示します。

［コマンド実行例］

 pdbufls -k def -M

［実行結果］

(2)　インメモリデータバッファの統計情報を確認する

(1)で調べたバッファの名称をpdbuflsコマンドに指定して，インメモリデータバッファの統計情報を確認できます。

インメモリデータバッファの統計情報は，pdbuflsコマンドに-Mオプションを指定することで確認できます。コマンドの実行例を次に示します。

［コマンド実行例］

 pdbufls -k sts -M -a _pdidbuf0000001

コマンドの実行結果については，マニュアル「HiRDB コマンドリファレンス」を参照してください。

6.4　強制的にインメモリ化を解除するには

6.4.1　解除方法

(1)　前提条件

障害が発生した場合や，テスト環境の場合は，インメモリ化を強制的に解除することがあります。インメモリ化を強制的に解除する場合は，最初にインメモリデータバッファの状態を確認してください。インメモリデータバッファの状態に合わせて，RDエリアの状態を次の表に示すとおりにコマンドで変更してください。その後，(2)に示す方法でインメモリ化を解除します。

表6‒1　インメモリ化を強制的に解除するときのRDエリアの状態

インメモリデータバッファの状態

コマンド実行後のRDエリアの状態

DB非同期状態

コマンド閉塞かつオープン状態

バッファ障害状態

障害閉塞かつクローズ状態

RDエリア障害状態

コマンド閉塞かつオープン状態

バッファ障害状態かつRDエリア障害状態

障害閉塞かつクローズ状態

(2)　実行方法

強制的にインメモリ化を解除するには，pdmemdb -k rels -dコマンドを使用します。コマンドの実行例を次に示します。

［コマンド実行例］

 pdmemdb -k rels -r RDDATA01 -d

これによって，インメモリデータバッファがなくなります。また，RDエリアは障害閉塞状態になります。なお，この場合の障害閉塞は，pdrelsコマンドで解除できます。

注意事項

pdhold -sコマンドを実行した場合にも，RDエリアのインメモリ化が強制的に解除され，インメモリデータバッファがなくなります。このとき，RDエリアは同期化閉塞状態になります。

6.5　インメモリデータバッファ上のデータを破棄するには

6.5.1　インメモリデータバッファ上のデータを破棄する前提条件と実行方法

(1)　前提条件

インメモリデータバッファ上のデータを破棄するには，インメモリデータバッファがDB非同期状態で，RDエリアがコマンド閉塞かつオープン状態である必要があります。

(2)　実行方法

インメモリデータバッファのデータを破棄するには，pdmemdb -k cancelコマンドを使用します。コマンドの実行例を次に示します。

［コマンド実行例］

 pdmemdb -k cancel -r RDDATA01

これによって，インメモリデータバッファはバッファ障害状態に，RDエリアは障害閉塞状態になります。なお，この場合の障害閉塞は，pdmemdb -k reloadコマンドを実行してインメモリデータバッファにデータを再読み込みすることで解除できます。

6.6　RDエリアのデータをインメモリデータバッファに再読み込みするには

6.6.1　RDエリアのデータをインメモリデータバッファに再読み込みする前提条件と実行方法

(1)　前提条件

RDエリアのデータをインメモリデータバッファに再読み込みするには，インメモリデータバッファがバッファ障害状態で，RDエリアがコマンド閉塞かつクローズ状態である必要があります。

(2)　実行方法

RDエリアのデータをインメモリデータバッファに再読み込みするには，pdmemdb -k reloadコマンドを使用します。コマンドの実行例を次に示します。

［コマンド実行例］

 pdmemdb -k reload -r RDDATA01

RDエリアのデータを再読み込みしたため，RDエリアとインメモリデータバッファはDB同期状態になります。

付録

付録A　インメモリデータ処理の状態遷移図

インメモリデータ処理の状態遷移を次の図に示します。インメモリデータ処理の実行中は，インメモリデータバッファの状態が次に示す図のように遷移します。障害発生時には，コマンドを使って，インメモリデータバッファの状態を変更し，正常な状態に戻す必要があります。そのため，インメモリデータバッファの状態遷移を正しく理解しておく必要があります（この図は状態遷移を正しく理解するためにお使いください）。

図A‒1　インメモリデータ処理の状態遷移

付録B　インメモリデータ処理に関するコマンド一覧

インメモリデータ処理に関するコマンド一覧を次の表に示します。

表B‒1　インメモリデータ処理に関するコマンド一覧

コマンド

インメモリデータ処理での操作

pdmemdb -k stay

RDエリアをインメモリ化します。

pdmemdb -k rels

インメモリ化を解除します。

pdmemdb -k rels -d

インメモリ化を強制的に解除します。

pdmemdb -k cancel

インメモリデータバッファの更新内容を破棄します。

pdmemdb -k reload

RDエリアのデータをインメモリデータバッファに再読み込みします。

pdhold -b

pdhold -b -w

pdhold -c

pdclose

RDエリアとインメモリデータバッファの同期を取ります。

pddbls -M

RDエリアとインメモリデータバッファの状態を表示します。

pddbls -D

インメモリ化した時刻，およびRDエリアとインメモリデータバッファの同期を取った時刻を表示します。

pdbufls -k def -M

インメモリデータバッファの情報を表示します。

pdbufls -k sts -M

インメモリデータバッファの統計情報を表示します。

付録C　pdmemdbコマンド実行時の前提条件

pdmemdbコマンドを実行する前に，インメモリデータバッファと対象RDエリアの状態を確認してください。正しい状態になっていないとpdmemdbコマンドを実行できません。pdmemdbコマンド実行時の前提条件（インメモリデータバッファと対象RDエリアの状態）を次の表に示します。

表C‒1　pdmemdbコマンド実行時の前提条件（インメモリデータバッファと対象RDエリアの状態）

pdmemdbコマンドの-kオプションの指定

コマンド実行時の前提条件

コマンド実行後の状態

インメモリデータバッファの状態

RDエリアの状態

インメモリデータバッファの状態

RDエリアの状態

stay

未使用状態

コマンド閉塞かつクローズ状態※

DB同期状態

コマンド閉塞かつクローズ状態

reload

バッファ障害状態

障害閉塞かつクローズ状態

rels

-dオプション指定なし

DB同期状態

コマンド閉塞かつクローズ状態

未使用状態（インメモリ化の解除）

コマンド閉塞かつクローズ状態

-dオプション指定あり

DB非同期状態

コマンド閉塞かつオープン状態

障害閉塞かつクローズ状態

バッファ障害状態

障害閉塞かつクローズ状態

RDエリア障害状態

コマンド閉塞かつオープン状態

バッファ障害状態かつRDエリア障害状態

障害閉塞かつクローズ状態

cancel

DB非同期状態

コマンド閉塞かつオープン状態

バッファ障害状態

障害閉塞かつオープン状態

注※

オンライン再編成閉塞中からコマンド閉塞かつクローズ状態に遷移した場合は，pdmemdb -k stayコマンドを実行できません。

索引

D

DB同期状態[1]

DB非同期状態[1]

O

OSのオペレーティングシステムパラメタの確認[1]

P

pd_max_resident_rdarea_no[1]

pd_max_resident_rdarea_shm_no[1]

pdbufls -k def -M[1]

pdbufls -k sts -M[1]

pdclose[1]

pddbls -D[1]

pddbls -M[1]

pdhold -b[1]、[2]

pdhold -b -w[1]

pdhold -c[1]

pdmemdbコマンド実行時の前提条件[1]

pdmemdb -k cancel[1]

pdmemdb -k reload[1]

pdmemdb -k rels[1]

pdmemdb -k rels -d[1]

pdmemdb -k stay[1]

R

RDエリア障害[1]、[2]

RDエリア障害かつバッファ障害[1]

RDエリア障害が発生した場合の回復手順[1]

RDエリア名一括指定[1]

あ

アンインストール[1]

い

異常終了したときのデータの回復方法[1]

インストール[1]

インナレプリカ機能を使用しているときに気をつけること[1]

インメモリRDエリア[1]、[2]

インメモリ化[1]、[2]

インメモリ化できるRDエリア[1]

インメモリ化に失敗したとき[1]

インメモリデータ処理[1]、[2]

インメモリデータ処理の概要[1]

インメモリデータ処理の仕組み[1]

インメモリデータ処理の状態遷移[1]

インメモリデータバッファ[1]、[2]

インメモリデータバッファの統計情報を確認する[1]

インメモリデータバッファの名称を調べる[1]

インメモリデータバッファの優位点[1]

インメモリデータバッファの利用状況を確認する[1]

お

オンライン業務に適用する場合[1]

か

回復方法を決めるときの基準[1]

必ず行う準備[1]

き

基本的な運用の流れ[1]

強制終了[1]

強制的にインメモリ化を解除するには[1]

く

グローバルバッファの割り当て[1]

け

計画停止[1]

こ

コマンド一覧[1]

さ

再読み込みするには[1]

参照可能モード（-M r）でバックアップを取得する場合[1]

し

システム定義の設定[1]

障害回復の基本的な考え方[1]

障害が発生したときに最初に確認すること[1]

障害の種類[1]

初期データロード[1]

せ

正常終了[1]

セグメントの割り当て[1]

セットアップ[1]

前提プラットフォーム[1]

て

ディスク入出力回数[1]

データを破棄するには[1]

テスト業務に適用する場合[1]

と

同期点指定のデータロード[1]

同期を取るタイミング[1]

同期を取る方法[1]

は

バックアップ取得の仕組み[1]

バックアップ取得モード[1]

バックアップを取得するタイミング[1]

バックアップを取得するときに気をつけること[1]

バッチ業務に適用する場合[1]

バッファ障害[1]、[2]

ふ

複数のRDエリアを一度にインメモリ化する場合[1]

ま

マシン環境の確認[1]

め

メモリ容量の確認[1]