この章では、ファイルとデータ・セットの章に示した情報をさらに詳しく説明します。この章で説明する内容は次のとおりです。
MSS によってサポートされるデータ・セット編成を次の表に示します。
| 略語 | 編成 | コメント |
|---|---|---|
| GDG | 世代別データ・グループ | |
| IS | 索引順次 | |
| ISU | 索引順次、移動不可能 | |
| PDSM | 区分データ・セット・メンバー | Micro Focus 編成 |
| PO | 区分 | |
| POU | 区分、移動不可能 | |
| PS | 物理順次 | |
| PSU | 物理順次、移動不可能 | |
| VSAM | 仮想記憶アクセス方式 |
注:
VSAM 以外のデータ・セット編成のレコード・フォーマットを次の表に示します。
| 略語 | フォーマット | 制御文字 | レコード区切り文字 | コメント |
|---|---|---|---|---|
| F | 固定長 | なし | なし | |
| FA | 固定長 | ANSI | なし | |
| FB | ブロック化固定長 | なし | なし | F フォーマットと同じ |
| FBA | ブロック化固定長 | ANSI | なし | FA フォーマットと同じ |
| FBM | ブロック化固定長 | マシン | なし | FM フォーマットと同じ |
| FBS | スパンド・ブロック化固定長 | なし | なし | F フォーマットと同じ |
| FM | 固定長 | マシン | なし | |
| FS | スパンド固定長 | なし | なし | F フォーマットと同じ |
| LSEQ | 行順次 | なし | 改行復帰 | |
| U | 不定長 | Windows または UNIX では結果は予測不能 | ||
| V | 可変長 | なし | Micro Focus タイプ | |
| VA | 可変長 | ANSI | Micro Focus タイプ | |
| VB | ブロック化可変長 | なし | Micro Focus タイプ | V フォーマットと同じ |
| VBA | ブロック化可変長 | ANSI | Micro Focus タイプ | VA フォーマットと同じ |
| VBM | ブロック化可変長 | マシン | Micro Focus タイプ | VM フォーマットと同じ |
| VBS | スパンド・ブロック化可変長 | なし | Micro Focus タイプ | V フォーマットと同じ |
| VM | 可変長 | マシン | Micro Focus タイプ | |
| VS | スパンド可変長 | なし | Micro Focus タイプ | V フォーマットと同じ |
注:ブロック化レコード・フォーマットおよびスパンド・レコード・フォーマットは、MSS では受け入れられますが、PC または UNIX 環境では意味を持ちません。
VSAM ファイルのレコード・フォーマットを次の表に示します。
| 略語 | フォーマット | 制御文字 | コメント |
|---|---|---|---|
| ES | 入力順 | なし | |
| KS | キー順 | なし | |
| LS | 線形順 | なし | 未サポート |
| RR | 相対レコード | なし |
MSS では、次の表で定義されている論理レコード長が扱われます。
| レコード・フォーマット | 論理レコード長 |
|---|---|
| 固定長 | 実際のレコード長 |
| 可変長 | 実際のレコード長 + 4 |
| LSEQ | 最大レコード長 |
注:EBCDIC を使用するようにコンパイルされたプログラムがあり、LSEQ の RECFM 、0 の LRECL、および ASCII の文字セットを使用したファイルをそのプログラムで読み取る場合、ファイルのデータは MSS によって読み取りの一部として自動的に EBCDIC に変換されます。この自動変換は、16 進データが含まれていないファイル (コントロール・カードなど) を読み取る場合に役立ちます。
MSS は、次の編成とレコード・フォーマット・マッピングを使用して、PC および UNIX 上の物理ファイルにデータ・セットを書き込みます。
| メインフレーム | 物理ファイル | |||
|---|---|---|---|---|
| データ・セット編成 | レコード・フォーマット | ファイル編成 | レコード・フォーマット | コメント |
| DA、DAU、PS、PSU | 任意の固定 (Fnn) または可変 (Vnn) フォーマット | 順次 | Micro Focus | |
| DA、DAU、PS、PSU | LSEQ | 行順次 | Micro Focus | 常に ANSI 文字セットを使用します。テキスト・エディターでのみ編集可能です。 |
| GDG | カタログ・エントリーのみ | |||
| IS、ISU | 任意の固定 (Fnn) または可変 (Vnn) フォーマット | 索引順次 | Micro Focus | |
| PDSM | 任意の固定 (Fnn) または可変 (Vnn) フォーマット | 順次 | Micro Focus | |
| PDSM | LSEQ | 行順次 | Micro Focus | |
| PO、POU | カタログ・エントリーのみ | |||
| VSAM | ES | 順次 | ESDS | |
| VSAM | ES | 索引順次 | ESDS | 定義された代替索引 |
| VSAM | KS | 索引順次 | Micro Focus | |
| VSAM | LS | 未サポート | ||
| VSAM | RR | 相対 | Micro Focus | |
世代別データ・グループ (Generation Data Group; GDG) は、2 つの部分で構成されます。1 つは GDG モデル、もう 1 つはGDG に関連付けられている一連の物理順次 (PS) データ・セットです。これらのデータ・セットは、バイアス、または世代別データ・セットと呼ばれます。
GDG をセットアップする主な方法としては、次の 2 つがあります。
次の例では、世代別データ・グループを作成する場合に使用できるジョブを示します。STEP00 では GDG モデルが作成され、STEP01 では 5 つの新しい GDG バイアスが作成されます。
//MFIDMFGD JOB 'MFIDMFGD',CLASS=A,MSGCLASS=A,NOTIFY=MFIDF
//STEP00 EXEC PGM=IDCAMS
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//AMSDUMP DD SYSOUT=*
//SYSIN DD *
DELETE MFIDMF.TEST.GDG
DEFINE GENERATIONDATAGROUP(NAME(MFIDMF.TEST.GDG)
EMPTY NOSCRATCH LIMIT(96))/*
//STEP01 EXEC PGM=IEFBR14
//SYSUXX DD DSN=MFIDMF.TEST.GDG(+1),DISP=(NEW,CATLG),SPACE=(TRK,(5,2))
//SYSUXY DD DSN=MFIDMF.TEST.GDG(+2),DISP=(NEW,CATLG),SPACE=(TRK,(5,2))
//SYSUXZ DD DSN=MFIDMF.TEST.GDG(+3),DISP=(NEW,CATLG),SPACE=(TRK,(5,2))
//SYSUXA DD DSN=MFIDMF.TEST.GDG(+4),DISP=(NEW,CATLG),SPACE=(TRK,(5,2))
//SYSUXB DD DSN=MFIDMF.TEST.GDG(+5),DISP=(NEW,CATLG),SPACE=(TRK,(5,2))
MFIDMF.TEST.GDG.G0001V00、MFIDMF.TEST.GDG.G0002V00、MFIDMF.TEST.GDG.G0003V00、MFIDMF.TEST.GDG.G0004V00、MFIDMF.TEST.GDG.G0005V00 という名前の 5 つのバイアスは、STEP01 によって作成されます。
バイアスは、相対番号によって、実際の参照によって、または世代別データ・グループ全体の一部として処理できます。例えば、前述のジョブの実行後に次の各文を実行できます。
//SYSUT1 DD DSN=MFIDMF.TEST.GDG,DISP=SHR
これにより、MFIDMF.TEST.GDG.G0001V00 から MFIDMF.TEST.GDG.G0005V00 までの一組の連結されたデータ・セットで構成されている世代別データ・グループ MFIDMF.TEST.GDG 全体が参照されます。
//SYSUT1 DD DSN=MFIDMF.TEST.GDG(0),DISP=SHR
相対番号 0 を使用すると、MFIDMF.TEST.GDG.G0005V00 という名前のデータ・セットが参照されます。
//SYSUT1 DD DSN=MFIDMF.TEST.GDG(-1),DISP=SHR
相対番号 -1 を使用すると、MFIDMF.TEST.GDG.G0004V00 という名前のデータ・セットが参照されます。
//SYSUT1 DD DSN=MFIDMF.TEST.GDG(+1),DISP=SHR
相対番号 +1 を使用すると、MFIDMF.TEST.GDG.G0006V00 という名前の新しいデータ・セットが参照されます。
//SYSUT1 DD DSN=MFIDMF.TEST.GDG.G0003V00,DISP=SHR
実際の参照である G0003V00 を使用すると、MFIDMF.TEST.GDG.G0003V00 という名前のデータ・セットが参照されます。
番号のインクリメントは、ジョブごとに行われます。そのため、連続する 2 つのステップで + 1 を参照した場合、各ステップは同じデータ・セットを使用することになります。
このセクションでは、MSS で GDG を使用する場合の制限事項について説明します。
//NEWFILE DD DSN=TEST.GDG.G0002V00,DISP=(NEW,CATLG)
次の文の代わりに使用する場合に適用されます。
//NEWFILE DD DSN=TEST.GDG(+1)
GDG ごとに、その GDG の現在の世代に対応する G0000V00 データ・セットの番号がシステム・カタログに格納されます。G0000V00 番号を明示的に使用して G0000V00 データ・セットを割り当てる場合は、モデル上の現在の世代を 0 に設定する必要があります。これにより、カタログ API は、モデルに対して現在カタログされている最上位の G0000V00 データ・セットの番号を検索して正しい現在の G0000V00 番号を再計算することを強制されます。
現在の世代番号は、G0000V00 データ・セットをアンカタログすることなく、モデルの削除と再定義によってリセットできます。これは、次に示すように、IDCAMS を使用して行うことができます。
DELETE TEST.GDG
DEFINE GENERATIONDATAGROUP -
(NAME(TEST.GDG) -
SCRATCH -
LIMIT(02))
例えば、TEST.GDG というカタログされた GDG があり、TEST.G0001V00 および G0002V.00 に対応する 2 つの世代がその GDG に現在含まれているとします。TEST.GDG.G0007V00 データ・セットを直接割り当てる場合は、GDG モデル内の現在の世代フィールドをリセットする必要があります。これにより、GDG 処理では、関連する G0000V00 データ・セットをすべてスキャンして現在の世代 (このケースでは、G0007V00) に対する正しい値を再計算することが強制されます。これを行わないと、通常の GDG サイクル・プロセスで TEST.GDG.G0007V00 の割り当てを試み、そのデータ・セットがすでに存在することを検出した場合に JCL エラーが発生します。