Escolar Documentos
Profissional Documentos
Cultura Documentos
1.1 DEFINIÇÃO
É a linguagem utilizada pelos mainframes para execução dos JOBs (Tarefas). Os JOBs solicitam
recursos (programas, arquivos, etc) ao Sistema Operacional para execução de programas.
Os JOBs são responsáveis por atualização de contas correntes, geração de contratos, emissão de
boletos e duplicatas, baixa de pagamentos e muitas outras tarefas em bancos, seguradoras e
financeiras.
JOB / JOBNAME
É a composição de uma série de programas (Cobol ou Utilitários) que devem ser processados numa
determinada sequência. Um job representa um conjunto de STEPs.
STEP / STEPNAME
É a execução de um programa Cobol ou um programa Utilitário.
JOBXX01D
STEP001 SORT
STEP002 COBXX01
STEP003 IDCAMS
STEP004 COBXX02
O JOB JOBXX01D é formado por 4 STEPs. São eles : STEP001, STEP002, STEP003 e STEP004.
O STEP001 executa o programa Utilitário SORT.
O STEP002 executa o programa Cobol COBXX01.
O STEP003 executa o programa Utilitário IDCAMS.
O STEP004 executa o programa Cobol COBXX02.
ESTRUTURA DE UM JOB
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
//ALUNOCOM JOB 'ALUNO',CLASS=C,MSGCLASS=X,NOTIFY=ALUNO,TIME=(0,20)
//********************************************************************
//* STEP001 - UTILITARIO SORT - ORDENA ARQUIVO POR DATA DE PAGAMENTO *
//********************************************************************
//STEP001 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=GR.AMYYXX.ARQPGTO,DISP=SHR
//SORTOUT DD DSN=GR.AMYYXX.ARQPGTO,DISP=SHR
//SYSIN DD *
SORT FIELDS=(01,08,CH,A)
//********************************************************************
//* STEP002 - PROGRAMA COBXX01 - GERACAO RELATORIO PAGAMENTOS *
//********************************************************************
//STEP002 EXEC PGM=COBXX01
//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR
//ARQPGTO DD DSN=GR.AMYYXX.ARQPGTO,DISP=SHR
//RELATO DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//********************************************************************
//* STEP003 - UTILITARIO IDCAMS - DELECAO ARQUIVO ARQSERA *
//********************************************************************
//STEP003 EXEC PGM=IDCAMS
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE GR.ARQUIVO.ARQSERA
//********************************************************************
//* STEP004 - PROGRAMA COBXX02 - GERACAO ARQUIVO ARQSERA *
//********************************************************************
//STEP004 EXEC PGM=COBXX02
//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR
//ARQPGTO DD DSN=GR.AMYYXX.ARQPGTO,DISP=SHR
//ARQSERA DD DSN=GR.AMYYXX.ARQSERA,
// DISP=(NEW,CATLG,DELETE),
// UNIT=3390,
// SPACE=(TRK,(5,1),RLSE),
// DCB=(RECFM=FB,LRECL=800,BLKSIZE=0)
//SYSOUT DD SYSOUT=*
Visualizando o JOB anterior parece complexo o entendimento da linguagem JCL. Contudo, nos
próximos tópicos estaremos abordando todas as instruções utilizadas durante a confecção de um JOB.
JOBCARD
EXEC
DD (Data Definition)
Exemplo :
JOBNAME
É o nome do JOB (JOBNAME). Em caso de falha no JOB a primeira a coisa a ser verificada é o
JOBNAME. Formado por 8 caracteres.
JOB
Todo JOB deve possuir a palavra reservada JOB. A palavra reservada JOB solicita ao Sistema
Operacional a execução de JOBs.
Exemplo :
ACCOUNT INFORMATION
São as informações para geração de estatísticas. Essas informações são chamadas de ACCOUNT
INFORMATION. Normalmente, informa-se o nome da companhia, do departamento, do programador,
analista, etc.
Exemplo :
CLASS
Define a classe de entrada dos JOBs. Existem 36 classes disponíveis. As classes disponíveis vão de
A-Z (26 classes) e de 0 a 9 (10 classes).
Exemplo :
MSGCLASS
Define a classe de saída dos JOBs. Existem 36 classes disponíveis. As classes disponíveis vão de A-
Z (26 classes) e de 0 a 9 (10 classes).
Exemplo :
NOTIFY
Define o usuário que receberá as notificações dos JOBs executados. Se informado NOTIFY=&SYSUID
as notificações irão para o usuário que estiver logado no TSO.
Exemplo :
TIME
É o CPU TIME (Tempo de Processamento de Máquina). É o tempo necessário para que o JOB termine
a sua execução.
Exemplo :
Onde :
0 = (Quantidade em Minutos)
20 = (Quantidade em Segundos)
Exemplo :
Onde :
20 = (Quantidade em Segundos)
Exemplo :
Onde :
5 = (Quantidade em Minutos)
DICA 1 - IMPORTANTE !
DICA 2 - IMPORTANTE !
CPU TIME não é a quantidade de segundos corridos. O cálculo do CPU TIME depende de fatores como
: quantidade de base de dados a serem acessados, quantidade de instruções, quantidade de jobs
executando concorrentemente, entre outros fatores.
DICA 3 - IMPORTANTE !
O sistema operacional retorna o abend S322 quando existe estouro de CPU TIME. A causa mais normal
do abend S322 são programas em looping ou programas que fazem acessos a muitas bases de dados.
1.5.2 EXEC
Informa qual o programa, utilitário ou procedure será executado pelo STEP do JOB.
STEPNAME
É o nome do STEP (STEPNAME). Em caso de falha no JOB, a segunda a coisa a ser verificada é o
STEPNAME. Formado por até 8 carácteres.
Exemplo ( STEPNAME ) :
Execução de Utilitário :
Execução de Procedure :
JCLLIB
É a biblioteca que possui as PROCEDURES que serão executadas.
ORDER
Referencia o nome da biblioteca.
//JOBPROCS PROC
//*****************************************************************
//* STEP001 - EXECUTA PROGRAMA COBXX01 *
//*****************************************************************
//STEP001 EXEC PGM=COBXX01
//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*****************************************************************
//* STEP002 – EXECUTA PROGRAMA COBXX02 *
//*****************************************************************
//STEP002 EXEC PGM=COBXX02
//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
Pode ser :
Exemplo :
* (ASTERICO)
Referencia dados de entrada para o programa que está sendo executado.
Exemplo :
//JOBXX01D JOB 'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=AMYYYY,TIME=(0,20)
//********************************************************************
//* STEP001 - UTILITARIO SORT - ORDENA ARQUIVO POR DATA DE PAGAMENTO *
//********************************************************************
//STEP001 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=GR.AMYYYY.ARQPGTO,DISP=SHR
//SORTOUT DD DSN=GR.AMYYYY.ARQPGTO,DISP=SHR
//SYSIN DD *
SORT FIELDS=(01,08,CH,A)
DUMMY
Faz simulação de dados para o programa que está sendo executado. A instrução DUMMY permite que
o programa execute mesmo que o DataSet não exista.
Exemplo :
SYSOUT
Gera para o Sistema Operacional um DataSet com as saídas geradas pelo programa.
Exemplo :
DISP
Refere-se como o DataSet será disponibilizado para o sistema operacional.
[TERCEIRO PARÂMETRO]
TÉRMINO ANORMAL
[PRIMEIRO PARÂMETRO]
STATUS
DISP=(NEW,CATLG,DELETE)
[SEGUNDO PARÂMETRO]
TÉRMINO NORMAL
PARÂMETRO(s) DESCRIÇÃO
SHR Significa que o DataSet existe e pode ser lido por outro recurso simultâneamente.
OLD Significa que o DataSet existe e que o programa exige exclusividade na leitura.
NEW Criação de DataSet
MOD Modifica um DataSet sequencial. Acrescenta novos registros no final.
CATLG Cataloga o DataSet. Obviamente que esta opção deve estar sempre acompanhada
de NEW no primeiro sub-parâmetro. Porque se o DataSet estiver sendo lido é
porque já está catalogado.
UNCATLG Descataloga o DataSet. Evite usar sempre.
DELETE Delete o DataSet. Se precisar deletar o DataSet use sempre esta opção.
KEEP Mantem o DataSet do jeito que estava antes.
PASS Passa o DataSet para o próximo STEP do JOB.
Exemplo :
//JOBXX01D JOB 'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=AMYYYY,TIME=(0,20)
//********************************************************************
//* STEP004 - PROGRAMA COBXX02 - GERACAO ARQUIVO ARQSERA *
//********************************************************************
//STEP004 EXEC PGM=COBXX02
//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR
//ARQPGTO DD DSN=GR.AMYYYY.ARQPGTO,DISP=SHR
//ARQSERA DD DSN=GR.AMYYYY.ARQSERA,
// DISP=(NEW,CATLG,DELETE),
// UNIT=3390,
// SPACE=(TRK,(5,1),RLSE),
// DCB=(RECFM=FB,LRECL=800,BLKSIZE=0)
//SYSOUT DD SYSOUT=*
Exemplo Inválido :
//JOBXX01D JOB 'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=AMYYYY,TIME=(0,20)
//********************************************************************
//* STEP001 - PROGRAMA COBXX02 - GERACAO ARQUIVO ARQSERA *
//********************************************************************
//STEP001 EXEC PGM=COBXX02
//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR
//ARQPGTO DD DSN=GR.AMYYYY.ARQPGTO,DISP=SHR
//ARQSERA DD DSN=GR.AMYYYY.ARQSERA,
// DISP=(NEW,KEEP,DELETE),
// UNIT=3390,
// SPACE=(TRK,(5,1),RLSE),
// DCB=(RECFM=FB,LRECL=800,BLKSIZE=0)
//SYSOUT DD SYSOUT=*
DISP=(NEW,KEEP,DELETE)
Como manter um DataSet, sendo que o DataSet nem foi criado ainda.
DEFAULT
Se você colocar apenas DISP=SHR o sistema assume (SHR,KEEP,KEEP).
SPACE
Espaço físico a ser utilizado.
Exemplo :
ALOCAÇÃO SECUNDÁRIA
Pode ser extendida até 15 extends.
Logo, nessa alocação de DataSet teríamos no máximo 20 trilhas. Sendo 5 trilhas para alocação primária
e no máximo 15 para alocação secundária.
UNIT
Informa o tipo de dispositivo.
Exemplo :
VOLUME
Informa qual volume dentro do DISCO deve ser referenciado.
Exemplo :
PR39X7
É o volume que está sendo referenciado
Exemplo :
RECFM
Define o formato do arquivo
LRECL
Informa o tamanho do registro do arquivo. No nosso exemplo o tamanho do arquivo é 800 bytes.
BLKSIZE
Define a blocagem do arquivo. Isto é, quantos registros formam um bloco para acessar ao arquivo. Deve
ser sempre um múltiplo de LRECL ou 0(Zero). Se informado 0(Zero) a blocagem ideal é calculada
automaticamente.
1.5 JOBLIB
É a biblioteca na qual todos os STEPs do JOB referenciarão para execução dos programas Cobol.
(Somente objetos, programas que foram compilados e linkeditados).
Exemplo :
1.6 STEPLIB
É a biblioteca na qual um determinado STEP referencia para a execução do programa COBOL.
Exemplo :
//JOBXX01D JOB 'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=AMYYYY,TIME=(0,20)
//* STEP002 - PROGRAMA COBXX01 - GERACAO RELATORIO PAGAMENTOS *
//STEP002 EXEC PGM=COBXX01
//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR
//ARQPGTO DD DSN=GR.AMYYYY.ARQPGTO,DISP=SHR
//RELATO DD SYSOUT=*
//SYSOUT DD SYSOUT=*
A STEPLIB sobrepõe a JOBLIB. Caso informado no JOB, as duas opções a STEPLIB prevalece
sobre a JOBLIB. Isto é, a STEPLIB sobrepõe (override) a JOBLIB.
IMPORTANTE
Caso no JOB não seja referenciado nem a JOBLIB e nem STEPLIB, nenhum programa Cobol será
executado.
1.7.1 DDNAME
Data Definiton Name. Faz a identificação dos arquivos e relatórios no JOB. Devem possuir no máximo
8 carácteres. Referencia a claúsula ASSIGN TO em programas COBOL. Podem representar : entrada
ou saída de dados.
Exemplo :
DDNAMEs
ARQPGTO e ARQSERA são os DDNAMES desse STEP. Sendo ARQPGTO (Entrada) e ARQSERA
(Saída).
Exemplo :
DSNAMEs
GR.AMYYYY.ARQPGTO e GR.AMYYYY.ARQSERA são os DSNAMES desse STEP. Sendo
ARQPGTO (Entrada) E ARQSERA (Saída).
1.8 PARM
Efetiva a passagem de parâmetros para o programa que será executado. Deve possuir no máximo 100
carácteres.
Exemplo :
1.10.2 ABEND
Representa falha na execução do STEP. O Sistema Operacional ou o programa retornam um código de
retorno ou código de ABEND no STEP.
O JOB é executado. O STEP é executado, porém existem uma falha na execução do STEP.
1.10.3 FLUSH
Significa que determinado STEP não foi executado. Normalmente ocorre o FLUSH no JOB quando
existe dependência entre os STEPs do JOB.