JCL за предыдущий месяц-год в имени набора данных
Мне нужно запустить задание в первый рабочий день месяца с учетными данными для закрытия на конец месяца (предыдущего месяца), которые будут использоваться в некоторых заданиях на конец года. Я хотел бы запускать одно и то же задание каждый месяц без вмешательства оператора и указывать месяц и год закрытия в имени набора данных, чтобы можно было легко определить, для какого периода закрытия набор данных был завершен. В настоящее время выполнить 8 отдельных заданий для выполнения этой задачи. Пожалуйста, предоставьте конкретные образцы JCL.
2 ответа
Непонятно, почему вы выполняете 8 отдельных заданий для выполнения этой задачи, что делает каждое задание?
Используете ли вы какой-либо планировщик для запуска задания в определенное время?
Вы можете использовать EZACFSM1, чтобы использовать системные символические параметры для добавления информации о дате / времени к именам наборов данных.
http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/IEA1E241/2.2.2
Лучшее решение для этого - использовать функции вашего планировщика заданий. Было сказано, что...
Вот более свежая ссылка на EZACFSM1. OS/390 2.10 более 10 лет не используется.
Однако вы не можете просто использовать эту утилиту для создания набора данных с информацией о дате / времени в его названии. EZACFSM1 просто читает из SYSIN и пишет в SYSOUT, интерпретируя системные символы, которые он читает.
Вы можете использовать EZACFSM1, чтобы написать оператор ALTER для IDCAMS, переименовывая набор данных со статическим именем (один без года и месяца в нем) в тот, который имеет эти атрибуты. Это требует двух дополнительных шагов и предостережения.
//CATLG EXEC PGM=IEFBR14
//DD01 DD DISP=(NEW,CATLG),
// DSN=STUFF,
// AVGREC=U,
// LRECL=80,
// RECFM=FB,
// SPACE=(80,(1000,100))
//*
//MKALTER EXEC PGM=EZACFSM1
//SYSOUT DD DISP=(NEW,PASS),
// AVGREC=U,
// LRECL=80,
// RECFM=FB,
// SPACE=(80,(1000,100))
//SYSIN DD *
ALTER STUFF NEWNAME(STUFF.Y&YR4&MON)
//*
//RENAME EXEC PGM=IDCAMS
//SYSIN DD DISP=(OLD,PASS),DSN=*.MKALTER.SYSOUT
//SYSPRINT DD SYSOUT=*
//*
Предостережение связано с планированием работы. Допустим, ваша работа опаздывает в последний день месяца. Если он находится в очереди ввода достаточно долго, он будет запущен в первый день следующего месяца, что приведет к неправильному изменению ALTER.