12.1.2 フォーマットライト【4V DAM】
pdsdbdefコマンドで定義したデータベースに初期値を格納し,インデクスを作成します。この機能をフォーマットライトといいます。初期値はHiRDB/SDが自動的に作成します。データロードとは異なり,HiRDB/SDの利用者が格納データを準備する必要はありません。フォーマットライトの概要を次の図に示します。
- [説明]
-
-
データベースの定義(SDBデータベース定義およびSDBデータベース格納定義)に従ってHiRDB/SDが初期値を作成してデータベースに格納します。
-
インデクスに関する情報がインデクス情報ファイルに出力され,ソート用ワークファイルでインデクスのデータをソートしてインデクスが作成されます。
-
SDBデータベース定義のFORMAT句にUSEを指定したレコード型に対してだけフォーマットライトを実行できます。
フォーマットライトは,4V DAMのSDBデータベースの場合に実行できます。
- 〈この項の構成〉
(1) フォーマットライトの際に準備するファイルと作成されるファイル
フォーマットライトの際に準備するファイルと作成されるファイルについては,「12.1.1(1) データロードの際に準備するファイル」および「12.1.1(3) データロードの際に作成されるファイル」を参照してください。
(2) インデクスの作成モードの選択
インデクスの作成モードもデータロードと同じく,次に示す2つのモードがあります。
-
インデクス一括作成モード
-
インデクス更新モード
- ポイント
-
フォーマットライトの場合,シーケンシャルインデクスのキー値が重複することがありません。そのため,性能面で優れているインデクス一括作成モードを使用してください。
(3) SDBデータベースが横分割されている場合のフォーマットライト
SDBデータベースが複数のRDエリアに横分割されている場合のフォーマットライトの方法を説明します。
-
SDBデータベースがサーバ内横分割されている場合
複数のRDエリアに対して一括してフォーマットライトが実行できます(pdsdblodコマンドの一度の実行でフォーマットライトが完了します)。また,RDエリア単位にフォーマットライトを実行することもできます。この場合,pdsdblodコマンドを複数回実行します。
-
SDBデータベースがサーバ間横分割されている場合
フォーマットライトはバックエンドサーバ単位でしか実行できないため,SDBデータベースがサーバ間横分割されている場合は,バックエンドサーバ単位にフォーマットライトを実行します。
(4) 初期値として格納されるデータ
初期値として格納されるデータは,データベースの定義(SDBデータベース定義およびSDBデータベース格納定義)に従ってHiRDB/SDが自動的に作成します。HiRDB/SDが作成する初期値の例を次に示します。
SDBデータベース定義
: SCHEMA DAM1 DBTYPE 4V DAM RECORD REC0 …仮想ルートレコード 2 DBKDBMEI CHARACTER 4 TYPE D,L …データベース名 2 DBKHIDUKE XCHARACTER 1 TYPE K,L …日付 2 DBKTENBAN XCHARACTER 3 TYPE K,L …店番 2 DBKKUBUN XCHARACTER 4 TYPE K,R …区分 RECORD REC1 2 DBKDBMEI CHARACTER 4 TYPE D,L …データベース名 2 DBKEY 3 DBKHIDUKE XCHARACTER 1 TYPE K,L …日付 3 DBKTENBAN XCHARACTER 3 TYPE K,L …店番 3 DBKKUBUN XCHARACTER 4 TYPE K,R …区分 3 DBKITIRENBANGOU INTEGER TYPE K,N …一連番号 2 USERDA1 CHARACTER 5 TYPE U,D …ユーザデータ RECORD REC2 2 DBKDBMEI CHARACTER 4 TYPE D,L …データベース名 2 DBKEY 3 DBKHIDUKE XCHARACTER 1 TYPE K,L …日付 3 DBKTENBAN XCHARACTER 3 TYPE K,L …店番 3 DBKKUBUN XCHARACTER 4 TYPE K,R …区分 3 DBKITIRENBANGOU INTEGER TYPE K,N …一連番号 2 USERDA2 CHARACTER 10 TYPE U,D …ユーザデータ SET 親子集合1 : MEMBER REC1 : OCCURRENCE NUMBER 10 …一連番号の最大値 SET 親子集合2 : MEMBER REC2 : OCCURRENCE NUMBER 20 …一連番号の最大値 :
SDBデータベース格納定義
: STORAGE SCHEMA DAM1 FOR DAM1 : SDBOPTION KEYDEF DBKDBMEI …データベース名 DATA DAM1 KEYDEF DBKHIDUKE …日付 DATA X'C1' DATA X'C2' KEYDEF DBKTENBAN …店番 DATA X'000011' DATA X'000012' KEYDEF DBKKUBUN …区分 DATA X'00000001', REC1 DATA X'00000002', REC2 :
初期値として格納されるデータ
キー部 |
ユーザデータ部 |
||||
---|---|---|---|---|---|
データベース名 |
日付 |
店番 |
区分 |
一連番号 |
ユーザデータ※1 |
DAM1 |
X'C1' |
X'000011' |
X'00000001' |
1〜10※2 |
X'0000000000' |
DAM1 |
X'C1' |
X'000011' |
X'00000002' |
1〜20※2 |
X'00000000000000000000' |
DAM1 |
X'C1' |
X'000012' |
X'00000001' |
1〜10※2 |
X'0000000000' |
DAM1 |
X'C1' |
X'000012' |
X'00000002' |
1〜20※2 |
X'00000000000000000000' |
DAM1 |
X'C2' |
X'000011' |
X'00000001' |
1〜10※2 |
X'0000000000' |
DAM1 |
X'C2' |
X'000011' |
X'00000002' |
1〜20※2 |
X'00000000000000000000' |
DAM1 |
X'C2' |
X'000012' |
X'00000001' |
1〜10※2 |
X'0000000000' |
DAM1 |
X'C2' |
X'000012' |
X'00000002' |
1〜20※2 |
X'00000000000000000000' |
- 注※1
-
対応するレコードごとに構成要素を切り替えます。
- 注※2
-
SDBデータベース定義のOCCURRENCE NUMBER句に指定した一連番号の最大値の数だけ,レコードが作成されます。
- キー部の作成仕様
-
-
SDBデータベース定義のRECORD句に指定したDBKEYに対応する構成要素に対して,SDBデータベース格納定義のKEYDEF句に指定したすべてのキー値の組み合わせが作成されます。
-
SDBデータベース定義のRECORD句に指定したDBKEYに対応する構成要素に対して,下位の構成要素から先頭の構成要素の順番に,キー値を組み替えながらすべての組み合わせが作成されます。
-
1つの構成要素に設定するキー値は,対応するSDBデータベース格納定義のKEYDEF句に指定したキー値の指定順に設定されます。
-
一連番号の構成要素は,1からSDBデータベース定義のOCCURRENCE NUMBER句に指定した一連番号の最大値(指定値が0の場合は1)までが採番されます。
-
SDBデータベース格納定義のKEYDEF句で指定したキー値の定義順にキー部が作成されます。作成されたキー部(データベースキー)がSEQUENTIAL句で定義した並びと異なる場合,論理エラーとなるため注意してください。
-
- ユーザデータ部の作成仕様
-
-
ユーザデータ部に格納される初期値は,構成要素のデータ型によって決まります。構成要素のデータ型とユーザデータ部に格納される初期値を次の表に示します。
表12‒2 構成要素のデータ型とユーザデータ部に格納される初期値 構成要素のデータ型
データ長(単位:バイト)
ユーザデータ部に格納される初期値
CHARACTER n
n
X'00....00'(0を代入)
XCHARACTER n
n
X'00....00'(0を代入)
PACKED DECIMAL FIXED p,s
↓(p+s)÷2↓+1
X'00....0C'
(最終8ビットをX'0C'とし,残りは0を代入)
INTEGER
4
X'00....00'(0を代入)
-
- 格納されるレコード数の仕様
-
フォーマットライトによって格納されるレコードの最大数は次のようになります。
(A÷B)×C
A:SDBデータベース格納定義のKEYDEF句で指定したすべてのキー値の組み合わせ数
B:格納先のレコード数
C:SDBデータベース定義のOCCURRENCE NUMBER句に指定した一連番号の最大値の総数
(5) 注意事項
-
SDBデータベース格納定義のKEYDEF句で,すべてのキーに対するキー値を過不足なく定義しておいてください。過不足があった場合でも,定義情報に従ってフォーマットライトが実行されます。
-
ユーザキー(SDBデータベース定義のRECORD句で構成要素のデータ種別を指定するTYPE句にU,Kを指定)がある場合,フォーマットライト機能は実行できません。この場合,フォーマットライトしたい値で入力データファイルを作成し,データロードを実行してください。