Учебники

JCL — Определение наборов данных

Имя набора данных указывает имя файла, и оно обозначается DSN в JCL. Параметр DSN относится к имени физического набора данных вновь созданного или существующего набора данных. Значение DSN может состоять из подимен, каждое длиной от 1 до 8 символов, разделенных точками, и общей длиной 44 символа (буквенно-цифровой). Ниже приводится синтаксис:

DSN=&name | *.stepname.ddname

Временные наборы данных нуждаются в хранении только на время выполнения задания и удаляются при завершении задания. Такие наборы данных представлены как DSN = & name или просто без указания DSN.

Если временный набор данных, созданный на шаге задания, будет использоваться на следующем шаге задания, то на него ссылаются как DSN = *. Stepname.ddname . Это называется обратной ссылкой.

Объединение наборов данных

Если существует несколько наборов данных одного и того же формата, они могут быть объединены и переданы в качестве входных данных в программу под одним именем 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

В приведенном выше примере три набора данных объединяются и передаются в качестве входных данных программе SORT с именем SORTIN DD. Файлы объединяются, сортируются по указанным ключевым полям и затем записываются в один выходной файл SAMPLE.OUTPUT с именем SORTOUT DD.

Переопределение наборов данных

В стандартизированном 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 использует файл MYDATA.URMI.INPUT в PROC, который переопределяется в 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.

Определение GDG в JCL

Группы данных генерации (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) и т. Д. Следующая версия, создаваемая в программе, называется JD в MYDATA.URMI.SAMPLE.GDG (+1).

Создать / изменить GDG в JCL

Версии 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 определяет базу GDG в GDGSTEP1 с параметрами ниже, передаваемыми в операторе SYSIN DD:

  • NAME указывает имя физического набора данных базы GDG.

  • LIMIT указывает максимальное количество версий, которое может содержать база GDG.

  • EMPTY отменяет калибровку всех поколений при достижении LIMIT.

  • NOEMPTY uncataloges самое последнее поколение.

  • SCRATCH физически удаляет поколение, когда оно не занесено в каталог.

  • NOSCRATCH не удаляет набор данных, т. Е. На него можно ссылаться, используя параметры UNIT и VOL.

NAME указывает имя физического набора данных базы GDG.

LIMIT указывает максимальное количество версий, которое может содержать база GDG.

EMPTY отменяет калибровку всех поколений при достижении LIMIT.

NOEMPTY uncataloges самое последнее поколение.

SCRATCH физически удаляет поколение, когда оно не занесено в каталог.

NOSCRATCH не удаляет набор данных, т. Е. На него можно ссылаться, используя параметры UNIT и VOL.

В GDGSTEP2 утилита IEFBR14 определяет параметры DD модели, которые будут использоваться всеми версиями.

IDCAMS можно использовать для изменения параметров определения GDG, таких как увеличение LIMIT, изменение EMPTY на NOEMPTY и т. Д., А связанные с ним версии с помощью команды SYSIN — ALTER MYDATA.URMI.SAMPLE.GDG LIMIT (15) EMPTY .

Удалить GDG в JCL

Используя утилиту 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 можно использовать для удаления GDG и связанных с ним версий с помощью команды SYSIN DELETE (MYDATA.URMI.SAMPLE.GDG) GDG FORCE / PURGE .

  • FORCE удаляет версии GDG и базу GDG. Если для какой-либо из версий GDG задана дата истечения срока действия, срок действия которой еще не истек, они не удаляются и, следовательно, база GDG сохраняется.

  • PURGE удаляет версии GDG и базу GDG независимо от даты истечения срока действия.

FORCE удаляет версии GDG и базу GDG. Если для какой-либо из версий GDG задана дата истечения срока действия, срок действия которой еще не истек, они не удаляются и, следовательно, база GDG сохраняется.

PURGE удаляет версии GDG и базу GDG независимо от даты истечения срока действия.

Использование GDG в JCL

В следующем примере последняя версия 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 для выполнения.