JCL Direitos Autorais – ISP Consultoria www.escoladeprogramadores.com.br 1 Finalidade do JCL Para que um programa seja executado no mainframe é necessário escrever um JOB (serviço) utilizando a JCL – Job Control Language (Linguagem de Controle de Serviços). O JOB é submetido à execução e encaminhado ao JES – Job Entry Subsystem (Subsistema de Entrada de Serviços), que atribui um número ao JOB (Job Id) e faz uma análise sintática do JCL. Se tudo estiver correto, o JES orienta o Sistema Operacional na execução do serviço. Quando o serviço é encerrado, um código de retorno é informado ( MAXCC – Maximum Condition Code) e um conjunto de informações é organizado em arquivos e disponibilizado no SPOOL (Simultaneous Peripheral Operations Online), com o resultado do processamento, para posterior consulta. Abaixo temos os valores de MAXCC 16 terminating messages 12 severe messages 08 error messages 04 warning messages 00 informational messages / success Elementos de JCL Abaixo temos um exemplo de JOB para executar um programa que lê e grava um arquivo: 1 2 3 4 5 6 7 8 12345678901234567890123456789012345678901234567890123456789012345678901234567890 //ALUNOXXX JOB SEUNOME,MSGCLASS=X,CLASS=C,NOTIFY=&SYSUID,TIME=(0,20) //***************************************************************** //STEP1 EXEC PGM=PROGCLI //STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR //ESTOQUE DD DSN=GR.ALUNOXXX.ESTOQUE,DISP=SHR //REPOSIC DD DSN=GR.ALUNOXXX.REPOSIC,DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(1,1),RLSE),UNIT=SYSALLDA, // DCB=(LRECL=20,RECFM=FB,DSORG=PS,BLKSIZE=0) Uma régua foi colocada no início do JOB para melhor identificar as colunas. Uma linha na linguagem JCL começa com // nas duas primeiras colunas. Existem 3 tipos de linhas principais básicas, também chamados de cartões, pois o JCL remonta à época em que se usavam cartões perfurados, conforme mostra a figura a seguir: JOB especifica os parâmetros de execução do serviço EXEC especifica o programa que será executado DD especifica os arquivos que serão lidos ou gravados e seus parâmetros. No exemplo acima, o JOB executa o programa PROGCLI que lê o arquivo ESTOQUE e grava o arquivo REPOSIC.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Uma régua foi colocada no início do JOB para melhor identificar as colunas. Uma linha na linguagem JCL começa com // nas duas primeiras colunas. Existem 3 tipos de linhas principais básicas, também chamados de cartões, pois o JCL
remonta à época em que se usavam cartões perfurados, conforme mostra a figura a seguir:
JOB especifica os parâmetros de execução do serviço
EXEC especifica o programa que será executado
DD especifica os arquivos que serão lidos ou gravados e seus parâmetros.
No exemplo acima, o JOB executa o programa PROGCLI que lê o arquivo ESTOQUE
Em um JOB temos cartão JOB, de 1 a 255 cartões EXEC e de 1 a 1635 cartões DD
para cada cartão EXEC.
Posicionamento de um job
Podemos dividir uma linha da JCL em quatro partes:
Colunas Conteúdo Observação 01 e 02 // obrigatório, menos na entrada de dados 03 a 10 nome do cartão pode ser um JOBNAME, STEPNAME ou DDNAME 12 a 15 operador tipo do cartão, pode ser JOB, EXEC ou DD 16 a 72 operando parâmetros do cartão, separados por vírgula e sem
espaço. Um espaço em branco após um operando começa um comentário.
Regras para a codificação de um JOB:
a) É necessário um espaço em branco entre o nome do cartão, o operador e o
b) Toda linha JCL começa com // nas colunas 1 e 2, exceto quando vai se inserir dados via SYSIN ou INPUT STREAM.
c) Um comentário começa com //* nas colunas de 1 a 3.
d) Um JOB sempre começa por um cartão JOB. Isso significa que a primeira linha não pode ser comentário.
e) Um JOB é composto de pelo menos um programa. Este programa pode ser um utilitário do Sistema Operacional (SORT, IDCAMS, etc), um programa desenvolvido pelo programador ou um procedimento catalogado (PROC).
f) Cada cartão EXEC é chamado STEP e sempre executa um utilitário, programa, ou PROC.
g) Cada cartão EXEC possui cartões DD que indicam os arquivos necessários para o funcionamento do programa, utilitário ou PROC.
h) Não confundir JCL ERROR com ABEND. Um JCL ERROR é um erro de sintaxe ou indisponibilidade de recursos e o programa, utilitário ou PROC não é executado. Um ABEND é uma falha no programa que, em alguns casos, pode até mesmo ser causado por indisponibilidade de recursos do sistema, tais como disco (DASD) ou memória.
Não invente nomes para o JOBNAME, STEPNAME ou DDNAME. Use o padrão da empresa em que estiver trabalhando.
ALUNOXXX é o JOBNAME, nome do JOB. Os seis primeiros caracteres deve ser
seu UserID ou um nome padronizado, estabelecido pela área de
produção do CPD. O JOBNAME pode ter de 1 a 8 caracteres de
tamanho e deve começar por um caractere alfabético na coluna 3.
JOB Nome do cartão. Obrigatório. Deve ter um espaço em branco antes e
outro depois. Deve começar na coluna 12.
‘ACCOUNT’ Informações de contabilização. Este parâmetro é utilizado para indicar
de quem será cobrado o serviço, em outras palavras, o tempo gasto
pelo mainframe. Deve ser codificado entre apóstrofes. Cada empresa
utiliza um padrão.
CLASS Define a classe que será submetida na fila de JOBS. O sinal de igual
(=) não pode ter espaço em branco antes ou depois. Pode- se usar
letras de A até Z e dígitos de 0 a 9.
MSGCLASS Define a classe de SYSOUT (saída) onde serão gerados todos os
arquivos de log durante o tempo que o JOB permanecer no sistema.
Pode-se usar letras de A até Z e dígitos de 0 a 9.
NOTIFY Emite uma notificação com o MAXCC (Maximum Condition Code) do
JOB executado para o usuário indicado. Pode-se usar &SYSUID, para
utilizar o usuário logado no TSO.
TIME Tempo de CPU para executar o JOB. Não é o tempo corrido, mas sim o tempo que a CPU se dedica ao JOB, visto que ele compartilha seu tempo com todos os JOBs em execução no Sistema Operacional. Não inclui tempo de espera nas operações de I-O (OPEN, CLOSE, READ, WRITE, etc). O primeiro valor é minutos (de 0 a 1440) e o segundo é segundos (de 1 a 59). Codificando TIME=1440 ou TIME=NOLIMIT, dará ao JOB ou STEP uma quantidade de tempo ilimitada. Para permitir que o JOB ou STEP use a quantidade máxima de tempo, codifique TIME=MAXIMUM, que permite ao JOB ou STEP executar por 357912 minutos (aproximadamente 248 dias).
Outros parâmetros do JOB não obrigatórios, mas que podem aparecer nas empresas que usam mainframe são:
PRTY Define a prioridade do JOB na fila de execução. PRTY=n. Quanto
menor o número, maior a prioridade. n varia entre 0 e 15.
REGION Aloca espaço em memória. Equivale para todos os STEPs do JOB. O valor default (padrão) é 512Kbytes, outros valores devem ser múltiplos de 512Kbytes. Exemplos: REGION=1024K, REGION=2M. Se REGION é codificada com 0K ou 0M, todo espaço disponível é alocado ao job.
MSGLEVEL Especifica o nível de mensagens do sistema que se deseja imprimir. Sua Sintaxe é: MSGLEVEL=(A,B), onde A pode ser 0, 1 ou 2 e B pode ser 0 ou 1. O valor default é MSGLEVEL=(1,1). O parâmetro A corresponde a informações do JCL e o B corresponde a informações de alocações. Os possíveis valores são:
Sub-parâmetro “A”:
0 = imprime apenas o cartão JOB;
1 = imprime todos os cartões de JCL alimentados e os intercalados; 2 = imprime todos os cartões de JCL alimentados.
Sub-parâmetro “B”:
0 = NÃO imprime mensagens de alocação ou liberação de arquivo;
1 = imprime todas as mensagens de alocação e liberação de arquivo.
O valor default é:
(1,1) = exibe todos comandos de JCL codificados, expandidos e as alocações
TYPRUN Tipo de Execução. Pode ser:
TYPRUN=HOLD, retém o JOB na fila de entrada, aguardando um comando do operador
TYPRUN=SCAN, verifica o JCL para detectar erros de sintaxe e inibe a execução do JOB.
Todos os programas ao terminarem, emitem um código de retorno (return code) para o
sistema operacional. Se for 0 (zero) significa que terminou com sucesso. A lógica da codificação do COND é para “pular” o passo (STEP), ou seja, para que o
No exemplo COND=(4,GT,COMPILA), se o step COMPILA terminou com return code maior que 4, o STEP atual não será executado. Para que o STEP seja executado o resultado do COND tem de ser FALSO.
Alguns exemplos de COND=
(0,NE) Pular o step atual somente se os steps anteriores terminaram com return code igual a 0.
(4,LT) Pular o step atual somente se todos os steps anteriores terminaram com return code menores que 4
(4,GT,STEP1) Pular o step atual somente se o step1 terminou com return code maior que 4
(0,EQ,STEP5) Pular o step atual somente se step5 terminou com return code igual a 0
Outros parâmetros do EXEC não obrigatórios, mas que podem aparecer nas empresas que usam mainframe são:
REGION Aloca memória para os steps individualmente. Se esse parâmetro for codificado no cartão JOB, será ignorado no cartão EXEC. Exemplos: REGION=1024K, REGION=2M. Se REGION é codificada com 0K ou 0M, todo espaço disponível é alocado ao step.
TIME Define um limite de tempo de CPU para os steps individualmente. Equivale ao parâmetro TIME do cartão JOB. O parâmetro TIME no cartão JOB não anula o TIME do cartão EXEC. É um acréscimo a ele.
PARM Também conhecido como PARM GO, permite passar dados diretamente para a LINKAGE SECTION do COBOL. É usado em programas parametrizados, onde um parâmetro orienta o processamento. PARM=value. Value é uma string que pode ter de 1 a 100 caracteres de tamanho, delimitado por apóstrofes.
O segundo sub-parâmetro indica a ação a ser tomada em caso de término normal do step:
CATLG Catalogar o arquivo. Obviamente que esta opção deve estar sempre acompanhada de NEW no primeiro sub-parâmetro. Porque se o arquivo estiver sendo lido (OLD) é porque já está catalogado.
UNCATLG Tira o arquivo do catalogo, mas não o apaga. Evite usar.
DELETE Apaga o arquivo.
KEEP Mantém o arquivo do que jeito que estava antes.
PASS indica que o arquivo é temporário e será passado aos steps subsequentes.
O terceiro sub-parâmetro indica a ação a ser tomada em caso de término anormal do step. Quando não informado, assume o valor do segundo sub-parâmetro:
CATLG Catalogar o arquivo. Obviamente que esta opção deve estar sempre acompanhada de NEW no primeiro sub-parâmetro. Porque se o arquivo estiver sendo lido (OLD) é porque já está catalogado.
UNCATLG Tira o arquivo do catalogo, mas não o apaga. Evite usar.
DELETE Apaga o arquivo.
KEEP Mantém o arquivo do jeito que estava antes.
Se o arquivo é de entrada (OLD ou SHR) não precisa especificar demais parâmetros, pois
naturalmente já está catalogado e o sistema saberá encontrá-lo. Se for de saída você deverá
usar os demais parâmetros do exemplo SAIDA.
Exemplos válidos:
DISP=(NEW,PASS,DELETE): o arquivo é criado neste step e passado aos demais somente se o programa der return code 0. Se o programa ABENDar, o arquivo será excluído.
DISP=(NEW,PASS): o arquivo é criado neste step e passado aos demais em qualquer condição de termino.
DISP=(OLD,PASS): o arquivo é lido neste step e passado aos demais em qualquer condição de termino.
DISP=SHR: o arquivo é lido neste step, podendo ser lido por outros programas de outros Jobs, pois o arquivo é de uso compartilhado (shared).
Exemplos inválidos:
DISP=(SHR,CATLG,DELETE): Como o arquivo não é novo (SHR) ele já está catalogado. Não é possível recatalogá-lo.
DISP=(NEW,KEEP,DELETE): Como o arquivo é novo (NEW) não é possível manter (KEEP) o arquivo como estava antes.
O SORT é o utilitário para classificar (ordenar) arquivos. Abaixo temos um exemplo de classificação de um cadastro de clientes, onde as 4 primeiras posições é o código do cliente, que será usado como critério de classificação em ordem crescente.
SORTIN indica o arquivo que será classificado (entrada)
SORTOUT indica o arquivo que será o resultado da classificação (saída)
SORT FIELDS campos no registro de entrada que serão referencias para a classificação, os parâmetros auxiliares que compõem este parâmetro são (PI,PF,TD,TO), onde: