「DD文の設定項目が多すぎて、何を書けばいいのか分からない……」
「DISP=(NEW,CATLG,DELETE)って、結局どういう動きをするんだ?」
もしお前がDD文のパラメータの海に溺れそうになっているなら、安心してくれ。ここはJCLの基礎体力を鍛え上げる**「データ定義の道場」**だ。
俺はIT格闘家のじいじ。27年の現場経験で、数えきれないほどのDD文を書き、そして不適切なDISP設定でデータが消え去る悲劇も見てきた。
DD文は、プログラムという「格闘家」に、どの「武器(データ)」を使わせるかを指定する、いわば装備選択だ。ここを間違えれば、どんなに強いプログラムも戦う前に自滅しちまう。
この記事では、
- DD文の基本構造と、DSN・UNIT・VOLの役割
- 現場で必須!DISP(後続処理)の最強コンビネーション解説
これらを、実戦サンプルを交えて27年選手の俺が叩き込む。
読み終える頃には、お前はDD文を「なんとなく」ではなく「確信を持って」書けるようになっているはずだ。
さあ、最強の装備を整えるためのゴングを鳴らすぜ!
DSN:戦う相手(データセット名)を指名しろ
まずはどのファイルと戦うのか、名前をはっきりさせるのが基本だ。
解説
44文字以内で指定。一時ファイルなら && を付けるのが掟だぜ。
//MYDATA DD DSN=USER.LIVE.DATA,DISP=SHR

DISP:後始末の美学(全パラメータ完全解説
DISP(ディスポジション)は、試合開始時の状態と、終わった後の勝ち名乗り(後始末)を決める。
(状態, 正常終了時, 異常終了時) の3要素で構成されるぜ。
第1パラメータ:状態(ステータス)
- NEW: 新しくリング(ファイル)を作る。
- OLD: 既存ファイルを独占(排他)して使う。ガチの勝負だ。
- SHR: 既存ファイルをみんなで共有。読み取り専用ならこれだ。
- MOD: 既存データのケツに追記する。
第2パラメータ:正常終了時(ノーマル・ディスポ)
- CATLG: カタログに登録して保存。次戦に備える。
- DELETE: 用が済んだら削除。リングを綺麗にするのがマナーだ。
- PASS: 次のステップへバトンを繋ぐ!
- KEEP: 削除せず保持する(カタログはしない)。
第3パラメータ:異常終了時(アブノーマル・ディスポ)
- DELETE: ABENDしたら中途半端なブツは消しちまえ!再戦(再実行)の邪魔だ。
- CATLG: 負けた原因(データ)を調査するために残す時に使う。
//OUTPUT DD DSN=USER.DATA.RESULT,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,SPACE=(CYL,5)
UNIT & VOL:戦う場所(デバイス)を確保しろ
- UNIT: 装置名(SYSDAなど)を指定。
- VOL=SER: 特定のディスク(ボリューム名)を指名する時に使う。
//DISK01 DD UNIT=SYSDA,VOL=SER=VOL001,DSN=&&TEMP,SPACE=(TRK,5)
SPACE:リングの広さ(領域)を決めろ
解説: (単位, (一次量, 二次量), RLSE)
じいじの一撃: RLSE(未使用領域解放)を忘れんな!余ったスペースをシステムに返す。これができる奴が「デキるエンジニア」だ。
//WORK DD UNIT=SYSDA,SPACE=(CYL,(10,5),RLSE)
DCB:戦い方のスタイル(属性)を定義しろ
データの「型」を決めるパラメータだ。ここを間違えると速攻でKO(ABEND)されるぜ。
- RECFM: レコード形式(FB: 固定長、VB: 可変長など)。
- LRECL: 1レコードの長さ。
- BLKSIZE: ブロックサイズ。今は 0 指定でシステムに任せるのが「現代流」だ!
//FILEA DD DSN=USER.DATA.FB,DISP=(NEW,CATLG),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0),
// UNIT=SYSDA,SPACE=(TRK,1)

LIKE:最強のコピー術(既存属性の継承)
「あのファイルと同じ設定で作ってくれ」という便利な技だ。
解説: LIKE=モデルファイル名 と書く。
注意: 属性はコピーするが、SPACE(サイズ)はコピーされないから自分で書けよ!
//NEWFILE DD DSN=USER.COPY.FILE,
// DISP=(NEW,CATLG),
// LIKE=USER.MASTER.MODEL,
// SPACE=(CYL,1)
SYSOUT:試合結果のジャッジ(出力)
実行ログやリストの出し先だ。
解説: SYSOUT=* で標準出力クラスへ。
//SYSPRINT DD SYSOUT=*
DUMMY:シャドーボクシング(空振り処理)
実際にファイルを読み書きせずに、プログラムの動きだけ確認したい時に使うぜ。
//SYSIN DD DUMMY
* :直筆のサイン(インストリーム・データ)
JCLの中に直接、制御パラメータなどを書き込む時に使う。
//SYSIN DD *
SORT FIELDS=COPY
/*
後退参照:前のステップの背中を追え
「さっきのステップで作ったアレを使いたい」という時に使う。
書式: DSN=*.ステップ名.DD名
//STEP1 EXEC PGM=PROG1
//OUT DD DSN=&&TEMP,DISP=(NEW,PASS),UNIT=SYSDA,SPACE=(TRK,1)
//*
//STEP2 EXEC PGM=PROG2
//IN DD DSN=*.STEP1.OUT,DISP=(OLD,DELETE)
【じいじのデバッグ・ログ:最後に一言】
DD文は、一箇所でもカンマが足りなかったり、スペルが違ったりすれば「JCLエラー」で試合終了だ。
だが、このパラメータを自由自在に操れるようになれば、メインフレームという巨大な獣を乗りこなす「真の格闘家」になれるぜ。
若手諸君、現場でABENDを食らっても腐るなよ。それはお前が強くなるための「伸び代」だ!
わからないことがあったら、いつでも俺のブログに戻ってきな。
よし、今回の特訓はここまで!次は「世代管理(GDG)」あたりを叩き込んでやるか……。楽しみにしてろよ!
「次は、ジョブの親子関係を管理する『GDG(世代管理)』について特訓するぜ。準備はいいか?」
関連記事:






コメント