2.4.6 SDBデータベース定義情報の正副管理
SDBデータベース定義情報を基に,ユーザ公開テーブル(インタフェースエリアテンプレートなど)と制御テーブルを作成します。これらのテーブルを格納する領域は,オン中SDBデータベース定義変更時のメモリ不足を回避するため,TP1/EE起動時に2面確保し,正副制御を行います。
「SDBデータベース定義情報領域(正)」は,現オンラインが使用しているSDBデータベース定義情報用の各種テーブルを格納します。「SDBデータベース定義情報領域(副)」は,事前取得した新しいSDBデータベース定義情報用の各種テーブルを格納します。正副切り替えを実施することで,新しいSDBデータベース定義情報が使用可能になります。
SDBデータベース定義情報領域を操作する契機を次に示します。
項番 |
契機 |
内容 |
---|---|---|
1 |
TP1/EE起動 |
SDBデータベース定義情報領域を確保します。また,起動時に取得したSDBデータベース定義情報をSDBデータベース定義情報領域(正)に格納します。この時点では,SDBデータベース定義情報領域(副)は未使用状態です。 |
2 |
SDBデータベース定義情報の事前取得 |
取得したSDBデータベース定義情報をSDBデータベース定義情報領域(副)に格納します。 |
3 |
SDBデータベース定義情報の正副切り替え |
SDBデータベース定義情報領域の正副を切り替えます。切り替え後,eesdhchgコマンドで「-d」が指定されていればSDBデータベース定義情報領域(副)を未使用状態にします。 |
項番 |
状態 |
内容 |
---|---|---|
1 |
使用中 |
領域上にSDBデータベース定義情報が格納されています。 |
2 |
未使用 |
領域上にSDBデータベース定義情報が格納されていません。 |
3 |
作成中 |
領域上にSDBデータベース定義情報を格納中です。 |
- 〈この項の構成〉
(1) TP1/EE起動時
システムワークメモリから,正副2面分のSDBデータベース定義情報領域を確保します。起動時に取得したSDBデータベース定義情報を基に作成したユーザ公開テーブルおよび制御テーブルは,SDBデータベース定義情報領域(正)に格納します。この時点では,SDBデータベース定義情報領域(副)は未使用状態となります。
SDBデータベース定義情報領域(正)への格納後,領域サイズ,空きサイズなどの情報を,KFSB84301-Iメッセージとして出力します。空きサイズが小さい場合,オン中定義変更が領域不足で失敗するおそれがあります。そのため,SDBデータベース定義情報領域サイズを増やしてTP1/EEの再起動を行うことを推奨します。
(a) SDBデータベース定義情報領域サイズ
SDBデータベース定義情報領域のサイズは,sdh_redef_areaオペランドで指定します。
オン中SDBデータベース定義変更を繰り返す度にSDBデータベース定義情報領域の未使用サイズが減っていき,最終的に領域不足で失敗するおそれがあります。そのため,最終的なSDBデータベース定義変更内容を想定した値をsdh_redef_areaオペランドに指定することを推奨します。
(b) SDBデータベース定義情報領域の追加確保
SDBデータベース定義情報が大きく,SDBデータベース定義情報領域に格納できない場合は,不足サイズ分の領域をシステムワークメモリから追加確保し,SDBデータベース定義情報を格納します。システムワークメモリが不足した場合は,malloc()を使用してOSから追加確保します。OSからの確保に失敗した場合は,プロセスが異常終了します。追加確保した領域は,SDBデータベース定義情報の事前取得時に解放します。
(2) SDBデータベース定義情報の事前取得(eesdhchgコマンドの-bオプション)
最新のSDBデータベース定義情報をHiRDBから取得します。SDBデータベース定義情報を基に作成したユーザ公開テーブルや制御テーブルは,SDBデータベース定義情報領域(副)に格納します。この時点では,最新のSDBデータベース定義を使用したDBアクセスはできません。また,ee_sdh_init()/CBLEESDH('INIT')の提供APIは,古いSDBデータベース定義情報のユーザ公開テーブルを返却します。
事前取得が正常終了した場合は,SDBデータベース定義情報領域(副)の領域サイズ,空きサイズなどの情報を,KFSB84301-Iメッセージとして出力します。
すでにSDBデータベース定義情報領域(副)にSDBデータベース定義情報を格納している状態で,再度SDBデータベース定義情報の事前取得を行うと,新たに取得したSDBデータベース定義情報で上書きします。
(a) SDBデータベース定義情報取得の同時実行数
SDBデータベース定義情報の事前取得時,trnstringで指定しているRM数のSBトランザクションを起動し,各RMから同時にSDBデータベース定義情報を取得します。
SBトランザクションの同時実行数は,sdh_redef_maxcntオペランドで指定します。同時実行数が多い場合は,SDBデータベース定義情報の取得に掛かる時間は短いですが,一時的にTP1/EEやHiRDBの負荷が高くなり,かつ,処理スレッドを占有するため,業務遅延などが発生するおそれがあります。同時実行数が少ない場合は,SDBデータベース定義情報の取得に掛かる時間は長いですが,業務への影響は少なくなります。
(b) SDB構成チェック
TP1/EE起動時と同じ構成チェックを行います。
(c) SDBデータベース定義情報領域の追加確保
TP1/EE起動時と同じく,SDBデータベース定義情報領域が不足した場合は追加確保を行います。追加確保に失敗した場合は,事前取得が失敗します。
(d) SDBデータベース定義情報の取得時間
SBトランザクションでは,SDBデータベース定義情報を取得するため,HiRDBに対して最大で「(SDB表数×3)」回SQLを発行します。1回のSQLの応答待ち時間は,HiRDBクライアント環境定義のPDCWAITTIMEオペランド値となります。また,SQL発行個所以外は,トランザクションタイマで60秒の時間監視を行います。したがって,SBトランザクションの実行時間は,最大で「PDCWAITTIME値×「(SDB表数×3)」+60」秒となります。
(e) SDBデータベース定義情報取得のタイムアウト
事前取得の終了待ち時間は,eesdhchgコマンドの-tオプションで指定します。指定時間内に事前取得が終了しなかった場合,コマンドは異常終了しますが,事前取得は継続します。事前取得が終了したかどうかは,eesdhchgコマンドを-lオプション指定で実行することで確認できます。SDBデータベース定義情報領域(副)の状態が「作成中」の場合は事前取得は継続中,「作成中」以外の場合は事前取得は終了しています。
(f) 障害一覧
SDBデータベース定義情報の事前取得時に発生する障害を次の表に示します。
項番 |
障害内容 |
---|---|
1 |
SDBデータベース定義情報の取得時にSQLエラーが発生※ |
2 |
全RMから取得したSDB表数の合計が0※ |
3 |
SDBデータベース定義情報領域の追加確保失敗※ |
4 |
SDBデータベース定義情報領域(副)が作成中 |
5 |
TP1/EE起動時点で有効なSDB表が定義されていたRMが,現在は未起動,または,SDB表が定義されていない※ |
(3) SDBデータベース定義情報の正副切り替え(eesdhchgコマンドの-cオプション)
SDBデータベース定義情報領域の正副を切り替え,事前取得したSDBデータベース定義情報を使用可能にします。これ以降,ee_sdh_init()/CBLEESDH('INIT')の提供APIは,新しいSDBデータベース定義情報のユーザ公開テーブルを返却します。
正副切り替えが正常終了した場合は,KFSB84302-Iメッセージを出力します。
(a) SDBデータベース定義情報の戻し
何らかの障害が発生し,SDBデータベース定義情報領域(副)上の取得日付の古いSDBデータベース定義情報に戻す必要がある場合は,-fオプション指定で正副切り替えを行ってください。-fオプションを省略した場合は,運用ミスと判断してコマンドはエラーとなります。
(b) 正副切り替え後のSDBデータベース定義情報領域(副)削除
-dオプション指定で正副切り替えを行うと,正副切り替えの正常終了後,SDBデータベース定義情報領域(副)上のSDBデータベース定義情報をクリアして未使用状態にします。SDBデータベース定義情報の戻しを行う場合は,-dオプションを指定しないでください。
(c) 障害一覧
SDBデータベース定義情報の正副切り替え時に発生する障害を次の表に示します。
項番 |
障害内容 |
---|---|
1 |
トランザクション静止化中でない |
2 |
他ノード実行時にSDBデータベース定義情報領域(副)が未使用,かつ,-zオプション未指定 |
3 |
SDBデータベース定義情報領域(副)が作成中 |
4 |
SDBデータベース定義情報領域(副)の取得日時が,SDBデータベース定義情報領域(正)の取得日時より古い,かつ,-fオプションおよび-zオプション未指定 |
(4) SDBデータベース定義情報の表示(eesdhchgコマンドの-lオプション)
SDBデータベース定義情報領域(正)およびSDBデータベース定義情報領域(副)の各種情報を出力します。この出力内容を基に,使用しているSDBデータベース定義情報が妥当かどうか,次回のオン中SDBデータベース定義変更時に領域不足が発生しないかなどを判断できます。