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 버전을 동적으로 대체합니다.