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.

Dica do Especialista: combine 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.

JCL
//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=*
Python
#!/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)
Shell
#!/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.

Z/OS TERMINAL - EDITAR JCL
//* 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.

Dica do Especialista: utilize 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.

Dica do Especialista: padronize DDNAMEs e nomenclatura de datasets para acelerar troubleshooting no SDSF.

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

Z/OS TERMINAL - EDITAR JCL
//* 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.

Dica do Especialista: use 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.

JCL
//* 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=*
Python
#!/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)
Shell
#!/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.

Aprender na prática Do zero ao processamento batch em ambientes legados

Perguntas frequentes (JCL)

O que é JCL no Mainframe?
É a linguagem de controle utilizada para definir execução de jobs em processamento batch, especificando programa (EXEC), datasets (DD) e saídas (SYSOUT).
Como submeter um JOB JCL?
Após revisar os cartões, utilize os comandos do ambiente (por exemplo, ISPF) para submeter o JOB ao sistema.
Qual a diferença entre cartões DD e EXEC?
EXEC declara o programa/etapa; DD define datasets e dispositivos usados pela etapa (entrada/saída).
O que é SYSOUT?
É a saída do sistema (relatórios e logs) enviada para uma classe controlada pelo sistema operacional do Mainframe.
O que acontece se um Job der ABEND?
Verifique o RC e mensagens no SYSOUT via SDSF. Ajuste parâmetros/datasets e re-submeta; use códigos de erro para diagnóstico.
Como ler o SYSOUT no SDSF?
Acesse o SDSF (opção DA/ST), filtre pelo JOBNAME e abra o spool. Leia o JESMSGLG, JESJCL e JESYSMSG.
Qual a diferença entre JCL e uma linguagem de programação?
JCL orquestra a execução e os recursos (datasets, saída, filas). A linguagem (ex.: COBOL) implementa a lógica do negócio.

Quer praticar com um roteiro guiado? Acede ao simulador z/OS e submete o teu primeiro JOB agora.