Структура пакетного задания JCL
Итак, прежде чем передать пакетное задание системе, пользователь должен подготовить его текст на языке JCL. Обычно текст задания создается в некотором наборе данных с помощью текстового редактора, откуда специальными средствами пользовательского интерфейса его можно направить на обработку в подсистему JES2. z/OS требует, чтобы для представления заданий использовались только последовательные и библиотечные наборы данных с параметрами RECFM=FB и LRECL=80. Текст задания вводится, как правило, прописными буквами.
Задание состоит из последовательности управляющих предложений JCL (job control statement)2). Каждое предложение имеет следующую структуру:
//ИМЯ ОПЕРАТОР ОПЕРАНДЫ КОММЕНТАРИЙ
В первых двух позициях всегда (или почти всегда) указываются две косые черты (знак слэш /), которые являются главным отличительным признаком предложений JCL.
Поле имя начинается с третьей позиции и служит для идентификации представленного в предложении оператора. Фактически это метка, на которую можно ссылаться из различных предложений задания или других заданий. Имя может содержать не более восьми символов, включающих латинские буквы, цифры и специальные знаки ($ # @). Имя должно начинаться с буквы или специального знака, русские буквы и пробелы использовать нельзя. В некоторых специальных случаях применяют составные имена, использующие в качестве разделителя точку. Пробел в третьей позиции является признаком отсутствия имени.
Примеры правильных имен: STOUT1, SYSPRINT, IVANOV, IVAN#S
Примеры неправильных имен: 3DIAGNOZ (начинается с цифры), DIAGNOSTIKA (содержит более восьми символов), ТОМ+И (содержит недопустимый символ И).
Вслед за полем имени следуют другие поля, отделяемые друг от друга одним или несколькими пробелами.
JOB | Начало задания и режим выполнения задания |
EXEC | Начало шага задания, указание выполняемой программы или процедуры |
DD | Описание набора данных и используемых устройств |
COMMAND | Ввод системной (консольной) команды MVS или команды JES |
PROC | Начало процедуры и описание параметров процедуры |
PEND | Конец процедуры |
JCLLIB | Список библиотек для поиска процедур, указанных в задании |
OUTPUT | Параметры формирования отчета о выполнении задания (SYSOUT) |
INCLUDE | Имя раздела библиотеки, текст которого необходимо включить в указанное место задания |
CNTL/ENDCNTL | Начало и конец блока управляющих параметров, передаваемых программе во входном потоке |
IF/THEN/ELSE/ENDIF | Условное выполнение шагов задания (ветвление) |
SET | Инициализация или изменение значений символических параметров |
/* | Оператор ограничения данных, представленных во входном потоке |
// | Пустой оператор (конец задания) |
//* | Оператор комментария |
Поле оператор определяет тип управляющего оператора JCL, который задается одним из ключевых слов, представленных в таблица 5.4. Назначение и использование основных операторов (JOB, EXEC, DD) будет рассмотрено в данной главе.
Поле операнды предложения JCL содержит список разделенных запятыми параметров, которые записывают вслед за именем оператора (через один или несколько пробелов). С помощью параметров сообщают информацию, необходимую для выполнения оператора. Различают позиционные и ключевые параметры.
Позиционные параметры часто имеют произвольный формат записи, но всегда указываются в строгой последовательности и всегда перед ключевыми параметрами. Если позиционный параметр опускается, то запятая, которая должна следовать за параметром, остается (исключение составляет случай, когда опускается последний параметр в списке позиционных параметров). Примеры записи позиционных параметров:
333,TEST,,0.8E-15 NEW,,DELETE
Ключевые параметры задаются с использованием предопределенных ключевых слов в виде: ключевое_слово=значение. Например, CLASS=B, REGION=100M, COND=(1,LE). Последовательность записи ключевых параметров - произвольная.
Отдельные параметры могут включать подпараметры, которые также задают в виде списка, заключенного в апострофы или круглые скобки. Как и параметры, подпараметры могут быть позиционными и ключевыми. Скобки или апострофы опускаются, если в списке указывается один подпараметр. Например:
DISP=(NEW,,DELETE) - позиционные подпараметры параметра DISP
DCB=(RECFM=FB,LRECL=80) - ключевые подпараметры параметра DCB
В поле комментарий предложения JCL помещают произвольную текстовую информацию, поясняющую назначение или особенности использования отдельных операторов. Отметим, что для этой цели может применяться специальный оператор комментария //*. Этот текст не обрабатывается при выполнении задания.
Поля предложений JCL не должны выходить за пределы 71-й позиции строки. Если же текст предложения не умещается в одной строке, то его (кроме предложения комментария //*) разрешается продолжить на следующей.
При этом если необходимо перенести на следующую строку некоторые параметры из списка, то следует соблюдать такие правила:
- Разрыв строки необходимо сделать точно в том месте, где располагается разделительная запятая списка параметров.
- В следующей строке в позициях 1 и 2 нужно указать символы //. Продолжить ввод списка параметров, начиная не ранее 4-й, но не позднее 16-й позиции строки.
Вот как выглядит запись многострочного предложения JCL:
//OUT DD UNIT=SYSDA,VOL=SER=UB1, // DISP=NEW,SPACE=(1000(5,4)), // DSN=&&TEMP1
Исключением из этого правила является ситуация, когда перенос требует "разорвать" параметр, заключенный в апострофы. В этом случае следует вводить текст предложения до 71-й позиции включительно, а продолжение располагать точно с 16-й позиции следующей строки.
Структуру задания в z/OS схематично можно представить в виде последовательности операторов (рис. 5.21). Первым всегда указывается оператор задания JOB, который отмечает начало задания. Непосредственно за оператором JOB могут следовать другие операторы (DD, JCLLIB, OUTPUT), с помощью которых описывают общие ресурсы задания в целом (наборы данных, библиотеки процедур, параметры вывода результатов).
Рис. 5.21. Структура задания
Последующие операторы задания группируются по шагам или пунктам. Шаг (пункт) задания (job step) - это последовательность операторов JCL, начинающаяся с оператора EXEC и включающая некоторое количество иных операторов (в основном DD). Оператор EXEC (его называют иногда оператором шага задания) устанавливает, какую программу (загрузочный модуль) или процедуру JCL необходимо выполнить. С помощью операторов DD в шаге задания описывают наборы данных и/или устройства, используемые при выполнении указанной в операторе EXEC программы (процедуры). Шаги задания выполняются строго последовательно. Однако есть возможность пропуска (невыполнения) некоторых шагов в зависимости от результатов работы предыдущих шагов с помощью операторов IF/THEN/ELSE или параметра COND операторов JOB и EXEC.Общее количество шагов задания не может превышать 255, включая шаги всех вызываемых в задании процедур.
Далее приводится обзор основных операторов языка управления заданиями, который, однако, не претендует на полноту и не может служить заменой стандартной документации [14], [15]. Многие операторы и особенности их применения представлены без некоторых деталей, которые могут понадобиться при практическом использовании JCL. При описании формата операторов используются привычные мнемонические правила:
- информация, заключенная в квадратные скобки, является необязательной и может быть опущена;
- символ | используется для указания альтернативных значений, из которых следует выбрать одно.
Нужно отметить, что язык JCL достаточно подробно описан в отечественной литературе [16], [17], [18], в том, правда, виде, в каком он сложился к началу 90-х годов.