JCL-데이터 세트 정의
데이터 세트 이름은 파일 이름을 지정하며 JCL에서 DSN으로 표시됩니다. DSN 매개 변수는 새로 생성되거나 기존 데이터 세트의 물리적 데이터 세트 이름을 나타냅니다. DSN 값은 마침표로 구분되고 총 길이가 44 자 (영숫자) 인 1-8 자 길이의 하위 이름으로 구성 될 수 있습니다. 다음은 구문입니다.
DSN=&name | *.stepname.ddname
Temporary datasets작업 기간 동안 만 저장이 필요하며 작업 완료시 삭제됩니다. 이러한 데이터 세트는 다음과 같이 표현됩니다.DSN=&name 또는 단순히 DSN이 지정되지 않았습니다.
작업 단계에서 생성 된 임시 데이터 세트가 다음 작업 단계에서 사용되는 경우 다음과 같이 참조됩니다. DSN=*.stepname.ddname. 이것은 ... 불리운다Backward Referencing.
데이터 세트 연결
동일한 형식의 데이터 세트가 두 개 이상있는 경우 단일 DD 이름으로 프로그램에 입력으로 연결하여 전달할 수 있습니다.
//CONCATEX JOB CLASS=6,NOTIFY=&SYSUID
//*
//STEP10 EXEC PGM=SORT
//SORTIN DD DSN=SAMPLE.INPUT1,DISP=SHR
// DD DSN=SAMPLE.INPUT2,DISP=SHR
// DD DSN=SAMPLE.INPUT3,DISP=SHR
//SORTOUT DD DSN=SAMPLE.OUTPUT,DISP=(,CATLG,DELETE),
// LRECL=50,RECFM=FB
위의 예에서 세 개의 데이터 세트가 연결되어 SORTIN DD 이름의 SORT 프로그램에 입력으로 전달됩니다. 파일이 병합되고 지정된 키 필드에서 정렬 된 다음 SORTOUT DD 이름의 단일 출력 파일 SAMPLE.OUTPUT에 기록됩니다.
데이터 세트 재정의
표준화 된 JCL에서 실행될 프로그램 및 관련 데이터 세트는 JCL에서 호출되는 카탈로그 프로 시저 내에 배치됩니다. 일반적으로 테스트 목적 또는 사고 수정을 위해 카탈로그 화 된 절차에 지정된 것과 다른 데이터 세트를 사용해야 할 수 있습니다. 이 경우 프로 시저의 데이터 세트는 JCL에서 대체 될 수 있습니다.
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//JSTEP1 EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
// DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
//*
//* The cataloged procedure is as below:
//*
//CATLPROC PROC PROG=,BASELB=MYCOBOL.BASE.LIB1
//*
//STEP1 EXEC PGM=&PROG
//STEPLIB DD DSN=&BASELB,DISP=SHR
//IN1 DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1 DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD MYDATA.BASE.LIB1(DATA1),DISP=SHR
//*
//STEP2 EXEC PGM=SORT
위의 예에서 데이터 세트 IN1은 PROC의 MYDATA.URMI.INPUT 파일을 사용하며 이는 JCL에서 대체됩니다. 따라서 실행에 사용되는 입력 파일은 MYDATA.OVER.INPUT입니다. 데이터 세트는 STEP1.IN1로 참조됩니다. JCL / PROC에 한 단계 만있는 경우 데이터 세트는 DD 이름만으로 참조 할 수 있습니다. 마찬가지로 JCL에 두 개 이상의 단계가있는 경우 데이터 세트는 JSTEP1.STEP1.IN1로 대체됩니다.
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
// DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
// DD DUMMY
// DD DUMMY
//*
위의 예에서 IN1에 연결된 세 개의 데이터 세트 중 첫 번째 데이터 세트는 JCL에서 대체되고 나머지는 PROC에있는대로 유지됩니다.
JCL에서 GDG 정의
세대 데이터 그룹 (GDG)은 공통 이름으로 서로 관련된 데이터 세트 그룹입니다. 일반 이름은 GDG베이스라고하며베이스와 관련된 각 데이터 세트를 GDG 버전이라고합니다.
예를 들어, MYDATA.URMI.SAMPLE.GDG는 GDG 기본 이름입니다. 데이터 세트의 이름은 MYDATA.URMI.SAMPLE.GDG.G0001V00, MYDATA.URMI.SAMPLE.GDG.G0002V00 등으로 지정됩니다. GDG의 최신 버전은 MYDATA.URMI.SAMPLE.GDG (0), 이전 버전은 (-1), (-2) 등으로 표시됩니다. 프로그램에서 작성되는 다음 버전은 JCL에서 MYDATA.URMI.SAMPLE.GDG (+1)로 참조됩니다.
JCL에서 GDG 생성 / 변경
GDG 버전은 동일하거나 다른 DCB 매개 변수를 가질 수 있습니다. 초기 모델 DCB는 모든 버전에서 사용하도록 정의 할 수 있지만 새 버전을 만들 때 재정의 할 수 있습니다.
//GDGSTEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE GDG(NAME(MYDATA.URMI.SAMPLE.GDG) -
LIMIT(7) -
NOEMPTY -
SCRATCH)
/*
//GDGSTEP2 EXEC PGM=IEFBR14
//GDGMODLD DD DSN=MYDATA.URMI.SAMPLE.GDG,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,10,20),
// DCB=(LRECL=50,RECFM=FB)
//
위의 예에서 IDCAMS 유틸리티는 SYSIN DD 문에 전달 된 아래 매개 변수를 사용하여 GDGSTEP1의 GDG베이스를 정의합니다.
NAME GDG베이스의 물리적 데이터 셋 이름을 지정합니다.
LIMIT GDG베이스가 보유 할 수있는 최대 버전 수를 지정합니다.
EMPTY LIMIT에 도달하면 모든 세대를 분류 해제합니다.
NOEMPTY 가장 최근의 세대를 분류 해제합니다.
SCRATCH 카탈로그 해제 된 세대를 물리적으로 삭제합니다.
NOSCRATCH 데이터 세트를 삭제하지 마십시오. 즉, UNIT 및 VOL 매개 변수를 사용하여 참조 할 수 있습니다.
GDGSTEP2에서 IEFBR14 유틸리티는 모든 버전에서 사용할 모델 DD 매개 변수를 지정합니다.
IDCAMS는 LIMIT 증가, EMPTY를 NOEMPTY로 변경 등과 같은 GDG의 정의 매개 변수를 변경하는 데 사용할 수 있으며 SYSIN 명령을 사용하는 관련 버전은 다음과 같습니다. ALTER MYDATA.URMI.SAMPLE.GDG LIMIT(15) EMPTY.
JCL에서 GDG 삭제
IEFBR14 유틸리티를 사용하여 단일 버전의 GDG를 삭제할 수 있습니다.
//GDGSTEP3 EXEC PGM=IEFBR14
//GDGDEL DD DSN=MYDATA.URMI.SAMPLE.GDG(0),
// DISP=(OLD,DELETE,DELETE)
위의 예에서는 최신 버전의 MYDATA.URMI.SAMPLE.GDG가 삭제됩니다. 정상적인 작업 완료시 DISP 매개 변수는 DELETE로 코딩됩니다. 따라서 작업 실행이 완료되면 데이터 세트가 삭제됩니다.
IDCAMS는 SYSIN 명령을 사용하여 GDG 및 관련 버전을 삭제하는 데 사용할 수 있습니다. DELETE(MYDATA.URMI.SAMPLE.GDG) GDG FORCE/PURGE.
FORCEGDG 버전과 GDG베이스를 삭제합니다. GDG 버전이 아직 만료되지 않은 만료 날짜로 설정된 경우 해당 버전은 삭제되지 않으므로 GDG 기반이 유지됩니다.
PURGE 만료 날짜에 관계없이 GDG 버전과 GDG베이스를 삭제합니다.
JCL에서 GDG 사용
다음 예에서는 최신 버전의 MYDATA.URMI.SAMPLE.GDG가 프로그램에 대한 입력으로 사용되고 새 버전의 MYDATA.URMI.SAMPLE.GDG가 출력으로 생성됩니다.
//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=MYCOBB
//IN1 DD DSN=MYDATA.URMI.SAMPLE.GDG(0),DISP=SHR
//OUT1 DD DSN=MYDATA.URMI.SAMPLE.GDG(+1),DISP=(,CALTG,DELETE)
// LRECL=100,RECFM=FB
여기서 GDG가 MYDATA.URMI.SAMPLE.GDG.G0001V00과 같은 실제 이름으로 참조 된 경우 실행하기 전에 매번 JCL을 변경합니다. (0) 및 (+1)을 사용하면 실행을 위해 GDG 버전을 동적으로 대체합니다.