Guia JCL para Iniciantes (Job Control Language)
Entenda como um job batch é definido, como organizar etapas (EXEC) e como direcionar saídas (DD).
Para quem é este guia?
Este conteúdo é indicado para quem está iniciando em Mainframe e deseja entender JCL, COBOL e os fundamentos do processamento batch.
- Pessoas em transição de carreira para sistemas legados
- Estudantes e recém-formados em TI que desejam conhecer JCL e COBOL
- Profissionais de desenvolvimento (Python/Java/.NET) que querem entender rotinas de batch no Mainframe
Parâmetros Cruciais no JCL
DISP=(NEW,CATLG,DELETE)
Cria o dataset, cataloga ao concluir e remove em caso de falha. Padrão seguro para saídas temporárias.
REGION
Controla memória disponível para o step; ajuste conforme requisitos do programa e política do sistema.
CLASS e MSGCLASS
CLASS define fila de execução (prioridade/escalonamento). MSGCLASS roteia SYSOUT para leitura no SDSF.
CLASS e REGION para otimizar throughput sob JES2/JES3 sem impactar janelas críticas.Exemplos de código: JCL vs Python vs Shell
Como um JOB JCL orquestra o processamento batch em Mainframe comparado a abordagens equivalentes em Python e Shell. Os trechos abaixo ilustram um fluxo simples de leitura de datasets e geração de saída—uma tarefa típica em sistemas legados—com realce visual e rolagem para melhor leitura.
//PAYJOB JOB (ACCT),'BATCH',CLASS=A,MSGCLASS=X
//STEP1 EXEC PGM=PROCPAY
//STEPLIB DD DSN=CORP.LOADLIB,DISP=SHR
//INFILE DD DSN=CORP.PAY.IN,DISP=SHR
//OUTFILE DD DSN=CORP.PAY.OUT,DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(5,1)),DCB=(RECFM=FB,LRECL=200)
//SYSOUT DD SYSOUT=*
#!/usr/bin/env python3
# processamento batch (equivalente conceitual)
import csv
total = 0
with open("CORP.PAY.IN.txt") as f:
for row in csv.reader(f):
total += int(row[3])
with open("CORP.PAY.OUT.txt", "w") as out:
out.write(str(total) + "\\n")
print("Job conclu\u00eddo:", total)
#!/bin/sh
# processamento batch simplificado
INPUT="CORP.PAY.IN.txt"
OUT="CORP.PAY.OUT"
awk -F',' '{sum += $4} END { print sum > "'$OUT'" }' "$INPUT"
echo "Job conclu\u00eddo"
O que é JCL no Mainframe
JCL (Job Control Language) é a linguagem de controle usada em Mainframe para definir processamento batch em sistemas legados. Com JCL você informa qual programa executar (EXEC), quais datasets utilizar (DD) e onde enviar as saídas (SYSOUT), com Escalonamento de Workload via JES2/JES3 e Manipulação de Data Sets em Batch.
//* Exemplo de JOB JCL com comentários no estilo ISPF
//MEUJOB JOB (ACCT),'EXEMPLO JCL',CLASS=A,MSGCLASS=X
//ETAPA1 EXEC PGM=MEUPGM
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
Um job possui um cabeçalho (JOB), uma ou mais etapas (EXEC) e definições de dispositivos/arquivos (DD). Após revisar, você deve submeter o JOB ao sistema.
MSGCLASS apropriada para rotear o SYSOUT ao SDSF e facilitar a auditoria.Dica de debugging
O erro mais comum: JCL ERROR
90% dos erros de JCL acontecem por espaço extra ou nome de dataset (DSN) mal escrito. No curso, fornecemos uma tabela de consulta rápida com os códigos de erro (Abends) mais frequentes.
Para que serve o JCL
Fluxo lógico do JCL
INPUT (DD *)
Cartões DD (datasets de entrada, DD * e DDNAMEs)
PROCESS (EXEC)
Cartão EXEC (programa/step)
OUTPUT (SYSOUT)
SYSOUT roteado por MSGCLASS para leitura no SDSF
O JCL orquestra recursos: datasets, etapas e saídas — do DD * ao SYSOUT — sob escalonamento JES2/JES3.
Estrutura de um JOB JCL
A seguir, um exemplo prático de processamento batch com JCL e programa COBOL: o cartão EXEC indica o programa e os cartões DD definem datasets de entrada/saída.
Exemplo com parâmetros
//* JOB para simular processamento de folha com Enterprise COBOL
//COBJOB JOB (ACCT),'COBOL BATCH',CLASS=A,MSGCLASS=X,REGION=0M
//STEP1 EXEC PGM=CALC-PAGAMENTO
//SYSOUT DD SYSOUT=*
//INFILE DD DSN=EMPRESA.ENTRADA.FUNC,DISP=SHR
//OUTFILE DD DSN=EMPRESA.SAIDA.PAGTO,DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,1)),DCB=(RECFM=FB,LRECL=120,BLKSIZE=0)
Arquivos de entrada e saída são declarados em DD statements. Observe o DISP=(NEW,CATLG,DELETE), REGION e o controle de SPACE/DCB. Para processar, submeta o JOB ao sistema.
CLASS e REGION compatíveis com a política de JES2/JES3 da sua instalação.Para quem é este guia?
- Iniciantes em Mainframe que desejam entender JCL e processamento batch.
- Desenvolvedores COBOL que precisam revisar a estrutura de JOBs e cartões DD/EXEC.
- Profissionais de sistemas legados interessados em boas práticas operacionais.
Exemplos de código: JCL vs Python vs Shell
Abaixo, um comparativo didático entre um JOB JCL de processamento batch em Mainframe e abordagens equivalentes em Python e Shell. O objetivo é evidenciar como o JCL orquestra a execução (com Escalonamento de Workload via JES2/JES3), a Manipulação de Data Sets em Batch e o roteamento de SYSOUT para análise no SDSF.
//* JOB de processamento de pagamentos com comentários explicativos
//PAYJOB JOB (ACCT),'BATCH',CLASS=A,MSGCLASS=X
//STEP1 EXEC PGM=PROCPAY
//STEPLIB DD DSN=CORP.LOADLIB,DISP=SHR
//INFILE DD DSN=CORP.PAY.IN,DISP=SHR
//OUTFILE DD DSN=CORP.PAY.OUT,DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(5,1)),DCB=(RECFM=FB,LRECL=200)
//SYSOUT DD SYSOUT=*
#!/usr/bin/env python3
# Processamento batch (exemplo conceitual)
import csv
total = 0
with open("CORP.PAY.IN.txt") as f:
for row in csv.reader(f):
total += int(row[3])
with open("CORP.PAY.OUT.txt", "w") as out:
out.write(str(total) + "\\n")
print("Job conclu\u00eddo:", total)
#!/bin/sh
# Processamento batch simplificado
INPUT="CORP.PAY.IN.txt"
OUT="CORP.PAY.OUT"
awk -F',' '{sum += $4} END { print sum > "'$OUT'" }' "$INPUT"
echo "Job conclu\u00eddo"
Quer avançar além do básico? Pratique com exercícios guiados e projetos em COBOL e JCL no contexto real de Mainframe.
Perguntas frequentes (JCL)
O que é JCL no Mainframe?
Como submeter um JOB JCL?
Qual a diferença entre cartões DD e EXEC?
O que é SYSOUT?
O que acontece se um Job der ABEND?
Como ler o SYSOUT no SDSF?
Qual a diferença entre JCL e uma linguagem de programação?
Quer praticar com um roteiro guiado? Acede ao simulador z/OS e submete o teu primeiro JOB agora.