Escolar Documentos
Profissional Documentos
Cultura Documentos
JCL
José Italo Silvestrin
IBM Global Services
Italos@br.ibm.com
Fone: (019) 3887-8190
7
2 Generalidades
A finalidade do JCL é comunicar ao sistema operacional o que se
vai fazer e requisitar os recursos necessários para que o serviço possa ser
executado corretamente.
STEP - (ou job step) - Identificado pelo statement EXEC, solicita que o
sistema operacional execute um programa, determina os recursos
necessários e ainda pode conter input para o processamento. Um job
pode ter, no máximos, 255 steps.
JOB - Identificado pelo statement JOB, é uma coleção de steps.
PROCEDURE - Procedure é um stream de statements JCL, que é
executado frequentemente com pouca ou nenhuma modificação.
Quando esse stream estágravado num PDS (biblioteca), costuma-se
chamá-la de procedure catalogada.
8
//****************************************************
//* CRIA BACK UP DE BIBLIOTECA
//****************************************************
//SYSPRINT DD SYSOUT=*
//SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(5,5))
//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(5,5))
//INP DD DISP=SHR,DSN=XXX.BIBL.FONTES
//OUT DD DISP=(,CATLG,DELETE),
// DSN=XXX.BIBL.FONTES.BKP,
// UNIT=SYSDA,VOL=SER=DISCO1,
// DCB=XXX.BIBL.FONTES,
// SPACE=(CYL,(10,5,300),RLSE)
//SYSIN DD *
COPY INDD=((INP,R)),OUTDD=OUT
10
- Interrompa o statement numa vírgula antes da coluna 72
- Coloque um caráter qualquer na coluna 72
- No registro seguinte coloque // nas colunas 1 e 2
- Continue a codificação exatamente na coluna 16.
2.6Sintaxe de Parâmetros
- Codifique todos os parâmetros em letras maiúsculas
- Caso seja necessário usar caracteres especiais, codifique-os entre
apóstrofes.
2.7Backward References
Backward reference é a referência feita a um statement codificado
anteriormente no JCL. Backward references podem ter um dos seguintes
formatos:
- *.ddname
- *.stepname.ddname
- *.stepname.procstepname.ddname
O job contém:
//JOB5 JOB ...
//CALLER EXEC PROC=PROC1
.
//REF1 DD DSNAME=*.CALLER.PSTEP2.DS2
//NEXT EXEC ...
//REF2 DD DSNAME=*.CALLER.PSTEP1.DS1
.
2.8Procedure In-stream
Damos o nome de procedure in-stream quando a procedure está
dentro do próprio job.
- Ela deve começar por um statement PROC e terminar por um
statement PEND. Nesse caso são válidas as seguintes restrições:
- Não são permitidos statements de controle de JES.
- Não é permitido o uso de DD * ou DD DATA
- Não é permitida a definição de uma procedure dentro de outra
procedure
2.9Procedure Catalogada
Damos o nome de procedure catalogada a um JCL gravado como
12
membro de uma biblioteca (PDS). Nesse caso valem as mesmas regras que
as das procedures in-stream, exceto que os statements PROC e PEND são
opcionais.
1) Do input stream
2) Da biblioteca especificada no statement JCLLIB
3) Conforme a concatenação na procedure do JES2
2.10Modificando Procedures
Uma procedure pode ser modificada trocando valores atribuídos a
parâmetros simbólicos ou executando-se um override.
Para facilidade de entendimento vamos usar a procedure abaixo
como exemplo, que estaria gravada numa biblioteca com o nome COPIA:
2.10.1Simbólicos
Caracterizados pelo símbolo "&" colocado antes dos valores. No
exemplo acima veja &MBRIN e &MBROU
Nunca podem estar no lugar de palavras chaves
No statement PROC podem ser atribuídos valores defaults. No
exemplo acima temos "MBRIN=MBR1,MBROU=MBR2"
Seus valores podem ser modificados no statement EXEC de execução
da procedure:
// EXEC COPIA,MBRIN=ENTRADA
Para anular o valor de um simbólico basta referenciá-lo no statement
de execução da proc sem valor nenhum:
// EXEC COPIA,MBROU=
2.10.2Override
- Se a procedure é composta de um único step basta referenciar
apenas o ddname. Por exemplo:
// EXEC COPIA
//SYSIN DD BLKSIZE=3200
13
- Se a procedure tem mais de um step, deve-se usar
stepname.ddname. Por exemplo:
// EXEC COPIA
//PRC1.SYSIN DD BLKSIZE=3200
TEXTO DESCRIÇÃO
// JCL conforme foi submetido
//* Comentário, conforme foi submetido ou comandos de JES2
ou JES3
/* Certos comandos de JES3
XX Statement de procedure que não sofreu override
X/ Statement de procedure que sofreu override
++ Statement de procedure in stream que não sofreu override
+/ Statement de procedure in stream que sofreu override
2.12Started Tasks
Started task é um JCL que deve ser executado imediatamente, a
partir de um comando START. Geralmente é usada para aplicativos críticos.
Embora possam ser jobs (com statement JOB), o mais normal é gravar uma
procedure (sem statement JOB) na SYS1.PROCLIB. Nesse caso, se
gravarmos o JCL com o membername INICIA, ao emitirmos o comando
START, o JES, automaticamente cria um job com o nome de INICIA e o
submete.
14
3 Statements de JCL
3.1Statement COMMAND
Usado para entrar comandos de MVS através de um input stream
num sistema de JES2. É importante notar que o comando será executado
assim que for detetado, ou seja, no momento da leitura do JCL, portanto
antes do job começar a ser executado.
3.1.1Exemplos
// F NETVIEW,CLOSE IMMED
(Em resposta a esse comando o sistema tira do ar imediatamente o
NETVIEW)
3.2Statement Comentário
Usado apenas para documentar um stream JCL, não tem efeito
algum na sua execução
15
Pode ser colocado em qualquer ponto do JCL (após o statement JOB),
//*comentários .....
3.2.1Exemplo
//* ESSE COMENTARIO PODE SER CONTINUADO
//* EM VÁRIOS REGISTROS,
//* DEPENDENDO DA QUANTIDADE
//* DE INFORMACOES QUE SE TEM.
3.3Statement CNTL
Usado para marcar o início de um bloco de statements de controle,
o seu fim é marcado pelo statement ENDCNTL.
3.3.1Exemplo
16
3.4Statement DD
Usado para definir arquivos usados como input/output de um
programa.
//ddname DD parâmetros
//procstepname.ddname DD parâmetros
O "ddname":
- Deve começar na coluna 3 e deve ser único dentro do step.
- Pode ter até 8 caracteres alfanuméricos.
- O primeiro caráter tem de ser alfabético ou nacional ($ # @)
O “ddname” é determinado pela codificação do programa quando,
internamente, são definidos os files e se executam operações de leitura
e gravação (instruções READ/WRITE, GET/PUT, EXECIO, etc).
Portanto só se sabe os ddnames indispensáveis para a execução de um
programa, conhecendo-se o programa internamente.
A omissão do "ddname" indica que o arquivo definido pelo statement
deve ser concatenado com o DD imediatamente anterior, isto é, ambos
os arquivos serão processados como um único arquivo.
Ao se concatenar arquivos com BLKSIZEs diferentes, especifique no
primeiro dos arquivos o maior BLKSIZE presente. Por exemplo:
//INP1 DD DSN=ABC.X1,BLKSIZE=32760
// DD DSN=ABC.X2
// DD DSN=ABC.X3
Ao se concaternar arquivos com tamanhos de registros lógicos
diferentes, codifique explicitamente o parâmetro LRECL fornecendo o
tamanho do maior registro lógico possível.
Se o "ddname" for composto de dois qualificadores separados por um
ponto, teremos o formato "stepname.ddname"; caso seja composto de 3
qualificadores teremos o formato "procstepname.stepname.ddname".
Por exemplo:
//PRCST01.STEP30.SYSPRINT DD SYSOUT=X
Os ddnames abaixo têm significado especial e serão descritos mais
adiante:
JOBCAT SYSCHK
JOBLIB SYSCKEOV
STEPCAT SYSIN
STEPLIB SYSMDUMP
SYSABEND SYSUDUMP
JESJCLIN JESMSGLG
JESJCL JESYSMSG
Os "parâmetros" devem estar separados da palavra DD por pelo menos
17
um branco.
Os parâmetros podem ser posicionais (seu significado depende da
posição dentro do statement) ou de palavra chave (identificados pelo
sinal de igual "=", e podem estar em qualquer posição dentro do
statement.
3.4.1.1Exemplo
//INPUT1 DD *
dados
//INPUT2 DD *
dados
/*
3.4.2Parâmetro AMP
Usado para completar informações sobre arquivos VSAM.
AMP=(subparâmetro)
AMP=('subparâmetro,subparâmetro...')
AMP='subparâmetro,subparâmetro...'
18
AMORG
BUFND=number
BUFNI=number
BUFSP=number
CROPS= ÝNCK¨ ÝNRC¨ ÝNRE¨ ÝRCK¨
OPTCD= {I } {L } {IL}
RECFM= ÝF ¨ ÝFB¨ ÝV ¨ ÝVB¨
STRNO=number
SYNAD=module
TRACE=(subparameter,subparameter...)
ACCBIAS=USER SYSTEM DO
DW SO SW
SMBDFR= {Y N}
SMBHWT= nn
SMBVSP= {nnK nnM}
RMODE31=ALL BUFF CB None
19
- Número de request parameter lists que o programa usará ao
mesmo tempo
SYNAD=module
- Nome da exit que o interface ISAM usará para manusear situações
de erro.
TRACE=(subparameter,subparameter...)
- Especifica as opções que o GTF deve usar ao manusear esse
arquivo.
RMODE31=opção
- Determina se os buffers e control blocks deve ou não residir na
memória 31-bit
3.4.2.1Exemplo
//VSAMDS1 DD DSN=DSM.CLASS,DISP=SHR,
// AMP=('BUFSP=200,BUFND=2',
// 'BUFNI=3,STRNO=4,SYNAD=ERROR')
3.4.3Parâmetro AVGREC
Usado com um arquivo novo para indicar que a unidade de
alocação de espaço é em registros e que o número estabelecido no
parâmetro SPACE está em unidades, milhares ou milhões de registros.
AVGREC=U ou K ou M
3.4.3.1Exemplo
//SMSDS3 DD DSN=MYDS.PGM,
// DATACLAS=DCLAS03,
// DISP=(NEW,KEEP),
// SPACE=(128,(5,2)),AVGREC=K
(Nesse exemplo, teremos um arquivo cujos registros lógicos têm, em
média 128 bytes, o espaço primário deve ter tamanho suficiente para conter
5120 registros e o espaço secundário deve ser suficiente para conter 2048
registros).
20
3.4.4Parâmetro BLKSIZE
Especifica o tamanho máximo do bloco em que os registros lógicos
estão agrupados.
3.4.4.1Exemplos
//DD1B DD DSNAME=EVER,
// DISP=(,KEEP),UNIT=3380,
//
RECFM=FB,LRECL=326,BLKSIZE=23472,
// SPACE=(23472,(200,40))
//DD2B DD DSNAME=NEVER,
// DISP=(NEW,KEEP),UNIT=3590,
//
RECFM=FB,LRECL=326,BLKSIZE=404K
3.4.5Parâmetro CHKPT
Usado para forçar a gravação de um checkpoint ao fim de cada
volume num arquivo multivolume.
CHKPT=EOV
3.4.5.1Exemplos
//DS1 DD DSNAME=INDS,DISP=OLD,CHKPT=EOV,
// UNIT=SYSSQ,VOL=SER=(TAPE01,TAPE02,TAPE03)
21
//DS2 DD DSNAME=OUTDS,DISP=(NEW,KEEP),
// CHKPT=EOV,UNIT=SYSDA,VOLUME=(,,,8)
3.4.6Parâmetro CNTL
Usado para referenciar qualquer grupo CNTL/ENDCNTL do job.
CNTL= {*.label }
{*.stepname.label }
{*.stepname.procstepname.label}
3.4.6.1Exemplos
//MONDAY DD CNTL=*.WKLYPGM
//TUESDAY DD CNTL=*.SECOND.BLOCKS
//WEDNES DD CNTL=*.THIRD.PROCTWO.CANETTI
3.4.7Parâmetro COPIES
Usado para especificar quantas cópias de uma sysout serão
impressas. Se a sysout for impressa numa 3800, esse parâmetro indica
quantas cópias de uma página devem ser feitas antes que se passe para a
próxima página.
COPIES= {nnn }
{(nnn,(group-value,group-value...))}
{(,(group-value,group-value...)) }
22
3.4.7.1Exemplos
//RECORD1 DD SYSOUT=A,COPIES=32
//RECORD2 DD SYSOUT=A,COPIES=(0,(1,2))
//RECORD3 DD SYSOUT=A,COPIES=(8,(1,2))
(Esse caso é semelhante ao anterior, porém, se não for uma 3800, serão
impressas 8 cópias da sysout).
3.4.8Parâmetro DATA
Indica que o arquivo de input vem logo a seguir e que ele contém
statements de JCL.
3.4.9Parâmetro DATACLAS
23
As características definidas para uma classe são:
DATACLAS=data-class-name
3.4.9.1Exemplo
//SMSDS1 DD DSN=MYDS1.PGM,
// DATACLAS=DCLAS01,DISP=(,KEEP)
//SMSDS2 DD DSN=MYDS2.PGM,
// DATACLAS=DCLAS02,DISP=(,KEEP),
// LRECL=256,EXPDT=1996/033
3.4.10Parâmetro DCB
Usado para especificar as características de um arquivo.
DCB=(subparameter,subparameter...)
DCB= ( {dsname },subparameter...)
( {*.ddname } )
( {*.stepname.ddname } )
( {*.stepname.procstepname.ddname} )
24
ser tomadas como modelo.
"*.ddname" indica um ddname (no mesmo step) que descreve um
arquivo cujas características devem ser tomadas como modelo.
"*.stepname.ddname" igual ao anterior quando o ddname está em outro
step
"*.stepname.procstepname.ddname" igual ao anterior quando o
ddname está em outro procstepname.
Qualquer subparâmetro codificado explicitamente junto com um
referback causará um override nas características copiadas do arquivo
modelo.
Os subparâmetros possíveis na DCB são:
BFALN
BFTEK
BLKSIZE
BLKSZLIM
BUFIN
BUFL
BUFMAX
BUFNO
BUFOFF
BUFOUT
BUFSIZE
CPRI
CYLOFL
DEN
DIAGNS
DSORG
EROPT
FUNC
GNCP
INTVL
IPLTXID
KEYLEN
LIMCT
LRECL
MODE
NCP
NTM
OPTCD
PCI
PRTSP
RECFM
RESERVE
RKP
STACK
25
THRESH
TRTCH
3.4.10.1Exemplos
//DD1 DD DSNAME=ALP,
// DISP=(,KEEP),VOLUME=SER=44321,
// UNIT=3400-6,DCB=
(RECFM=FB,LRECL=240,
// BLKSIZE=960,DEN=1,TRTCH=C)
//DD1A DD DSNAME=EVER,
// DISP=(NEW,KEEP),UNIT=3380,
// DCB=ABC.XY,LRECL=326,
// SPACE=(23472,(200,40))
//DD2 DD DSNAME=BAL,DISP=OLD,
// DCB=(RECFM=F,LRECL=80,
// BLKSIZE=80)
//DD3 DD DSNAME=CNANN,
// DISP=(,CATLG,DELETE),UNIT=3400-6,
// LABEL=
(,NL),VOLUME=SER=663488,DCB=*.DD2
//DD5 DD DSNAME=SMAE,DISP=OLD,
// DCB=(*.STEP1.PROCSTP5.DD8,BUFNO=5)
3.4.11Parâmetro DDNAME
Serve para adiar a definição de um arquivo até que a procedure
seja executada
26
"ddname" - é o nome de um DD que definirá o arquivo
DDNAME=ddname
3.4.11.1Exemplo
3.4.12Parâmetro DEST
Serve para enviar uma sysout para um destinatário qualquer.
DEST=destination
3.4.12.1Exemplo
27
//JOB01 JOB ,'MAE BIRD',MSGCLASS=B
//STEP1 EXEC PGM=INTEREST
//DEBIT DD SYSOUT=A
//CALIF DD SYSOUT=A,DEST=R555
//FLOR DD SYSOUT=A,DEST=(BOCA,'9212U28')
3.4.13Parâmetro DISP
Descreve a situação atual do arquivo, o que fazer se a execução do
step não sofrer abend e o que fazer se ocorrer abend no step.
DISP=(status,fim-normal,fim-anormal)
DISP=( NEW,DELETE,DELETE )
OLD,KEEP,KEEP
SHR,PASS,CATLG
MOD,CATLG,UNCATLG
,,UNCATLG ou ,
Os subparâmetros são:
- NEW (o arquivo está sendo criado)
- OLD (o arquivo já existe e será usado com exclusividade)
- SHR (o arquivo já existe e poderá ser comnpartilhado)
- MOD (se o arquivo existir, a sua gravação começará
imediatamente após a marca de fim de arquivo, isto é, os registros
serão acrescentados aos já existentes; se não existir, ele será
criado. Em ambos ele será usado com exclusividade)
- DELETE (o arquivo será deletado e descatalogado no final do
step)
- KEEP (o arquivo será mantido como está)
- PASS (o arquivo será passado para os steps subsequentes e será
deletado no fim do job se o DISP não for alterado)
- CATLG (o arquivo será mantido e catalogado)
- UNCATLG (o arquivo será descatalogado e mantido como está)
Defaults
- NEW - Se o status for omitido
- DELETE - Se o status for NEW
- KEEP - Se o arquivo já existir
3.4.13.1Exemplos
28
//DD2 DD DSNAME=FIX,UNIT=3420-1,VOL=SER=44889,
// DISP=(OLD,,DELETE)
//DD1 DD
DSN=SWITCH.LEVEL18.GROUP12,UNIT=3350,
// VOL=SER=LOCAT3,SPACE=(TRK,(80,15))
//DD1 DD
DSN=SWITCH.LEVEL18.GROUP12,UNIT=3350,
// VOL=SER=LOCAT3,
// SPACE=(TRK,(80,15)),DISP=(,PASS)
3.4.14Parâmetro DLM
Estabelece o delimitador que indica o fim de um input que está
junto com o JCL.
DLM=delimiter
3.4.14.1Exemplo
//DD1 DD DATA,DLM=AA
.
.
statements de JCL ou não
.
AA
29
(Nesse exemplo todo registro que estiver após //DD1 e antes de AA será
considerado como input)
3.4.15Parâmetro DSNAME
Determina o nome de um arquivo
{DSNAME} =name
{DSN } =name
3.4.15.1Exemplos
//DD1 DD DSNAME=ALPHA,DISP=SHR
30
por não usar o processo de qualificadores)
//DD2 DD DSN=SYS1.PROCLIB(PROG12),DISP=SHR
//DDX DD DSN=ESSE.GDG(-1),DISP=SHR
3.4.16Parâmetro DUMMY
Especifica que que o arquivo não existe.
//ddname DD DUMMY,parameter...
3.4.16.1Exemplo
//SYSPRINT DD DUMMY,BLKSIZE=32760
3.4.17Parâmetro EXPDT
Usado para determinar a data de expiração de um arquivo novo ou
para alterá-la se o arquivo já existir.
31
EXPDT= {yyddd }
{yyyy/ddd}
Os parâmetros são:
- yy = dois últimos dígitos do ano (de 00 ate 99)
- yyyy = ano (de 0000 até 9999)
- ddd = dia juliano (de 001 até 366)
Note o uso da forma EXPDT=00000 que zera a data de expiração.
3.4.18Exemplos
//DD7 DD DSN=TOM1,DISP=(,KEEP),
// EXPDT=2006/020,
// UNIT=SYSDA,SPACE=(TRK,(1,1)),
// VOL=SER=663344
3.4.19Parâmetro FREE
Usado para indicar para o sistema quando o arquivo referenciado
deve ser liberado.
3.4.19.1Exemplos
//EA33 DD SYSOUT=D,FREE=CLOSE
3.4.20Parâmetro HOLD
Usado para fazer com que o sistema retenha uma sysout até que o
operador a libere.
32
HOLD= {YES} {Y }
{NO } {N }
Se a sysout for internal reader, o job que está sendo submetido ficará
em hold até que o operador o libere.
3.4.20.1Exemplos
3.4.21Parâmetro LABEL
Esse parâmetro indica qual a posição de um arquivo dentro de um
volume que contém vários arquivos.
LABEL=(pos,label
,PASSWORD,IN,RETPD=nnnn)
,,NOPWREAD,OUT,EXPDT={yyddd}
, {yyyy/ddd}
33
Os parâmetros RETPD e EXPDT podem ser usados separadamente e
são explicados individualmente.
3.4.21.1Exemplos
//DD1 DD DSN=HERBI,DISP=(,KEEP),UNIT=TAPE,
// VOL=SER=T2,LABEL=(3,NSL,RETPD=188)
//DD1 DD DSN=MARIA,DISP=(OLD,KEEP),
// UNIT=TAPE,
// VOLUME=SER=T2,LABEL=(5,BLP),
// DCB=(LRECL=80,
// BLKSIZE=880,RECFM=FB)
(Nesse exemplo, como o label não será processado, o sistema não tem
praticamente nenhuma informação sobre o arquivo, assim, se em lugar de
montar a fita T2, o operador montar a fita T830, ela será aceita pelo sistema,
qualquer que seja o dsname do terceiro arquivo, ele será processado. Se
houver password, ela será ignorada. A DCB do arquivo é mandatória)
3.4.22Parâmetro LIKE
Usado apenas com SMS, serve para copiar os atributos de um
arquivo já existente.
LIKE=data-set-name
3.4.22.1Exemplo
//SMSDS6 DD DSN=MDS.PGM,
// LIKE=MDSCAT.PGM,DISP=(,KEEP)
34
3.4.23Parâmetro LRECL
Especifica o tamanho do registro lógico
LRECL=nnn ou nnnK
3.4.23.1Exemplos
//DD1B DD DSN=EVER,DISP=
(,KEEP),UNIT=3380,
// RECFM=FB,LRECL=326,SPACE=(23472,(200,40))
//SMS DD DSN=MDS2.PGM,
// DATACLAS=DCLAS02,DISP=(,KEEP),
// LRECL=256
3.4.24Parâmetro MGMTCLAS
Usado apenas com SMS indica que o arquivo deve ser gerenciado
de acordo com a classe especificada.
MGMTCLAS=classe
3.4.24.1Exemplo
//SMSDS1 DD DSN=MDS1.PGM,DATACLAS=DCLAS1,
// STORCLAS=SCLAS1,
// MGMTCLAS=MCLAS01,DISP=(NEW,KEEP)
35
3.4.25Parâmetro OUTPUT
Associa uma sysout com um statement OUTPUT específico.
OUTPUT= {(reference,reference...)}
3.4.25.1Exemplo
3.4.26Parâmetro PROTECT
Usado para indicar se o arquivo deve ser protegido.
PROTECT= {YES} {Y }
3.4.26.1Exemplo
36
//DASD DD DSN=US.MYDATA,DISP=(,CATLG),
// VOL=SER=333000,UNIT=3330,
// SPACE=(TRK,2),PROTECT=YES
3.4.27Parâmetro RECFM
Usado para indicar o formato dos registros de um arquivo
U (Idefinido)
V (Variável)
B (Blocado)
S (Spanned
F (Fixo)
T (O registro pode ser gravado usando o feature de track-overflow)
A (O primeiro caráter do registro é do tipo ISO/ANSI para controle da
impressora)
M (O primeiro caráter do registro é do machine para controle da
impressora)
3.4.27.1Exemplo
//DD1B DD DSN=XX,DISP=(,KEEP),UNIT=3380,
// RECFM=FB,LRECL=326,SPACE=(23472,
(200,40))
3.4.28Parâmetro RETPD
Especifica um período de retenção durante o qual o arquivo não
pode ser nem deletado e nem atualizado.
RETPD=nnnn
3.4.28.1Exemplo
37
//DD1 DD DSN=HERBI,DISP=(,KEEP),UNIT=TAPE,
// VOL=SER=T2,LABEL=(3,NSL),RETPD=188
3.4.29Parâmetro SPACE
Indica o espaço que deve ser reservado para o arquivo num DASD.
Requisição só de diretório
SPACE=(,(,,directory))
3.4.29.1Exemplos
//DD1 DD DSN=&&TEMP,
// UNIT=MIXED,SPACE=(CYL,10)
(Nesse caso, serão alocados 10 cilindros para o arquivo. Caso não sejam
suficientes, não haverá alocação secundária e o job vai terminar
anormalmente)
//DD2 DD DSNAME=PDS12,DISP=(,KEEP),UNIT=3350,
// VOL=SER=25143,
// SPACE=(CYL,(10,,20),,CONTIG)
//REQ2 DD DSN=PET,UNIT=3390,VOL=SER=606674,
// SPACE=(ABSTR,(5,1))
3.4.30Parâmetro SPIN
Especifica quando uma sysout deve ficar disponível para
processamento.
39
SPIN= {UNALLOC} {NO }
3.4.30.1Exemplo
//DD1 DD SYSOUT=A,FREE=CLOSE,SPIN=UNALLOC
3.4.31Parâmetro STORCLAS
Indica o storage class de um arquivo novo.
STORCLAS=name
3.4.31.1Exemplo
//SMS DD DSN=MYDS1.PGM,
// STORCLAS=SCLAS01,DISP=(,KEEP)
3.4.32Parâmetro SYSOUT
Indica que o arquivo é uma sysout.
40
como writer e que deve processar a sysout.
"INTRDR" - Determina para o JES que essa sysout deve ser submetida
para o sistema como um stream de JCL.
"form-name" - Nome do formulário a ser usado para imprimir a sysout.
"code-name" - Especifica um statement /*OUTPUT do JES2, do qual
devem ser obtidas as características de processamento da sysout.
3.4.32.1Exemplos
//DD1 DD SYSOUT=P
//DD5 DD SYSOUT=(A,INTRDR)
3.4.33Parâmetro UNIT
Usado para requisitar que o sistema aloque um arquivo num device
específico, ou num certo grupo de devices.
{UNIT=(ddd,unit-count,DEFER) }
/ddd,P
/dddd,
device-type
group-name
{UNIT=AFF=ddname}
41
group-name - Requisita um device pelo seu nome simbólico. O nome
simbólico é atribuído por cada instalação.
unit-count - É um número de 1 a 59, indicando o número de devices
disponíveis para o arquivo.
"P" - Indica que o sistema deve alocar um número de devices igual ao
número de volumes contidos no parâmetro VOL=
DEFER - Indica que o sistema deve reservar o device, porém
requisitará sua montagem no momento em que for aberto.
AFF=ddname - Indica que o sistema deve usar o mesmo device que foi
alocado para outro ddname (no mesmo step).
Quando usado o parâmetro AFF=, o ddname referenciado deve
aparecer antes, no JCL.
3.4.33.1Exemplos
//DD1 DD DSNAME=AAG3,DISP=(,KEEP),
// VOLUME=SER=13230,UNIT=3400-5
//DD2 DD DSNAME=X.Y.Z,DISP=OLD,UNIT=(,2)
//DD3 DD DSNAME=COLLECT,DISP=OLD,
// VOLUME=SER=1095,UNIT=(3490,,DEFER)
(Esse exemplo requisita uma unidade do tipo 3490, porém o volume só
será pedido para ser montado quando e se ele for aberto).
3.4.34Parâmetro VOLUME
Usado para informar ao sistema em que volume o arquivo reside ou
residirá (se estiver sendo criado).
42
{VOLUME} = (PRIVATE,RETAIN,vol-seq-number,vol-count
{VOL } ,,
SER=serial-number
SER=(serial-number,serial-number...)
,REF=dsname
REF=*.ddname
REF=*.stepname.ddname
REF=*.stepname.procstepname.ddname
3.4.34.1Exemplos
//DD1 DD DSNAME=DATA3,UNIT=SYSDA,DISP=OLD,
// VOLUME=(PRIVATE,SER=548863)
//DD2 DD DSN=QUET,DISP=(MOD,KEEP),
// UNIT=(3400-5,2),
// VOLUME=(,,,4,SER=(96341,VOL01)
43
(Requisitando o arquivo QUET que reside nos volumes 96341 e VOL01,
caso seja necessário, o sistema pode requisitar mais um terceiro e um quarto
volume quaisquer)
44
4 Statements DD especiais
4.1.1JOBCAT
Usado para forçar que o sistema antes pesquise esse catálogo e só
depois ele vá pesquisar o master catalog e, depois, o user catalog. Essa
situação persiste durante todo o job.
Se no mesmo job for especificado STEPCAT e JOBCAT, o STEPCAT
tem a prescedência.
Esse statement deve estar depois dos statements JOB e JOBLIB e antes
do primeiro EXEC.
4.1.1.1Exemplo
//EXAMPLE JOB WILLIAMS,MSGLEVEL=1
//JOBLIB DD DSNAME=USER.LIB,DISP=SHR
//JOBCAT DD DSNAME=LYLE,DISP=SHR
// EXEC PGM=SCAN
4.1.2JOBLIB
Faz com que o sistema procure os programas executados em cada
EXEC do job nas bibliotecas referenciadas no JOBLIB.
Se o programa não for encontrado nessas bibliotecas, a pesquisa
continuará nas bibliotecas do sistema.
Se um determinado step contiver o statement STEPLIB, as bibliotecas
referenciadas no JOBLIB não serão pesquisadas.
O statement JOBLIB deve vir imediatamente após o statement JOB.
4.1.2.1Exemplo
4.1.3STEPCAT
Estabelece qual o catálogo deve ser pesquisado à procura de um
arquivo já existente, ou onde deve ser catalogado um arquivo que está sendo
criado.
O uso de STEPCAT pode fazer com que um arquivo seja catalogado
num catálogo errado. É preferível definir um alias antes de criar o
arquivo, omitir o STEPCAT e deixar o sistema determinar que
catálogo usar.
4.1.3.1Exemplo
// EXEC PROC=SNZ12
//STEPCAT DD DSNAME=BETTGER,DISP=SHR
45
4.1.4STEPLIB
Indica para o sistema em que biblioteca procurar o programa
executado em determinado statement EXEC.
Caso o programa não esteja nessa biblioteca, então ele será procurado
nas bibliotecas do próprio sistema.
Se for codificado o STEPLIB, o JOBLIB será ignorado.
4.1.4.1Exemplo
4.1.5.1Exemplos
4.1.6SYSCHK
Usado para definir um arquivo de checkpoint que será gravado
durante a execução do programa e lido por ocasião do restart.
Esse statement tem de estar após os statements JOB e JOBLIB e antes
46
do primeiro statement EXEC.
4.1.6.1Exemplo
4.1.7SYSIN
Por convenção esse statement define um arquivo de entrada que
contém parâmetros e cartões de controle para execução de um programa.
4.1.7.1Exemplo
4.1Statement ENDCNTL
Usado para marcar o fim de um grupo de statements de controle,
sempre é usado o par CNTL/ENDCNTL
4.1.1.1Exemplo
47
4.2Statement EXEC
Identifica um programa ou procedure a ser executado, marcando o
início de um step.
4.2.1.1Exemplos
ACCT.procstepname=(accounting-info)
4.2.1.1Exemplos
4.2.2Parâmetro ADDRSPC
Indica para o sistema se o step será executado na memória virtual
(que é paginável) ou na memória real (que é não-paginável).
O default é VIRT
4.2.2.1Exemplos
49
4.2.3Parâmetro COND
Serve para testar condições (condition codes) para determinar se
um step será ou não executado.
COND.procstepname = (code,operator)
COND.procstep = ((code,operator,stepname.procstepname)
,(code,operator,stepname.procstepname)...
COND=EVEN
COND=ONLY
4.2.3.1Exemplos
50
//STEP6 EXEC PGM=DISKUTIL,COND=(4,GT,STEP3)
4.2.4Parâmetro PARM
Usado para passar pequenos inputs para o programa.
PARM.procstep=subparameter
PARM.procstep=(subparameter,subparameter)
PARM.procstep=('subparameter',subparameter)
PARM.procstep='subparameter,subparameter'
4.2.4.1Exemplo
4.2.5Parâmetro PERFORM
Usado para atribuir um performance group para o step.
PERFORM.procstepname=n
51
sistema de acordo com as normas da instalação.
"n" - É um valor qualquer entre 1 e 999
Se o parâmetro PERFORM for especificado no statement JOB, ele tem
prescedência sobre o mesmo parâmetro especificado no EXEC.
4.2.5.1Exemplo
4.2.6Parâmetro PGM
Parâmetro posicional que especifica o programa a ser executado.
PGM= {program-name }
{*.stepname.ddname }
{*.stepname.procstepname.ddname}
{JCLTEST }
{JSTTEST }
4.2.6.1Exemplos
52
//GO EXEC PGM=*.CREATE.SYSLMOD
4.2.7Parâmetro PROC
Indica o nome de uma procedure catalogada ou in-stream a ser executada.
{PROC=procedure-name}
{procedure-name }
4.2.7.1Exemplos
4.2.8Parâmetro REGION
Especifica a área na memória real ou virtual a ser usada para a execução
do programa.
53
EXEC.
4.2.8.1Exemplos
4.2.9Parâmetro TIME
Usado para especificar o limite de tempo de processamento de um step.
TIME.procstepname= {(minutes,seconds)}
{1440 }
{NOLIMIT }
{MAXIMUM }
{0 }
4.2.9.1Exemplos
54
(Especifica que o STEP1 pode executar, no máximo, durante 12
minutos e 10 segundos)
4.3Statements IF/THEN/ELSE/ENDIF
Esse grupo de statements é usado para executar condicionalmente um ou
mais steps de um job.
55
- RC (indica um return code)
- ABEND ( indica ocorrência de um abend)
- ¬ABEND (indica a não ocorrência de um abend)
- ABENDCC (indica um system ou user completion code)
- RUN (indica se um determinado step começou a execução)
- ¬RUN (indica se um determinado step não começou a execução)
4.3.1.1Exemplos
56
//JOBA JOB ...
//STEP1 EXEC PGM=RTN
//IFBAD IF (ABEND | STEP1.RC > 8) THEN
//TRUE EXEC PROC=ERROR
//IFBADEND ENDIF
//NEXTSTEP EXEC PROC=CONTINUE
57
// ENDIF
4.4Statement INCLUDE
Indica o ponto do JCL onde deve ser incluído um membro de um
PDS como parte do próprio JCL.
4.4.1.1Exemplos
4.5Statement JCLLIB
Identifica uma biblioteca onde estão gravadas as procedures e os
membros usados nos INCLUDEs (identifica uma proclib particular).
4.5.1.1Exemplos
(account-number,accounting-information...)
(pano,room,time,lines,cards,forms,copies,log,linect)
60
parâmetro TIME for excedido ocorrerá abend.
"lines" - especifica o número (em múltiplos de 1000) de linhas de
sysout que se espera que o job gere.
"cards" - idem para cartões perfurados.
"forms" - código de formulário que o JES deve usar para impressão
das sysouts.
"copies" - número de cópias da sysout.
"log" - especifica se o JES deve ou não (Y ou N) imprimir a job log.
"linect" - número de linhas a serem impressas por página.
4.6.1.1Exemplos
4.6.2Parâmetro ADDRSPC
Indica para o sistema se o job todo deve usar memória real ou
virtual
O default é VIRT
Se esse parâmetro for codificado tanto no statement EXEC como no
JOB, tem prescedência o codificado no statement JOB.
4.6.2.1Exemplos
61
4.6.3Parâmetro CLASS
Determina qual a classe de execução de um job.
CLASS=jobclas
4.6.3.1Exemplo
4.6.4Parâmetro COND
Determina condições para que um job continue executando: se
nenhuma das condições for satisfeita, a execução continua; se uma delas for
satisfeita, a execução será suspensa.
COND=(code,operator)
COND=((code,operator),(code,operator)...)
4.6.4.1Exemplos
(Esse exemplo determina que assim que um step do job emitir um return
code maior que 7, a execução do job deve ser suspensa)
62
(Esse exemplo determina que enquanto os return codes emitidos pelos
steps desse job estiverem entre 21 e 30 o processamento deve continuar;
qualquer valor fora dessa faixa determina que a execução deve ser suspensa)
4.6.5Parâmetro MSGCLASS
Atribui uma classe de sysout para o job log.
MSGCLASS=class
4.6.5.1Exemplos
4.6.6Parâmetro MSGLEVEL
Determina o nível de informações que serão gravadas no job log.
MSGLEVEL=(statements,messages)
63
- 1 - Mensagens de JCL, JES, do operador e do SMS.
4.6.6.1Exemplos
4.6.7Parâmetro NOTIFY
Usado para notificar do fim do processamento (normal ou anormal)
do job
NOTIFY={nodename.userid} {userid}
4.6.7.1Exemplos
(Nesse caso usamos o nome do node, porque o userid está num node
diferente daquele em que o job foi processado)
(Nesse caso usamos apenas o userid porque ele está no mesmo node em
que o job foi processado.)
4.6.8Parâmetro PASSWORD
Usado para especificar a password do user que está submetendo o
job ou para trocá-la.
PASSWORD=(password,new-password)
64
segurança, portanto, tome cuidado ao usar esse parâmetro.
Codifique sempre o parâmetro USER junto com o parâmetro
PASSWORD.
"password" - Especifica a password que está em vigor no momento.
"new-password" - Especifica a password que passará a vigorar a partir
do término do job.
4.6.8.1Exemplos
(Nesse caso o user RAC1 está trocando a password atual (BCH) por uma
nova password (A12))
4.6.9.1Exemplos
4.6.10Parâmetro PRTY
Atribui prioridade de seleção para o job. Jobs com prioridade mais
alta serão selecionados primeiro para execução.
PRTY=priority
65
"priority" - Um valor entre 0 e 15 que determina a prioridade de
seleção do job na fila de entrada.
4.6.10.1Exemplo
4.6.11Parâmetro REGION
Estabelece o tamanho da área de memória real ou virtual
disponível para cada step dentro do job.
4.6.11.1Exemplo
(Todos os steps desse job terão à sua disposição uma área de 100K de
memória real)
4.6.12Parâmetro RESTART
Estabelece para o sistema em qual step deve ser começada a
execução do job
RESTART= {* }
{stepname }
{stepname.procstepname}
66
"*" - O job deve começar a partir do primeiro step.
"stepname" - Nome do step onde deve começar a execução do job.
"stepname.procstepname" - Idem para quando o job executa uma proc.
4.6.12.1Exemplos
4.6.13Parâmetro TIME
Especifica o limite de tempo que pode ser usado pelo job.
TIME= {(minutes,seconds)}
{1440 }
{NOLIMIT }
{MAXIMUM }
4.6.13.1Exemplos
67
4.6.14Parâmetro TYPRUN
Determina o tipo de processamento a ser adotado para o job.
4.6.14.1Exemplo
(Esse job ficará na fila até que o operador o libere para seleção)
4.6.15Parâmetro USER
Identifica para o sistema o userid que está submetendo o job.
USER=userid
4.6.15.1Exemplo
4.7Statement OUTPUT
Especifica as opções para o processamento de sysouts.
68
Esse statement é especialmente útil quando se processa uma mesma
sysout de várias maneiras diferentes.
"name" - Atribui um nome para uma série de opções. Esse nome será
usado posteriormente no processamento de sysouts.
4.7.1Parâmetro ADDRESS
Usado para colocar endereço no separator, para facilitar a
distribuição de sysouts.
4.7.1.1Exemplo
J. Plant
1234 Main Street
POUGHKEEPSIE, NY
zipcd
4.7.2Parâmetro BUILDING
Identifica no separator o prédio para onde a sysout deve ser
enviada.
4.7.2.1Exemplo
69
//OUTDS3 OUTPUT BUILDING='920'
4.7.3Parâmetro CLASS
Atribui uma classe de saída para uma sysout.
4.7.3.1Exemplos
4.7.4Parâmetro CONTROL
Especifica que cada registro da sysout começa por um caráter de
controle, o que deve ser usado espacejamento simples, duplo ou triplo entre
linhas.
CONTROL= {PROGRAM}
{SINGLE }
{DOUBLE }
{TRIPLE }
70
"SINGLE" - Espacejamento simples
"DOUBLE" -Espacejamento duplo
"TRIPLE" - Espacejamento triplo
4.7.4.1Exemplo
4.7.5Parâmetro COPIES
Indica o número de cópias de uma sysout a serem emitidas.
COPIES= {nnn }
{(nnn,(group-value,group-value...))}
{(,(group-value,group-value...)) }
4.7.5.1Exemplos
4.7.6Parâmetro DEFAULT
Indica se um statement OUTPUT é ou não default.
DEFAULT= {YES} {Y }
{NO } {N }
71
Se esse parâmetro for omitido, o default é NO.
Exemplo
4.7.7Parâmetro DEPT
Especifica no separator a identificação do departamento que deve
receber a sysout.
4.7.7.1Exemplo
72
4.7.8Parâmetro DEST
Indica um destino para uma sysout.
DEST=destination
4.7.8.1Exemplos
(Nesse caso a sysout será mandada para o USER01 que está no node
chamado NODEXX)
4.7.9Parâmetro DUPLEX
Indica se uma sysout deve ou não usar ambos os lados da página.
DUPLEX={NO } {N }
4.7.9.1Exemplo
4.7.10Parâmetro LINECT
Indica o número de linhas que deve ser impresso por página
73
LINECT=nnn
4.7.10.1Exemplo
4.7.11Parâmetro NAME
Indica, no separator, o nome da pessoa a quem deve ser entregue a
sysout.
4.7.11.1Exemplo
4.7.12Parâmetro PRTY
Indica a prioridade de saída de uma sysout.
PRTY=nnn
4.7.12.1Exemplo
4.7.13Parâmetro ROOM
74
Faz com que saia no separator informações sobre a sala onde uma
sysout deve ser entregue.
4.7.13.1Exemplo
4.7.14Parâmetro TITLE
Cria, no separator, um título para a sysout.
4.7.14.1Exemplo
4.8Statement PEND
Marca o fim de uma procedure in-stream
4.9Statement PROC
Marca o início de uma procedure e atribui valores default para os
parâmetro simbólicos.
75
"name" - Nome da procedure. Pode ser omitido em procedures
catalogadas mas é mandatório em procedures in-stream, pois o
statement EXEC usará esse nome.
"parameter" - É a atribuição de valores defaults para os parâmetros
simbólicos. Nessa situação, o parâmetro simbólico deve aparecer sem
o caráter "&".
4.9.1.1Exemplo
76
5 Statements de controle do JES2
São statements colocados logo após o statemen JOB para controlar
o job.
/*$command-verb,operand,operand... N
5.1.1.1Exemplos
/*$SI3-5
(Assim que o job for lido será dado start nos initiators 3, 4 e 5)
/*$TRDR1,H=Y
5.2Statement MESSAGE
Envia uma mensagem para a console do operador assim que o job
for lido.
/*MESSAGE message
77
Se esse statement estiver depois do /*ROUTE XEQ, a mensagem será
emitida no node onde o job vai ser executado e não onde ele for lido.
5.2.1.1Exemplo
5.3Statement NOTIFY
Envia uma notificação sobre um job para um userid
/*NOTIFY {nodename.userid }
{nodename:userid }
{nodename/userid }
{nodename(userid)}
{userid }
As quatro primeiras formas são usadas quando o userid está num node
diferente daquele em que o NOTIFY está sendo executado
A última forma é usada para notificação local.
5.3.1.1Exemplos
/*NOTIFY VMNODE.VMUSER
/*NOTIFY TSOUSER
5.4Statement ROUTE
Usado para especificar destino de sysouts não direcionadas pelo
parâmetro DEST ou para identificar o node onde um job deve ser executado
78
/*ROUTE {PRINT} {ANYLOCAL} {PUNCH} {LOCAL}
{name }
{Nnnnn} {NnnRmmmm} {NnnnRmmm}
{NnnnnRmm }
{nodename.userid } {nodename:userid }
{nodename/userid } {nodename(userid)}
{Rnnnn} {RMnnnn} {RMTnnnn}
{Unnnn} {Userid}
5.4.1.1Exemplos
5.5Statement SETUP
Discrimina volumes que o operador devem montar antes do início
da execução do job.
/*SETUP serial-number,serial-number...
Usando esse statement o job ficará preso na fila até que o operador
monte os volumes e libere o job.
"serial-number" - Volser dos volumes a serem montados
Esse statement deve ficar antes do primeiro statement EXEC.
5.5.1.1Exemplo
/*SETUP 666321,149658
5.6Statement XEQ
Determina o node onde o job deve ser executado. Tem o mesmo
efeito que o statement /*ROUTE XEQ
5.6.1.1Exemplo
80
//STEP1 EXEC ...
81
6 Como se monta um job?
1) Começe sempre pelo statement JOB
- Ele marca para o sistema o início de um string de JCL
- Toda mensagem, passada para o operador será identificada pelo
jobname.
- Seu JCL, mensagens, substituições de simbólicos, etc, são
agrupadas no spool com o nome igual ao seu jobname.
- O jobname será usado nas notificações enviadas para os vários
destinatários de mensagens.
2) Coloque em seguida todos os statements que se referem ao job como
um todo (statements JOBLIB, JOBCAT, JCLLIB, OUTPUT, etc).
3) Coloque os vários statements EXEC (de programa ou de procedure)
pois eles indicam para o sistema o que vai ser processado.
4) Entre os statements EXEC coloque os statements DD que descrevem
para o sistema os arquivos que servirão como entrada e saída de cada
processamento.
5) Distribua os statements de comentário à vontade dentro do seu string de
JCL.
6) Genéricamente isso é o principal em qualquer job. Outros statements
são úteis, embora pouco usados.
82
DSNAME, 29
0 DUMMY, 31
$, 81 DUPLEX, 77
*, 17 E
¬ABEND, 58 ELSE, 57
¬RUN, 58 ENDCNTL, 49
A ENDIF, 57
ABEND, 58 EVEN, 52
ABENDCC, 58 EXEC, 49
Accounting Information, 62 EXPDT, 31, 33
ACCT, 50 F
ADDRESS, 72 FREE, 32
ADDRSPC, 51, 64 H
AMP, 17 HOLD, 32, 71
ANYLOCAL, 83 I
Asterisco, 17 IF, 57
AVGREC, 19 INCLUDE, 60
B J
Backward References, 9 JCL na listagem, 12
BLKSIZE, 20 JCLLIB, 61
BUILDING, 73 JOB, 62
C JOBCAT, 46
Campos de JCL Statement, 8 JOBLIB, 46
CHKPT, 20 jobname, 62
CLASS, 64, 73 L
CNTL, 15, 21 LABEL, 33
CNTL/ENDCNTL, 21, 49 LIKE, 34
comando do JES2, 81 LINECT, 77
Comentário, 14 LOCAL, 83
COMMAND, 14 LRECL, 35
COND, 51, 65 M
Continuação, 9 MAXIMUM, 56, 70
CONTROL, 74 MESSAGE, 81
COPIES, 21, 74 MGMTCLAS, 35
D Modificando Procedures, 11
DATA, 22 MSGCLASS, 65
DATACLAS, 23 MSGLEVEL, 66
DCB, 24 N
DD, 16 NAME, 77
DDNAME, 26 NOLIMIT, 56, 70
DEFAULT, 75 Nome do Programador, 68
DEPT, 76 NOTIFY, 67, 82
DEST, 26, 76 O
DISP, 27 ONLY, 52
DLM, 29 ORDER, 61
DOUBLE, 74 OUTPUT, 36, 72
DSN, 29 Override, 12
P T
PARM, 53 THEN, 57
PASSWORD, 67 TIME, 56, 70
PEND, 79 TITLE, 79
PERFORM, 53 TRIPLE, 74
PGM, 50, 54 TYPRUN, 71
PRINT, 83 U
PRIVATE, 43 UNIT, 42
PROC, 50, 55, 79 USER, 71
Procedure Catalogada, 11 V
Procedure In-stream, 11 VIRT, 51, 64
PROGRAM, 74 VOL, 43
PROTECT, 37 VOLUME, 43
PRTY, 68, 78 X
PUNCH, 83 XEQ, 83, 84
R
RC, 58
REAL, 51, 64
RECFM, 37
REF, 43
REGION, 55, 69
RESTART, 69
RETAIN, 43
RETPD, 33, 38
ROOM, 78
ROUTE, 82
RUN, 58
S
SCAN, 71
SER, 43
SETUP, 84
Simbólicos, 12
SINGLE, 74
Sintaxe de Parâmetros, 9
SPACE, 38
SPIN, 40
Started Tasks, 13
STEPCAT, 46
STEPLIB, 47
stepname, 49
STORCLAS, 40
SYSABEND, 47
SYSCHK, 48
SYSIN, 48
SYSMDUMP, 47
SYSOUT, 41
SYSUDUMP, 47