付録J.1 HiRDB/SD定義ユティリティ(pdsdbdef)を実行するための条件
インナレプリカ機能を使用する場合,pdsdbdefコマンドはオリジナルRDエリアとレプリカRDエリアの対象のレコード型に関連するすべてのRDエリアに対して処理を行います。
pdsdbdefコマンドを実行するためには,次に示す条件を満たしている必要があります。(a),(b)および(c)の条件を満たしていない場合,pdsdbdefコマンドはエラーになります。SDB定義文ごとにチェック条件が異なります。チェック条件については,「表J-3 チェックが発生するSDB定義文の一覧とそのチェック内容」を参照してください。
- (a)SDB定義文で指定する格納RDエリア名
-
指定された格納RDエリアがオリジナルRDエリアである。
- (b)対象のレコード型と関連RDエリアのレプリカRDエリアの複製定義
-
対象のレコード型と関連RDエリアが複数になる場合,次の条件を満たすかどうか。
-
各RDエリアのレプリカRDエリアの定義数が同じである。
-
各RDエリアのレプリカRDエリアを定義した世代が同じである。
-
- (c)RDエリアの状態
-
対象のレコード型と関連RDエリアが,すべての世代(オリジナルRDエリアも含む)でHiRDB/SD定義ユティリティを実行できる状態である。
RDエリアの状態の確認手順を次に示します。RDエリアの状態ごとのpdsdbdefコマンドの実行可否については,「付録J.2 RDエリアの状態ごとのHiRDB/SD定義ユティリティ(pdsdbdef)の実行可否」を参照してください。
- 〈この項の構成〉
(1) RDエリアの状態の確認手順
*ENTRY DIRECTORY文,*ALTER DIRECTORY文,*CHECK DICTIONARY文,または*DELETE DICTIONARY文を実行する前に,次の手順に従ってRDエリアの状態を確認します。
-
レコード型の関連RDエリア(レコード型,およびインデクスを格納するRDエリア)を調べます。
- <*ENTRY DIRECTORY文,*ALTER DIRECTORY文,または*CHECK DICTIONARY文の場合>
-
SDBデータベース格納定義に記述するRDエリアを確認します。
- <*DELETE DICTIONARY文の場合>
-
pdrdreflsコマンドの-tオプションに各SDBデータベースの任意のレコード型名を指定して,SDBデータベースごとに実行します。
インデクスを格納するRDエリアにほかのSDBデータベースのレコード型のインデクスが定義されている場合,pdrdreflsコマンドで表示される関連RDエリアには,それらの情報も表示されます。そのため,実際にpdsdbdefコマンドが対象とする関連RDエリアよりも範囲が広い場合があります。-aオプション指定で表示されるレコード型名またはインデクス名から対象RDエリアを判断してください。
-
1.で調べたRDエリアで,すべてのオリジナルRDエリアが更新可能状態であることをpddblsコマンドで確認します。
-
1.で調べたRDエリアで,レプリカRDエリアの状態をpddblsコマンドで確認します。pdsdbdefコマンドを実行できる条件を次に示します。
- <オリジナルRDエリアがすべてカレントRDエリアである場合>
-
すべてのレプリカRDエリアが,各世代内で次のどちらかの状態で統一されている必要があります。
・更新可能な状態
・コマンド閉塞かつクローズ状態※
- <オリジナルRDエリアがカレントRDエリアでない場合>
-
(i) pddblsコマンドに-Cオプションを指定して,1.で調べたオリジナルRDエリアのレプリカRDエリアを調べます。
(ii) pddblsコマンドの-qオプションに(i)のレプリカRDエリアの世代番号を指定して,すべてのレプリカRDエリアのカレントRDエリアが更新可能状態であることを確認します。
(iii) 上記以外のレプリカRDエリアが,各世代内で次のどちらかの状態で統一されている必要があります。
・更新可能な状態
・コマンド閉塞かつクローズ状態※
- 注※
-
世代の処理対象となるレコード型に関連するすべてのRDエリアがコマンド閉塞かつクローズ状態の場合は,定義処理がスキップされます。定義処理がスキップされた場合,KFPH22032-Wメッセージが出力されます。定義処理が正常に完了し,KFPH22032-Wメッセージが出力されている場合は,スキップした世代のRDエリアはデータディクショナリ用RDエリアの定義情報と不整合となります。そのため,閉塞を解除する前にRDエリアの再作成が必要になります。詳細については「付録J.3(1) KFPH22032-Wメッセージの出力と対処」を参照してください。