☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta job. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta job. Mostrar todas as mensagens

segunda-feira, 30 de setembro de 2024

🔥 JCL no z/OS 3.2 — o silêncio que sustenta tudo

 

Bellacosa Maiframe apresenta JCL V3.2 Job Control Language

🔥 JCL no z/OS 3.2 — o silêncio que sustenta tudo



📅 Datas importantes

  • Release (GA): setembro de 2024

  • Final de suporte IBM (EoS): 30 de setembro de 2029 (ciclo padrão de suporte)

O z/OS 3.2 não veio para “mudar o jogo”.
Ele veio para confirmar quem sempre mandou no jogo.


🧬 Contexto histórico

O z/OS 3.2 nasce num mundo onde:

  • Cloud híbrida já é chão de fábrica

  • Observabilidade virou obrigação

  • Segurança é contínua

  • Automação é regra

  • APIs e eventos disparam tudo

E mesmo assim…

👉 o JCL continua sendo o último elo confiável entre intenção e execução.

Bellacosa resumiria assim:

“O mundo ficou barulhento.
O JCL continua em silêncio… funcionando.”


JCL V3.2 Job Control Language

✨ O que há de novo no JCL no z/OS 3.2

A resposta curta (e honesta):

❌ Nada mudou na linguagem
✅ Tudo mudou no peso estratégico do JCL

🆕 1. JCL como fundação do core digital

No z/OS 3.2:

  • O batch é oficialmente serviço corporativo

  • JCL é disparado por:

    • APIs

    • eventos

    • pipelines

    • schedulers cognitivos

  • O JCL vira o contrato final de execução

👉 Se passou pelo JCL, aconteceu de verdade.


🆕 2. JES2 no ponto máximo de previsibilidade

  • Escala massiva de jobs concorrentes

  • Spool estável como rocha

  • Restart e recovery totalmente previsíveis

  • Integração total com automação e monitoramento

O operador agora governa fluxo,
não apaga incêndio.


🆕 3. DFSMS completamente orientado a políticas

  • Storage cada vez mais autônomo

  • Menos parâmetros manuais

  • Menos erro humano

  • Mais inteligência sistêmica

O resultado?
👉 JCL mais limpo, mais legível e mais durável.


🔧 Melhorias percebidas no dia a dia

✔ Batch 24x7 sem drama
✔ Menos “gambiarras históricas”
✔ Mais padronização
✔ JCL tratado como código crítico
✔ Auditoria e rastreabilidade nativas

Nada mudou no //STEP EXEC.
Tudo mudou na responsabilidade do job.


🥚 Easter Eggs (para mainframer raiz)

  • 🥚 JCL escrito no OS/360 ainda roda no z/OS 3.2

  • 🥚 IEFBR14 segue vivo e respeitado

  • 🥚 Comentários em JCL mais antigos que DevOps 😅

  • 🥚 O erro mais comum continua sendo:

    • RC ignorado

    • DISP mal planejado

    • dataset em uso em produção

👉 Tecnologia evolui. Erro humano é backward compatible.


💡 Dicas Bellacosa para JCL no z/OS 3.2

🔹 Trate JCL como ativo estratégico corporativo
🔹 Pense no job como serviço crítico, não script
🔹 Versione JCL como código
🔹 Padronize nomes, comentários e RC
🔹 Documente decisões, não só comandos

🔹 Sempre use:

  • IF / THEN / ELSE

  • RC explícito

  • SYSOUT claro

  • comentários pensando em décadas

Esse JCL vai rodar quando você não estiver mais aqui.


📈 Evolução do JCL até o z/OS 3.2

EraPapel do JCL
OS/360Controle batch
MVSAutomação
OS/390Base corporativa
z/OS V1.xOrquestração
z/OS V2.xMundo híbrido
z/OS 3.1Core digital
z/OS 3.2Alicerce definitivo

👉 No z/OS 3.2, o JCL não é discutido.
Ele é assumido.


📜 Exemplo de JCL “cara de z/OS 3.2”

//BELL32 JOB (ACCT),'JCL z/OS 3.2', // CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID //* //* JOB EXPOSTO COMO SERVIÇO CORPORATIVO //* DISPARADO POR API / EVENTO / PIPELINE //* //STEP01 EXEC PGM=COREPROC //STEPLIB DD DSN=BELLACOSA.LOADLIB,DISP=SHR //SYSOUT DD SYSOUT=* //* //IF (STEP01.RC = 0) THEN //STEP02 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DELETE BELLACOSA.WORK.DATA SET MAXCC = 0 /* //ENDIF

💬 Comentário Bellacosa:

“Esse job não sabe quem o chamou.
E isso é exatamente o motivo pelo qual ele é confiável.”


🧠 Comentário final

O JCL no z/OS 3.2 é a confirmação definitiva de uma verdade antiga:

🔥 Confiabilidade não se reinventa.
Ela se preserva.

Enquanto novas plataformas prometem estabilidade,
o JCL segue entregando há mais de 60 anos.

JCL não é passado.
JCL é o chão onde o futuro pisa.

terça-feira, 20 de agosto de 2024

Debugando programa COBOL

Bellacosa Mainframe e o debug em cobol

☕ Um Café no Bellacosa Mainframe

Professor Pardal Entra no Abend: a Arte de Debugar COBOL sem Transformar Produção em Patópolis

🐔🔧 S0C7, S0C4, dumps, CEEDUMP, SYSOUT, DISPLAY, offsets, compile listings, Db2, CICS e a velha ciência de descobrir por que um programa que “funcionava ontem” resolveu explodir hoje

Existe uma frase particularmente perigosa no universo mainframe:

“Mas esse programa nunca deu problema.”

Meu jovem Padawan...

Um programa COBOL que está há 27 anos em produção não está necessariamente correto.

Ele pode simplesmente estar há 27 anos esperando o registro certo para explodir.

Então chega terça-feira.

02:47 da manhã.

O telefone toca.

JOB CLIENTE ABENDED
SYSTEM COMPLETION CODE=0C7

Silêncio.

Alguém pergunta:

— Quem alterou o programa?

Resposta:

— Ninguém.

Outra pessoa:

— Mudaram o arquivo?

— Não.

— Db2?

— Não.

— JCL?

— Também não.

Nesse momento, uma pequena porta se abre no CPD.

Entra um galo antropomórfico de chapéu, óculos e ferramentas.

Professor Pardal.

Ele olha para o dump.

Olha para o programador.

Olha novamente para o dump.

E provavelmente pergunta:

“Você leu a mensagem de erro?”

Porque antes de inventarmos observabilidade, AIOps, telemetry, tracing e outras palavras capazes de consumir três slides cada...

já existia uma técnica extraordinariamente eficiente:

LER A PORRA DO ERRO.

Bem-vindo ao maravilhoso mundo do debug COBOL.


🐔 Professor Pardal assume o plantão

Nos quadrinhos Disney, Professor Pardal é aquele inventor capaz de construir praticamente qualquer coisa.

Máquinas impossíveis.

Robôs.

Veículos.

Dispositivos absurdos.

Soluções para problemas que ninguém sabia que possuía.

E frequentemente suas invenções criam problemas ainda maiores.

Ou seja:

perfeitamente qualificado para desenvolvimento corporativo.

Ele também possui um pequeno ajudante robótico chamado Lampadinha.

Portanto nossa arquitetura está pronta:

PROFESSOR PARDAL
      |
      +---- Programador COBOL
      |
      +---- Lampadinha
              |
              +---- IA generativa

Agora precisamos descobrir por que:

COMPUTE WS-TOTAL =
        WS-QUANTIDADE * WS-VALOR.

mandou nosso JOB diretamente para Valhalla.


🧠 Debug não significa olhar código

Primeira lição do Professor Pardal:

debug é investigação.

Existe uma diferença enorme.

O programador desesperado abre o código e começa:

rolando...

rolando...

rolando...

rolando...

Até encontrar alguma coisa que parece suspeita.

Então altera.

Compila.

Executa.

Falha.

Altera outra coisa.

Compila.

Executa.

Falha diferente.

Parabéns.

Você não está fazendo debugging.

Está praticando:

Programação Orientada a Superstição™

Professor Pardal jogaria uma chave inglesa em sua cabeça.

O processo correto começa com evidência.


🔎 1. Qual foi exatamente o ABEND?

Antes de olhar código:

QUAL JOB?
QUAL STEP?
QUAL PROGRAMA?
QUAL ABEND?
QUAL OFFSET?
QUAL ARQUIVO?
QUAL REGISTRO?
QUAL SQLCODE?
QUAL TRANSAÇÃO?

Imagine:

JOBNAME  : FATURA01
STEP     : STEP030
PROGRAM  : FATU120
ABEND    : S0C7

Já sabemos muita coisa.

S0C7 normalmente aponta para uma data exception.

Em linguagem Bellacosa:

alguma operação decimal encontrou algo que não deveria estar ali.

Você esperava:

12345

Recebeu:

12A45

COBOL olhou aquilo.

Pensou por aproximadamente três nanossegundos.

E decidiu:

VAI TOMAR NO CU.

S0C7.

💥 S0C7 — o clássico

Talvez seja o ABEND mais famoso do universo COBOL.

Imagine:

01 WS-VALOR PIC 9(05).

MOVE '12A45' TO WS-VALOR.

ADD 1 TO WS-VALOR.

A movimentação pode deixar dados incompatíveis com aquilo que posteriormente será tratado como numérico.

Quando uma instrução decimal tenta utilizar o campo...

💥

SYSTEM COMPLETION CODE=0C7

Professor Pardal imediatamente pergunta:

De onde veio WS-VALOR?

Essa pergunta vale ouro.

Porque frequentemente o erro não está na instrução que explodiu.

A instrução apenas encontrou o cadáver.


🕵️ A cena do crime

Considere:

READ ARQ-CLIENTES
   AT END
      SET EOF TO TRUE
   NOT AT END
      MOVE CLI-VALOR TO WS-VALOR
END-READ.

...

COMPUTE WS-TOTAL = WS-VALOR * WS-TAXA.

O COMPUTE explode.

Quem é acusado?

COMPUTE

Mas talvez o verdadeiro assassino tenha acontecido vinte instruções antes:

MOVE CLI-VALOR TO WS-VALOR

E talvez CLI-VALOR tenha vindo de:

ARQUIVO

que veio de:

SORT

que veio de:

OUTRO PROGRAMA

que veio de:

DB2

que recebeu dados de:

API

que recebeu alguma porcaria enviada por alguém.

Bem-vindo ao debugging corporativo.


🗺️ O mapa do Professor Pardal

Uma investigação eficiente pode ser visualizada assim:

ABEND
  ↓
STEP
  ↓
PROGRAMA
  ↓
OFFSET
  ↓
INSTRUÇÃO
  ↓
VARIÁVEIS
  ↓
ORIGEM DOS DADOS
  ↓
REGISTRO
  ↓
CAUSA

Não:

ABEND
  ↓
PÂNICO
  ↓
ALTERA QUALQUER COISA
  ↓
COMPILA
  ↓
REZA

Essa segunda metodologia é bastante popular.


📜 2. Leia o dump

Ah, o dump.

Aquele maravilhoso documento de 18 quilômetros que aparece no spool.

O programador iniciante abre:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
HEX HEX HEX HEX HEX HEX HEX HEX
REGISTER REGISTER REGISTER
STORAGE STORAGE STORAGE

Fecha.

E declara:

“Não dá para entender.”

Professor Pardal sorri.

Porque o dump não foi criado para ser bonito.

Foi criado para contar o que existia na memória quando o programa morreu.

É a autópsia.


🧬 CEEDUMP

Em ambientes Language Environment, podemos encontrar informações extremamente úteis no CEEDUMP.

Dependendo da configuração e do problema, você pode conseguir identificar:

  • programa;

  • condição;

  • offset;

  • traceback;

  • rotina;

  • registradores;

  • storage;

  • contexto da falha.

Você não precisa compreender imediatamente cada byte.

Primeiro procure aquilo que reduz o universo da investigação.

Se seu programa possui 25.000 linhas e você descobre aproximadamente onde ocorreu a falha...

já eliminou uma enorme quantidade de Patópolis.


📐 3. O offset é seu amigo

Imagine uma mensagem apontando algo semelhante a:

PROGRAM FATU120
OFFSET X'00001A7C'

Agora temos uma coordenada.

Precisamos relacioná-la ao código compilado.

É aqui que o compile listing se torna extremamente importante.

Dependendo do compilador, opções utilizadas e informações disponíveis, podemos correlacionar offsets com statements/instruções.

Professor Pardal abre sua bancada:

ABEND
+
OFFSET
+
COMPILE LISTING
=
LOCALIZAÇÃO PROVÁVEL

Agora nossa investigação saiu de:

“Existe algum problema no programa.”

para:

“Existe alguma coisa errada nesta região.”

Isso muda tudo.


📚 Compile listing não é papel para alimentar impressora

Durante anos conheci programadores que tratavam listing como aquele negócio gigantesco produzido depois da compilação.

Errado.

Ele pode ser uma verdadeira radiografia do programa.

Dependendo das opções de compilação, encontramos informações sobre:

SOURCE
CROSS-REFERENCE
DATA MAP
PROCEDURE MAP
OFFSETS
MESSAGES
OPTIMIZATION

O velho:

XREF

pode ser particularmente interessante.

Quer saber onde determinada variável aparece?

Em vez de executar:

CTRL+F
CTRL+F
CTRL+F
CTRL+F

você pode analisar suas referências.


🐔 Professor Pardal pergunta: “Quem mexeu nesta variável?”

Imagine:

01 WS-SALDO PIC S9(09)V99 COMP-3.

Você encontra problema em WS-SALDO.

Pergunta:

Quem escreve nele?

Talvez:

01230 MOVE DB2-SALDO TO WS-SALDO
01870 ADD WS-JUROS TO WS-SALDO
02410 MOVE ZERO TO WS-SALDO
03150 COMPUTE WS-SALDO = ...

Agora temos suspeitos.

Debugging começa a parecer investigação criminal.

Porque essencialmente é.


🔦 Lampadinha recomenda DISPLAY

E chegamos à ferramenta mais sofisticada já inventada pela humanidade.

DISPLAY.

Sim.

Pode rir.

Temos ferramentas modernas de debugging.

IDEs.

Debuggers interativos.

Tracing.

Observabilidade.

Ferramentas comerciais excelentes.

Mas existe um momento na carreira de todo COBOLzeiro em que aparece:

DISPLAY 'ENTREI AQUI'.

Depois:

DISPLAY 'WS-VALOR=' WS-VALOR.

Depois:

DISPLAY 'ANTES DO COMPUTE'.

E finalmente:

DISPLAY 'MEU DEUS CHEGOU AQUI'.

É feio?

Sim.

Funciona?

ABSOLUTAMENTE.


⚠️ Mas DISPLAY também pode virar arma de destruição

Professor Pardal faz uma advertência.

Imagine:

PERFORM UNTIL EOF
   READ ARQUIVO
   DISPLAY REGISTRO-INTEIRO
END-PERFORM.

Arquivo:

83.000.000 registros

JES2:

VOCÊ TEM CERTEZA DISSO, FILHO?

Portanto DISPLAY deve ser usado com inteligência.

Talvez:

IF WS-CONTADOR < 100
   DISPLAY ...
END-IF

Ou somente quando determinada condição ocorrer:

IF WS-CLIENTE = 123456
   DISPLAY ...
END-IF

Debugging não deveria provocar um novo incidente.

Embora isso torne a história muito melhor depois.


🧯 S0C4 — entrou onde não deveria

Outro clássico:

S0C4

De maneira simplificada, estamos frequentemente olhando para algum problema de acesso à memória/storage, endereço inválido ou operação relacionada.

É uma família de situações que exige analisar contexto.

Ponteiros.

Índices.

Subscripts.

CALLs.

Parâmetros.

Storage.

Professor Pardal imediatamente procura coisas como:

SET ADDRESS OF ...

ou tabelas:

01 TABELA.
   05 ITEM OCCURS 100 TIMES.

e alguém fazendo:

ITEM(347)

A tabela possui 100 posições.

O programador quer acessar 347.

COBOL responde:

interessante.

O sistema responde:

S0C4.


📦 SSRANGE — o cinto de segurança

Durante desenvolvimento e testes, opções como SSRANGE podem ajudar enormemente na identificação de problemas relacionados a referências fora dos limites permitidos.

É o equivalente COBOL de colocar Professor Pardal ao lado da tabela dizendo:

“Meu amigo, existem 100 posições aqui. Por que você está tentando acessar a 347?”

Naturalmente existe custo associado às verificações adicionais, portanto decisões de compilação para desenvolvimento, teste e produção precisam considerar o ambiente e as políticas da organização.

Mas durante diagnóstico?

Pode ser extremamente útil.


🧮 COMP-3: onde mora o demônio hexadecimal

Agora entramos numa região particularmente divertida.

Packed decimal.

PIC S9(7)V99 COMP-3.

O programador iniciante olha um dump hexadecimal e pensa:

Satanás.

O COBOLzeiro experiente olha:

12 34 56 78 9C

e pensa:

Ah, 1234567,89 positivo.

E continua tomando café.

Campos COMP-3 são eficientes e tradicionais no processamento decimal empresarial.

Mas quando dados inválidos entram nesse território...

o S0C7 começa a afiar a faca.


🧪 TESTE O DADO, NÃO SUA FÉ

Uma das grandes lições do debugging é:

nunca confie cegamente na entrada.

“Mas o arquivo vem de outro sistema.”

Maravilha.

Outro sistema também possui programadores.

“Mas vem do banco.”

Ótimo.

“Mas existe validação.”

Excelente.

Mesmo assim:

VALIDATE.

Porque sistemas antigos frequentemente acumulam décadas de exceções, migrações, conversões e pequenas decisões históricas.

O campo chamado:

DATA-NASCIMENTO

pode conter:

00000000
99999999
20260231
        

e algum valor que ninguém consegue explicar desde 1987.


🗄️ Quando o culpado é Db2

Agora nosso programa executa SQL.

EXEC SQL
   SELECT SALDO
     INTO :WS-SALDO
     FROM CLIENTE
    WHERE ID = :WS-ID
END-EXEC.

Professor Pardal pergunta imediatamente:

SQLCODE?
SQLSTATE?

Não faça isto:

EXEC SQL
   ...
END-EXEC

CONTINUE.

Faça tratamento adequado.

Porque:

SQLCODE = 0

é uma história.

SQLCODE = +100

é outra.

Valores negativos contam histórias ainda mais interessantes.

Um bom debug de aplicação Db2 exige entender não apenas COBOL, mas a conversa entre:

PROGRAMA
   ↕
SQL
   ↕
DB2

🏦 CICS: agora o pato ficou bravo

Batch já é divertido.

Então entramos no CICS.

Agora temos:

TRANSACTION
COMMAREA
CHANNELS
CONTAINERS
RESP
RESP2
EIBRESP
EIBRCODE
MAPAS
TSQ
TDQ
FILES
DB2
MQ

E o usuário diz:

“A tela fechou.”

Excelente descrição técnica.

Professor Pardal pergunta:

Qual transação?

Usuário:

“Aquela azul.”

Bem-vindo ao suporte.


🚨 RESP e RESP2

Uma prática importantíssima no CICS é não tratar comandos como se fossem infalíveis.

Exemplo conceitual:

EXEC CICS READ
     FILE('CLIENTE')
     INTO(WS-REGISTRO)
     RIDFLD(WS-CHAVE)
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC.

Agora conseguimos investigar.

Em vez de:

NÃO FUNCIONOU

temos informação sobre a resposta da operação.

Debugging é justamente isso:

transformar “não funciona” em evidência mensurável.


🧠 Professor Pardal apresenta o método científico

A melhor maneira de debugar COBOL não é decorar ABENDs.

É pensar como cientista.

Temos:

OBSERVAÇÃO
    ↓
HIPÓTESE
    ↓
TESTE
    ↓
EVIDÊNCIA
    ↓
CONCLUSÃO

Exemplo:

Observação

S0C7 durante cálculo.

Hipótese

WS-VALOR contém dados não numéricos.

Teste

Inspecionar campo imediatamente antes da operação.

Evidência

WS-VALOR = '00012A45'

Nova pergunta

Quem colocou A ali?

Seguimos para trás.

Isso é debugging.


❌ O anti-debug

O método corporativo alternativo é:

S0C7
 ↓
"DEVE SER O DB2"
 ↓
DBA INVESTIGA
 ↓
NÃO É DB2
 ↓
"DEVE SER INFRA"
 ↓
INFRA INVESTIGA
 ↓
NÃO É INFRA
 ↓
"SERÁ A REDE?"
 ↓
NETWORK INVESTIGA
 ↓
NÃO É REDE
 ↓
3 HORAS DE WAR ROOM
 ↓
CAMPO NUMÉRICO CONTINHA 'X'

Professor Pardal abandona Patópolis.


🤖 Lampadinha ganhou IA generativa

Agora chegamos a 2026.

Imagine Professor Pardal com uma Lampadinha equipada com IA.

Você fornece:

ABEND
dump
compile listing
trecho COBOL
copybook
JCL
mensagens

E pergunta:

“Quais são as hipóteses mais prováveis?”

Isso pode acelerar brutalmente a investigação.

IA pode ajudar a:

  • interpretar mensagens;

  • explicar código legado;

  • correlacionar variáveis;

  • sugerir pontos de inspeção;

  • construir hipóteses;

  • explicar hexadecimal;

  • analisar fluxos;

  • sugerir casos de teste.

Mas existe uma regra fundamental:

IA NÃO TRANSFORMA HIPÓTESE EM EVIDÊNCIA.

Se Lampadinha disser:

“Provavelmente WS-VALOR possui dado inválido.”

Excelente.

Agora prove.


🧠 IA pode alucinar. Dump não.

Esta frase deveria estar colada em toda War Room moderna.

IA:
"Talvez seja..."

DUMP:
"ERA ISTO."

Use IA como copiloto investigativo.

Não como oráculo.

Especialmente em ambientes críticos.

E jamais copie dumps de produção contendo dados sensíveis para serviços externos sem autorização, mascaramento e respeito às políticas de segurança.

Professor Pardal é maluco.

Mas RACF continua observando.


🔐 DEBUG também é segurança

Essa parte frequentemente é esquecida.

Dump pode conter:

CPF
CONTA
NOME
TOKEN
CARTÃO
ENDEREÇO
DADOS FINANCEIROS
CHAVES
CREDENCIAIS

DISPLAY também pode colocar dados sensíveis no spool.

Logs permanecem.

SYSOUT permanece.

Ferramentas armazenam informações.

Portanto:

DEBUG ≠ LIBEROU GERAL

Em produção, diagnóstico precisa respeitar controles de segurança e privacidade.


🧰 A caixa de ferramentas do Professor Pardal

Nosso laboratório COBOL pode conter várias ferramentas e técnicas:

ABEND MESSAGES
SYSOUT
JES/SDSF
DUMP
CEEDUMP
COMPILE LISTING
XREF
OFFSET
DISPLAY
SSRANGE
TEST OPTIONS
DEBUGGERS
FAULT ANALYSIS TOOLS
FILE INSPECTION
DB2 DIAGNOSTICS
CICS DIAGNOSTICS
SMF
LOGS

Nenhuma ferramenta substitui raciocínio.

Porque o problema fundamental continua sendo:

O que o programa deveria fazer e o que ele realmente fez?

Essa diferença é o território do debugger.


🧭 O algoritmo Bellacosa-Pardal de Debug COBOL™

Quando alguma coisa explodir:

1. NÃO ENTRE EM PÂNICO
        ↓
2. IDENTIFIQUE JOB/STEP/PROGRAMA
        ↓
3. LEIA O ABEND/MENSAGEM
        ↓
4. PROCURE OFFSET/TRACEBACK
        ↓
5. CONSULTE O LISTING
        ↓
6. IDENTIFIQUE A INSTRUÇÃO
        ↓
7. INSPECIONE AS VARIÁVEIS
        ↓
8. DESCUBRA QUEM AS ALTEROU
        ↓
9. RASTREIE A ORIGEM DOS DADOS
        ↓
10. CRIE UMA HIPÓTESE
        ↓
11. TESTE
        ↓
12. REPRODUZA
        ↓
13. CORRIJA A CAUSA
        ↓
14. FAÇA TESTE DE REGRESSÃO
        ↓
15. DOCUMENTE

Observe o item 13:

CORRIJA A CAUSA.

Não simplesmente o sintoma.


🩹 O remendo que cria o monstro

Programa:

IF WS-VALOR IS NUMERIC
   COMPUTE ...
END-IF.

Problema desapareceu.

CABÔ!

Talvez.

Mas espere.

Por que WS-VALOR não era numérico?

Se deveria obrigatoriamente ser...

você acabou de esconder um problema de qualidade de dados.

O programa não explode mais.

Agora apenas ignora silenciosamente dinheiro.

Excelente.

Transformamos um S0C7 visível em um erro contábil invisível.

Professor Pardal começa a suar frio.


🧪 Corrigir não é provar

Depois da alteração:

“Funcionou.”

Não significa:

“Está correto.”

Precisamos testar:

CASO ORIGINAL
CASOS NORMAIS
LIMITES
ZEROS
NEGATIVOS
VALORES MÁXIMOS
DADOS INVÁLIDOS
ARQUIVO VAZIO
DUPLICIDADES
ERROS DB2
ERROS CICS

E principalmente:

garantir que você não consertou uma coisa quebrando três.

Esse fenômeno é conhecido tecnicamente como:

sexta-feira às 17h43.


📚 Documente o incidente

Encontramos:

CAUSA:
campo VALOR recebeu caractere inválido.

ORIGEM:
programa anterior gerou registro inconsistente.

IMPACTO:
JOB FATURA01 interrompido.

CORREÇÃO:
validação corrigida na origem.

PREVENÇÃO:
teste adicionado.

Isso vale muito mais do que:

PROBLEMA RESOLVIDO.

Daqui a três anos outro programador pode encontrar situação semelhante.

E descobrir que o Professor Pardal de 2026 deixou um mapa.


🐔 O melhor debugger não é quem conhece todos os ABENDs

É quem sabe fazer boas perguntas.

O QUE FALHOU?

ONDE?

QUANDO?

COM QUAL DADO?

SEMPRE ACONTECE?

QUAL FOI A ÚLTIMA EXECUÇÃO BOA?

O QUE MUDOU?

CONSEGUIMOS REPRODUZIR?

QUAL VARIÁVEL ESTAVA ERRADA?

QUEM ALTEROU ESSA VARIÁVEL?

DE ONDE VEIO O DADO?

Cada resposta reduz o espaço de busca.

Debugging é uma batalha contra possibilidades.

Começamos com:

QUALQUER COISA PODE ESTAR ERRADA

e terminamos com:

ESTE BYTE ESTÁ ERRADO.

Isso é lindo.


☕ Professor Pardal termina seu café

Depois de duas horas de investigação encontramos a causa.

Um arquivo recebido por um programa COBOL possuía um registro:

0000000000000012578

e outro:

00000000000000A2578

Um único caractere.

Um miserável:

A

No meio de milhões de registros.

Esse pequeno A atravessou sistemas.

Passou por arquivos.

Entrou no programa.

Chegou a um campo tratado como numérico.

Esperou pacientemente.

Então encontrou uma operação decimal.

E derrubou um JOB gigantesco.

Milhares de linhas COBOL.

Db2.

JES2.

z/OS.

Mainframe de milhões de dólares.

Equipe de operações.

Desenvolvedores.

DBAs.

War Room.

Gestores.

Todos derrotados por:

A

Professor Pardal olha para Lampadinha.

Lampadinha olha para o dump.

O operador pergunta:

— Então era o mainframe?

Pardal responde:

— Não.

— Era COBOL?

— Não.

— Db2?

— Não.

— CICS?

— Também não.

— Então o que era?

Ele aponta para o registro.

A

Silêncio.

O JOB é reprocessado.

IEF142I FATURA01 STEP030 - STEP WAS EXECUTED
IEF285I
MAXCC=0000

E mais uma vez o gigantesco dinossauro de silício volta a trabalhar como se absolutamente nada tivesse acontecido.


🦖 A moral da história

Depois de décadas trabalhando com software, aprendemos uma coisa desconfortável:

os bugs mais difíceis nem sempre são tecnicamente sofisticados.

Às vezes são apenas pequenos.

Escondidos.

Intermitentes.

Dependentes de dados.

Dependentes de sequência.

Dependentes de uma combinação que acontece uma vez a cada cinco milhões de registros.

Por isso ferramentas são importantes.

Mas método é mais importante.

Professor Pardal pode possuir a oficina inteira.

Lampadinha pode possuir inteligência artificial.

Você pode ter o melhor debugger disponível.

Mas no final alguém ainda precisa perguntar:

“O que aconteceu imediatamente antes disso?”

E continuar perguntando.

Até encontrar aquele miserável byte que resolveu transformar uma madrugada tranquila em uma War Room.


☕ Epílogo — Um Café no Bellacosa Mainframe

03:58.

Incidente encerrado.

Professor Pardal guarda suas ferramentas.

Lampadinha desliga a IA.

Operações fecha o chamado.

O gerente pergunta:

“Podemos considerar causa raiz identificada?”

Sim.

“Podemos evitar recorrência?”

Sim.

“Precisamos de reunião amanhã?”

...

Professor Pardal olha para o relógio.

Olha para o mainframe.

Olha para Lampadinha.

Lampadinha discretamente apaga a luz.

E ambos fogem de Patópolis antes que alguém consiga pronunciar:

“Post-Mortem.”

🐔🔧☕🦖

JOB DEBUGPARDAL — MAXCC=0000

E todos viveram felizes...

até o próximo S0C7.

https://eljefemidnightlunch.blogspot.com/2026/06/a-saga-de-vagner-bellacosa-no-reino-dos.html

DISPLAY e BUG TRAP as melhores maneiras de debugar um programa COBOL. Qual é a sua técnica? #ibm #mainframe #cobol #debug #trap #bug #returncode #maxcc #jcl #sdsf #job

 

segunda-feira, 19 de agosto de 2024

Conversão do REAL um grande trabalho da informática mainframe


A resiliência e a tenacidade técnica dos Analistas de Sistemas Mainframe, que em quatro dias conseguiram virar a chave, convertendo sistemas críticos para a conversão de moeda, do URV para o REAL. 



Feriado bancário na Sexta-feira, mas Segunda-feira estava tudo no ar, funcionando, quatro dias de loucura no Departamento de Informatica, muita pizza, companheirismo, horas-extra, mas sensação de dever cumprido. 




 Programas em COBOL, PLI e Natural em Sistemas Mainframe alterados para a conversão da Moeda, sem perdas ou prejuízos aos clientes e empresas. Sendo um Caso de Estudo de Sucesso, visto de perto pelas autoridades europeias, que passado 7 anos repetiram o processo na Conversão do Euro.

#ibm #mainframe #real #urv #conversao #cobol #natural #jcl #pli #db2 #adabas #job #sistemas #dev #programador #sucesso
 

sábado, 20 de julho de 2024

Road Map para Aprender Mainframe

Bellacosa Mainframe e o roadmap mainframe 


☕ Um Café no Bellacosa Mainframe

A Volta ao Mainframe em 80 Dias — O Road Map de Phileas Fogg para se Tornar um Mainframeiro

🎩🦖 80 dias, oito grandes escalas, COBOL, JCL, z/OS, TSO/ISPF, VSAM, Db2, CICS, RACF, Git, APIs e uma aposta aparentemente impossível: sair de Londres como turista e voltar como programador mainframe

Londres.

Reform Club.

Um cavalheiro inglês consulta seu relógio.

Phileas Fogg.

Metódico.

Pontual.

Imperturbável.

Um homem capaz de tomar café às 08:23 e provavelmente considerar uma execução às 08:24 um incidente de produção.

Sobre a mesa está o Daily Telegraph.

Mas existe uma notícia estranha:

“É possível aprender mainframe em apenas 80 dias?”

Os cavalheiros riem.

Um deles comenta:

— Mainframe? Meu caro Fogg, seriam necessários anos!

Outro acrescenta:

— COBOL possui DIVISIONs!

Um terceiro, claramente traumatizado:

— E existe JCL!

Fogg fecha o jornal.

Consulta o relógio.

Oitenta dias.

Silêncio.

— Impossível!

Fogg responde:

“Então aposto vinte mil libras.”

Nesse exato momento, seu criado Passepartout percebe que provavelmente escolheu o pior dia da história para começar no emprego.

Pegam as malas.

Destino:

IBM Z.

E assim começa nossa...

🌍 VOLTA AO MAINFRAME EM 80 DIAS


🗺️ O mapa da expedição

Nossa viagem terá oito grandes escalas:

LONDRES
   ↓
z/OS + TSO/ISPF
   ↓
SUEZ
   ↓
JCL + JES2 + SDSF
   ↓
BOMBAIM
   ↓
COBOL
   ↓
CALCUTÁ
   ↓
VSAM + DATASETS
   ↓
HONG KONG
   ↓
Db2
   ↓
YOKOHAMA
   ↓
CICS
   ↓
SAN FRANCISCO
   ↓
RACF + USS + Zowe + Git + APIs
   ↓
NOVA YORK
   ↓
INTEGRAÇÃO + DEVOPS + TESTES
   ↓
LONDRES

80 dias.

Não para transformar alguém em especialista.

Isso seria picaretagem.

Mas para fazer algo perfeitamente possível:

construir um mapa mental sólido do ecossistema mainframe e conseguir desenvolver, executar, investigar e integrar uma aplicação simples.

Temos uma aposta.

O relógio começou.


🎩 DIAS 1–10 — LONDRES

Primeira escala: entender o monstro

Antes de programar mainframe precisamos cometer um ato revolucionário:

entender o que é um mainframe.

Não é:

“um computador velho.”

Também não é:

“um PC gigante.”

E definitivamente não é aquele monitor verde que Hollywood coloca em filmes quando alguém precisa invadir o Pentágono.

Precisamos compreender conceitos básicos:

IBM Z
   ↓
z/OS
   ↓
LPAR
   ↓
CPU / CP / zIIP
   ↓
MEMÓRIA
   ↓
STORAGE
   ↓
I/O

E principalmente:

por que essas máquinas existem?

Bancos.

Seguradoras.

Governos.

Companhias aéreas.

Cartões.

Grandes varejistas.

Ambientes que precisam processar volumes enormes com confiabilidade e previsibilidade.


🏛️ Dia 1 — Arquitetura

Aprenda:

IBM Z
LPAR
PR/SM
z/OS
JES
USS
STORAGE

Não tente decorar tudo.

Objetivo:

saber desenhar aproximadamente onde sua aplicação vive.


🖥️ Dias 2–4 — TSO e ISPF

Phileas Fogg entra pela primeira vez no terminal.

Tela:

---------------- ISPF PRIMARY OPTION MENU ----------------

0  Settings
1  View
2  Edit
3  Utilities
4  Foreground
5  Batch
6  Command

Passepartout pergunta:

— Monsieur, onde está o mouse?

Fogg:

— Não precisamos dele.

Passepartout começa a reconsiderar suas escolhas profissionais.

Aprenda:

TSO
ISPF
PF KEYS
COMMAND LINE
MEMBERS
LIBRARIES
EDIT
VIEW
BROWSE

E comandos fundamentais do editor:

I
D
R
C
M
A
B
CC
MM

Aqui começa a alfabetização mainframe.


📦 Dias 5–7 — Datasets

Antes de COBOL:

datasets.

Entenda:

PS
PDS
PDSE
MEMBER
RECFM
LRECL
BLKSIZE
DSORG
DISP

Você precisa conseguir olhar:

BELLACOSA.COBOL.SOURCE

e compreender que isso não é simplesmente uma “pasta”.


🧭 Dias 8–10 — Navegação

Pratique.

Crie datasets.

Crie members.

Edite.

Copie.

Renomeie.

Delete.

Liste.

Phileas Fogg olha para o relógio.

DAY 10
STATUS: ON SCHEDULE

Passepartout comemora.

Erro.

Ainda faltam 70 dias.


🚂 DIAS 11–20 — SUEZ

JCL: comprando a passagem do JOB

Agora precisamos fazer alguma coisa executar.

Entramos no território do:

JCL — Job Control Language

JCL não é exatamente uma linguagem de programação convencional.

É mais parecido com preencher documentos de imigração para convencer o z/OS a deixar seu programa trabalhar.


🎫 JOB

//FOGG80   JOB (ACCT),'AROUND WORLD',
//             CLASS=A,
//             MSGCLASS=X

Nosso passaporte.


🚂 EXEC

//STEP01 EXEC PGM=FOGGCOB

Nosso trem.


🧳 DD

//INPUT DD DSN=FOGG.WORLD.INPUT,DISP=SHR

Nossa bagagem.

Agora aprenda:

JOB
EXEC
DD
DSN
DISP
SPACE
DCB
SYSOUT
STEPLIB
SYSPRINT
SYSIN

🚦 JES2

O JOB é submetido.

SUBMIT

E desaparece.

Passepartout entra em pânico.

— Perdemos o programa!

Não.

Ele entrou no maravilhoso sistema ferroviário chamado:

JES2

Precisamos aprender:

INPUT
EXECUTION
OUTPUT
PURGE

E então:

SDSF

Aqui você aprende a investigar:

JOB STATUS
RC
SYSOUT
JESMSGLG
JESJCL
JESYSMSG

Primeira grande vitória:

MAXCC=0000

Fogg:

— Excelente.

Bellacosa:

— Calma.

Porque todo mainframeiro precisa aprender cedo:

MAXCC=0 significa que o JOB terminou; não significa que você fez a coisa certa.


🐘 DIAS 21–35 — BOMBAIM

COBOL: finalmente encontramos Grace Hopper no caminho

Chegamos à grande escala.

Quinze dias.

Agora COBOL.

Primeiro compreenda sua anatomia:

IDENTIFICATION DIVISION
ENVIRONMENT DIVISION
DATA DIVISION
PROCEDURE DIVISION

Não comece decorando comandos.

Entenda a arquitetura.


🪪 IDENTIFICATION DIVISION

IDENTIFICATION DIVISION.
PROGRAM-ID. FOGG80.

Quem sou eu?


🌍 ENVIRONMENT DIVISION

Onde vivo?

Com quais recursos trabalho?


📦 DATA DIVISION

Aqui está uma das grandes diferenças culturais do COBOL.

Dados são cidadãos de primeira classe.

Aprenda:

PIC X
PIC 9
PIC S9
V
COMP
COMP-3
88 LEVEL
REDEFINES
OCCURS
COPYBOOK

Exemplo:

01 WS-PASSENGER.
   05 WS-NAME       PIC X(30).
   05 WS-AGE        PIC 9(03).
   05 WS-BALANCE    PIC S9(9)V99 COMP-3.
   05 WS-STATUS     PIC X.
      88 ACTIVE     VALUE 'A'.

Não pule essa parte.

Quem não entende DATA DIVISION acaba passando metade da carreira perguntando por que tomou S0C7.


⚙️ PROCEDURE DIVISION

Agora fazemos coisas.

Aprenda:

MOVE
IF
EVALUATE
PERFORM
COMPUTE
ADD
SUBTRACT
MULTIPLY
DIVIDE
DISPLAY
STRING
UNSTRING
INSPECT

Depois:

OPEN
READ
WRITE
REWRITE
CLOSE

🔄 O coração do batch

Você precisa conseguir escrever sozinho algo parecido com:

OPEN
 ↓
READ
 ↓
VALIDATE
 ↓
PROCESS
 ↓
WRITE
 ↓
READ AGAIN
 ↓
CLOSE

Isso parece simples.

É simples.

E variações dessa arquitetura movimentaram quantidades absurdas de negócios durante décadas.


💥 Dias 31–35 — Aprenda a quebrar COBOL

Agora provoque erros.

Sim.

De propósito.

Crie situações que gerem problemas.

Investigue:

S0C7
S0C4
FILE STATUS
RETURN CODE

Use:

DISPLAY 'WS-VALUE=' WS-VALUE

Leia compile listing.

Entenda offsets.

Procure mensagens.

Porque aprender programação sem aprender debugging é como Phileas Fogg aprender a embarcar em navios sem aprender o que fazer quando o navio quebra.


🚢 DIAS 36–43 — CALCUTÁ

VSAM: os dados precisam morar em algum lugar

Agora entramos no universo dos arquivos corporativos.

Aprenda primeiro arquivos sequenciais.

Depois:

VSAM

Conceitos:

KSDS
ESDS
RRDS
LDS
VRRDS

Para começar, concentre-se principalmente no:

KSDS

Entenda:

KEY
RECORD
CI
CA
INDEX
DATA COMPONENT

Depois:

IDCAMS

Comandos:

DEFINE
DELETE
REPRO
LISTCAT

Agora seu COBOL começa a conversar com dados persistentes.


🛳️ DIAS 44–53 — HONG KONG

Db2: SQL entra na viagem

Chegamos ao banco relacional.

Aprenda SQL antes de complicar.

SELECT
INSERT
UPDATE
DELETE

Depois:

JOIN
GROUP BY
ORDER BY
SUBQUERY
INDEX
COMMIT
ROLLBACK

Agora coloque isso dentro de COBOL:

EXEC SQL
   SELECT BALANCE
     INTO :WS-BALANCE
     FROM CUSTOMER
    WHERE CUSTOMER_ID = :WS-ID
END-EXEC.

E imediatamente aprenda:

SQLCODE
SQLSTATE

Porque:

SQLCODE = 0

é maravilhoso.

SQLCODE = +100

conta outra história.

E:

SQLCODE < 0

é quando Passepartout começa a procurar o bote salva-vidas.


🧠 Entenda também

PLAN
PACKAGE
BIND
DBRM
HOST VARIABLE
CURSOR

Não precisa dominar administração Db2.

Nosso objetivo é:

programador COBOL capaz de utilizar Db2 conscientemente.


🇯🇵 DIAS 54–61 — YOKOHAMA

CICS: saímos do batch e entramos no mundo online

Até agora:

JOB
 ↓
PROCESSA
 ↓
TERMINA

Agora:

USUÁRIO
 ↓
TRANSAÇÃO
 ↓
CICS
 ↓
COBOL
 ↓
RESPOSTA

Mudamos de planeta.

Aprenda:

TRANSACTION
PROGRAM
TASK
TERMINAL
COMMAREA
CHANNEL
CONTAINER

Comandos básicos:

EXEC CICS RECEIVE
EXEC CICS SEND
EXEC CICS READ
EXEC CICS WRITE
EXEC CICS LINK
EXEC CICS XCTL
EXEC CICS RETURN

E jamais esqueça:

RESP
RESP2

🖥️ BMS

Conheça:

MAP
MAPSET
SEND MAP
RECEIVE MAP

Você não precisa tornar-se arqueólogo de telas verdes.

Mas precisa entender como aplicações tradicionais online funcionam.


🚨 Entenda a arquitetura

Comece a reconhecer:

TOR
AOR
FOR

e conceitos como:

TSQ
TDQ
PPT
PCT

Agora Phileas Fogg consegue executar batch durante a madrugada e transações durante o dia.

Está ficando perigoso.


🚂 DIAS 62–69 — SAN FRANCISCO

Segurança, Unix e o mainframe que ninguém mostra nos filmes

Agora apresentamos:

RACF

Não precisa virar administrador de segurança.

Mas precisa compreender:

USER
GROUP
RESOURCE
PROFILE
ACCESS
READ
UPDATE
CONTROL
ALTER

E principalmente:

SAF

Comece a compreender que segurança em z/OS não é simplesmente “login e senha”.


🐧 USS

Surpresa.

Existe Unix dentro do z/OS.

Passepartout:

— Linux?

Não.

Unix System Services.

Aprenda:

PATH
FILE
DIRECTORY
PERMISSION
SHELL
PROCESS

Experimente comandos familiares:

ls
cd
cat
grep
chmod

Agora aquela divisão mental:

MAINFRAME | MUNDO MODERNO

começa a desmoronar.

Como deveria.


🔧 Zowe + Git

Chegamos ao século XXI.

Conheça:

Zowe
VS Code
IBM Z Open Editor
Git
GitHub / GitLab

Aprenda o básico:

clone
branch
commit
merge
push
pull

COBOL pode perfeitamente participar de workflows modernos.

Não precisamos sacrificar cartões perfurados numa noite de lua cheia para compilar programa.


🌉 z/OS Connect e APIs

Agora faça a ponte:

MOBILE
   ↓
REST API
   ↓
z/OS CONNECT
   ↓
CICS
   ↓
COBOL
   ↓
DB2

E finalmente compreenda uma coisa fundamental:

modernização não significa necessariamente reescrever.

Às vezes significa integrar.


🗽 DIAS 70–77 — NOVA YORK

DevOps: Phileas Fogg automatiza a viagem

Estamos quase voltando para Londres.

Agora precisamos transformar conhecimento isolado em pipeline.

Conheça:

CI/CD
BUILD
TEST
PACKAGE
DEPLOY

Ferramentas e conceitos possíveis:

DBB
zAppBuild
Jenkins
GitHub Actions
GitLab CI
UrbanCode
Ansible
Zowe
z/OSMF

Não tente aprender profundamente todas.

Entenda:

o fluxo.

SOURCE
   ↓
GIT
   ↓
BUILD
   ↓
COMPILE
   ↓
TEST
   ↓
PACKAGE
   ↓
DEPLOY

🧪 Testes

Aprenda a pensar em:

UNIT TEST
COMPONENT TEST
INTEGRATION TEST
E2E

Conheça:

ZUnit
COBOL Check
Galasa

Mais importante que decorar ferramentas:

faça código testável.


🤖 IA entra no trem

Naturalmente precisamos conversar sobre IA.

Use IA para:

EXPLICAR CÓDIGO
GERAR TESTES
DOCUMENTAR
ANALISAR ERROS
CRIAR HIPÓTESES
EXPLICAR JCL
ENTENDER COPYBOOKS
SUGERIR REFACTORING

Mas lembre:

IA
   ↓
HIPÓTESE

não:

IA
   ↓
VERDADE ABSOLUTA

Compile.

Teste.

Valide.


🏁 DIAS 78–80 — ATLÂNTICO → LONDRES

A prova final

Phileas Fogg está voltando.

Passepartout olha para o calendário.

Três dias.

Agora não existe curso.

Não existe tutorial.

Não existe instrutor segurando sua mão.

Existe apenas uma especificação.


🎯 PROJETO FINAL — FOGG BANK

Construa uma pequena aplicação:

Cadastro e movimentação de clientes.

Ela deverá possuir:

COBOL
+
JCL
+
DATASET
+
VSAM ou Db2
+
CICS ou interface batch

Fluxo:

CLIENTE
   ↓
VALIDAÇÃO
   ↓
CONSULTA
   ↓
MOVIMENTAÇÃO
   ↓
ATUALIZAÇÃO
   ↓
RELATÓRIO

Depois coloque o source em Git.

Documente.

Teste.

Provoque erros.

Corrija.

Crie README.

Explique a arquitetura.

Se possível, exponha alguma funcionalidade como API.

Agora você possui algo muito mais importante que:

ASSISTI 80 HORAS DE CURSO

Você possui:

EU CONSTRUÍ ISTO.

🧭 O MAPA COMPLETO

Depois de 80 dias nossa viagem ficou assim:

                    🌍 MAINFRAME ROAD MAP

                         IBM Z
                           │
                         z/OS
                           │
              ┌────────────┴────────────┐
              │                         │
           TSO/ISPF                    USS
              │                         │
           DATASETS                  SHELL
              │
             JCL
              │
            JES2
              │
            SDSF
              │
            COBOL
        ┌──────┼───────┐
        │      │       │
      VSAM    Db2     CICS
        │      │       │
        └──────┼───────┘
               │
              RACF
               │
             APIs
               │
         z/OS Connect
               │
              Git
               │
            DevOps
               │
            Testing
               │
               IA

Agora existe uma coisa preciosa:

CONTEXTO.


🎓 O que você NÃO será depois de 80 dias

Vamos destruir uma promessa de marketing antes que ela nasça.

Depois de 80 dias você provavelmente não será:

SYSTEM PROGRAMMER
DBA DB2
CICS ADMIN
RACF SPECIALIST
STORAGE SPECIALIST
PERFORMANCE SPECIALIST
SMP/E WIZARD
ASSEMBLER JEDI

E está tudo bem.

Mainframe é um continente.

Não uma tecnologia.

Ninguém conhece tudo.


🧠 O que você PODE ser

Você pode conseguir olhar para:

JOB
 ↓
JCL
 ↓
COBOL
 ↓
CICS
 ↓
DB2

e compreender aproximadamente o caminho.

Pode receber:

S0C7

e não fugir pela janela.

Pode abrir SDSF.

Pode procurar o step.

Pode ler SYSOUT.

Pode compreender um programa COBOL.

Pode alterar.

Compilar.

Executar.

Investigar.

Testar.

E principalmente:

saber qual é a próxima pergunta.

Esse é um enorme avanço.


🎩 O relógio de Phileas Fogg

Londres.

Reform Club.

80º dia.

Os cavalheiros estão esperando.

Relógio:

20:44

Nenhum sinal.

20:45.

Porta fechada.

A aposta parece perdida.

Então:

20:45:57

A porta abre.

Phileas Fogg entra.

Passepartout atrás dele carrega um notebook.

Na tela:

FOGG80.COBOL
FOGG80.JCL
FOGG80.COPYLIB
FOGG80.TEST

Um cavalheiro pergunta:

— Então aprendeu mainframe?

Fogg responde:

— Não.

Silêncio.

— Como assim?

Ele coloca o chapéu sobre a mesa.

Aprendi o suficiente para compreender o tamanho daquilo que ainda preciso aprender.

O velho mainframeiro no fundo da sala sorri.

Porque essa talvez seja a primeira evidência de que Phileas Fogg realmente aprendeu alguma coisa.


☕ Epílogo — A aposta

Passepartout aproxima-se do terminal.

Submete o projeto final.

SUBMIT 'FOGG80.JCL(MOONJOB)'

Não.

Arquivo errado.

Fogg olha para ele.

Passepartout:

— Desculpe, monsieur.

Agora:

SUBMIT 'FOGG80.JCL(FINALJOB)'

JES2 recebe.

$HASP100 FINALJOB ON READER

Executando.

$HASP373 FINALJOB STARTED

Todos aguardam.

SDSF atualiza.

STEP010   RC 0000
STEP020   RC 0000
STEP030   RC 0000
STEP040   RC 0000

Finalmente:

$HASP395 FINALJOB ENDED

Fogg olha para o relógio.

Ainda dentro dos 80 dias.

Passepartout grita:

MAXCC=0000!

Champanhe.

Aplausos.

A aposta está ganha.

Então o instrutor Bellacosa aproxima-se lentamente.

Olha o relatório.

Franze a testa.

Pergunta:

— Fogg...

— Sim?

— O total deveria ser £20.000.

Na tela:

TOTAL = £200.000

Silêncio absoluto.

Fogg tira o paletó.

Senta diante do terminal.

Abre o source.

Passepartout prepara café.

Porque Phileas Fogg acaba de descobrir a última e mais importante etapa do Road Map Mainframe:

DIA 81 — DEBUG.

🎩🌍🚂🚢☕🦖

E essa viagem...

meu caro Padawan...

não termina em 80 dias.

//WORLD80 JOB (COBOL),'PHILEAS FOGG'
//STEP01  EXEC PGM=LEARN
//SYSOUT  DD SYSOUT=*

LEARNING IN PROGRESS...
DESTINATION: MAINFRAME
RETURN CODE: NEVER STOP
O que um jovem padawan deve aprender para ser um especialista na Stack Mainframe. Um caminho com inúmeras possibilidades, requer esforço e dedicação, porém os frutos condizem ao esforço. Descubra o z/OS, codifique em COBOL, crie queries no SQL DB2 e vá além. #ibm #mainframe #cobol #cics #db2 #jcl #sdsf #qsam #vsam #query #sql #etl #jobs #procs #jes2 #lpar #sysplex
 

sexta-feira, 12 de abril de 2024

Uma visão geral sobre o trabalhador de Mainframe

Equipe de desenvolvimento mainframe


Descubra a Stack MAINFRAME e veja o que necessita para ser um Desenvolvedor COBOL de Sucesso. Aprenda COBOL, há 65 anos revolucionando o mercado de informática.

quinta-feira, 11 de abril de 2024

sábado, 16 de março de 2024

🧾 JCL – Linha do Tempo Completa

 


🧾 JCL – Linha do Tempo Completa

Do cartão perfurado ao DevOps no z/OS



🧠 Antes do JCL (anos 1950 – início dos 60)

Contexto

  • Programas rodavam em batch puro, controlados manualmente.

  • Operadores plugavam cabos, montavam fitas, ajustavam switches.

  • Cada sistema tinha seu próprio “jeito” de rodar jobs.

📌 Problema:
Não existia uma linguagem padrão para dizer o que rodar, quando e com quais recursos.

👉 Solução da IBM: criar uma linguagem declarativa para controlar o sistema.


🟦 1964 – NASCE O JCL (OS/360)

Sistema: OS/360
Hardware: IBM System/360
Evento histórico: um único SO para toda a linha de hardware.

O que surge

  • JCL formalmente introduzido

  • Conceitos fundamentais:

    • //JOB

    • //EXEC

    • //DD

  • Sintaxe baseada em cartões perfurados

  • Colunas fixas, 80 caracteres, tolerância zero a erro

📌 Impacto

  • Pela primeira vez, o operador deixa de decidir tudo manualmente

  • O job descreve:

    • programa

    • datasets

    • dispositivos

    • prioridade

🧨 Easter Egg histórico

Fred Brooks (IBM) disse que JCL foi uma das linguagens mais difíceis já criadas —
mas impossível de abandonar.


🟨 1966–1971 – JCL no DOS/360 e OS/360 amadurece

Sistemas: DOS/360, OS/360 MFT/MVT

Evolução

  • Pequenas variações de JCL entre DOS e OS

  • Mais parâmetros em DD

  • Introdução de:

    • datasets temporários

    • concatenação

    • procedimentos simples

📌 Nota Bellacosa
Aqui nasce a primeira dor do mainframer:
👉 “Esse JCL roda no MVT mas não no DOS?”


🟧 1972–1974 – A Era do Virtual Storage (OS/VS → MVS)

Sistemas: OS/VS1, OS/VS2, depois MVS

O que muda no JCL

  • Nada quebra (compatibilidade total)

  • Mas o poder cresce:

    • mais steps

    • mais memória

    • mais jobs simultâneos

  • Procedures catalogadas se tornam padrão

  • JCL passa a ser infraestrutura crítica

📌 Marco invisível
O JCL deixa de ser “controle de job”
e vira linguagem de orquestração do datacenter.


🟥 Final dos anos 70 – JES2 / JES3

Subsistemas: JES2 e JES3

Evolução prática

  • JCL começa a dialogar mais com o spool

  • Controle refinado de:

    • SYSOUT

    • classes

    • prioridades

  • Ambientes multi-LPAR começam a surgir

🧠 Filosofia
JCL continua simples…
mas o ambiente em volta vira um monstro.


🟪 Anos 80 – Estabilidade Absoluta

Sistemas: MVS/XA, MVS/ESA

O que muda

  • Quase nada na sintaxe

  • Muitos novos parâmetros

  • JCL vira uma “linguagem fossilizada viva”

📌 Realidade
Um JCL de 1975 ainda roda.
Um COBOL também.
O estagiário não.


🟩 1995 – OS/390 (o JCL entra na era corporativa moderna)

Sistema: OS/390

Evolução

  • Consolidação:

    • MVS

    • JES

    • DFSMS

  • JCL passa a lidar fortemente com:

    • SMS

    • storage groups

    • políticas corporativas

📌 Mudança cultural
O JCL deixa de ser “do operador”
e vira ativo estratégico da empresa.


🟦 2000 – z/OS nasce (JCL entra no século XXI)

Sistema: z/OS 1.1

O que muda (sem quebrar nada)

  • Integração com:

    • Unix System Services (USS)

    • arquivos POSIX

  • JCL agora convive com:

    • shell scripts

    • Java

    • C/C++

  • Melhor controle condicional

📌 Importante
Nenhum “JCL 2.0”
Nenhuma revolução sintática
👉 só evolução silenciosa.


🟨 2005–2015 – JCL + Automação

Novidades

  • IF / THEN / ELSE / ENDIF no JCL

  • Mais lógica declarativa

  • Menos dependência de retorno via utilitários externos

📌 JCL começa a pensar
Não é programação…
mas já decide caminhos.


🟧 2016–2020 – JCL encontra o DevOps

Mudanças indiretas

  • JCL versionado em Git

  • Edição em VS Code (Z Open Editor)

  • Integração com pipelines

  • JCL analisado, validado, automatizado

🧠 Paradoxo
A linguagem mais antiga do datacenter
vira parte do pipeline moderno.


🟥 2020–2025 – JCL nos z/OS atuais (2.5, 3.x)

Situação atual

  • JCL continua:

    • estável

    • retrocompatível

    • crítico

  • Novos parâmetros continuam surgindo

  • Integração com:

    • Zowe

    • APIs

    • observabilidade

    • automação corporativa

📌 Verdade absoluta
Se o JCL parar,
o banco para.
O país sente.


🧭 Linha do tempo resumida

AnoSistemaEstado do JCL
1964OS/360JCL nasce
1974MVSJCL escala
1980sMVS/XA/ESAJCL estabiliza
1995OS/390JCL corporativo
2000z/OSJCL moderno
2010sz/OSJCL condicional
2020sz/OS 3.xJCL + DevOps

☕ Comentário final (Bellacosa Mode ON)

JCL não evoluiu para agradar desenvolvedores.
Evoluiu para não quebrar o mundo.

Enquanto linguagens vêm e vão,
o JCL permanece,
silencioso, feio, poderoso
e absolutamente indispensável.


sábado, 30 de setembro de 2023

🔥 JCL no z/OS 3.1 — o clássico definitivo no mainframe pós-híbrido

 

Bellacosa Mainframe apresenta JCL V3.1 Job Control Language

🔥 JCL no z/OS 3.1 — o clássico definitivo no mainframe pós-híbrido

 


📅 Datas importantes

  • Release (GA): setembro de 2023

  • Final de suporte IBM (EoS): 30 de setembro de 2028

O z/OS 3.1 inaugura a era sem versão “R”.
Não é V2Rx. É z/OS 3.x.
E o JCL? Continua lá, firme, como sempre.


🧬 Contexto histórico

O z/OS 3.1 nasce num momento simbólico:

  • Mainframe totalmente integrado ao mundo digital

  • Cloud híbrida consolidada

  • APIs e eventos como padrão

  • Observabilidade, automação, segurança contínua

  • Batch tratado como serviço corporativo crítico

E no centro disso tudo…

👉 o JCL segue intocado, provando que boa arquitetura não precisa ser reescrita.

Bellacosa resumiria assim:

“Mudou o número da versão.
O JCL nem piscou.”


JCL V3.1 Job Control Language

✨ O que há de novo no JCL no z/OS 3.1

Aqui está a verdade nua e crua:

❌ Não existe “novo JCL”
✅ Existe um JCL mais estratégico do que nunca

🆕 1. JCL como API operacional invisível

No z/OS 3.1:

  • Jobs são acionados por:

    • APIs REST

    • eventos

    • pipelines CI/CD

    • schedulers corporativos

  • O JCL vira o contrato final entre:

    • mundo distribuído

    • core transacional

👉 O job é o endpoint que não falha.


🆕 2. JES2 no nível máximo de maturidade

  • Escala absurda de jobs simultâneos

  • Spool altamente estável

  • Restart e recovery previsíveis

  • Integração total com automação e observabilidade

O operador deixou de “apagar incêndio”.
Agora ele governa processos.


🆕 3. DFSMS totalmente orientado a políticas

  • Storage praticamente autônomo

  • Menos parâmetros manuais no JCL

  • Datasets gigantes tratados naturalmente

  • Menos erro humano, mais inteligência sistêmica

O JCL fica mais limpo porque o sistema ficou mais esperto.


🔧 Melhorias percebidas no dia a dia

✔ Batch tratado como serviço 24x7
✔ Menos JCL “cheio de gambiarra”
✔ Menos tuning artesanal
✔ Mais padronização
✔ JCL versionado, auditado e governado

Nada mudou na sintaxe.
Tudo mudou na importância estratégica.


🥚 Easter Eggs (para mainframer raiz)

  • 🥚 JCL escrito nos anos 70 ainda roda no z/OS 3.1

  • 🥚 IEFBR14 segue vivo (e seguirá)

  • 🥚 Comentários em JCL mais antigos que o termo “cloud” 😅

  • 🥚 O erro campeão continua sendo:

    • RC ignorado

    • DISP mal planejado

    • dataset em uso em produção

👉 Mudam as gerações. O erro humano permanece.


💡 Dicas Bellacosa para JCL no z/OS 3.1

🔹 Trate JCL como ativo estratégico
🔹 Pense no job como serviço corporativo
🔹 Versione JCL como código
🔹 Use padrões claros de nomenclatura
🔹 Documente o porquê, não só o como

🔹 Sempre:

  • IF / THEN / ELSE

  • RC explícito

  • SYSOUT claro

  • comentários pensando em 10+ anos

Esse JCL vai sobreviver a você.
Escreva com respeito.


📈 Evolução do JCL até o z/OS 3.1

EraPapel do JCL
OS/360Controle batch
MVSAutomação
OS/390Base corporativa
z/OS V1.xOrquestração total
z/OS V2.xMundo híbrido
z/OS 3.1Fundação do core digital

👉 No z/OS 3.1, o JCL deixa de ser “legacy” oficialmente.
Ele vira infraestrutura histórica viva.


📜 Exemplo de JCL “cara de z/OS 3.1”

//BELL31 JOB (ACCT),'JCL z/OS 3.1', // CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID //* //* JOB EXPOTO COMO SERVIÇO CORPORATIVO //* DISPARADO POR API, EVENTO OU SCHEDULER //* //STEP01 EXEC PGM=COREBATCH //STEPLIB DD DSN=BELLACOSA.LOADLIB,DISP=SHR //SYSOUT DD SYSOUT=* //* //IF (STEP01.RC = 0) THEN //STEP02 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DELETE BELLACOSA.WORK.DATA SET MAXCC = 0 /* //ENDIF

💬 Comentário Bellacosa:

“Esse job pode ser chamado por um operador,
por um pipeline ou por uma API.
Ele não precisa saber. Ele só precisa entregar.”


🧠 Comentário final

O JCL no z/OS 3.1 é a prova definitiva de uma verdade que só mainframer entende:

🔥 Confiabilidade não se reescreve.
Ela se herda.

Enquanto o mundo corre atrás da próxima abstração,
o JCL continua garantindo que:

  • o banco feche

  • o governo processe

  • a indústria funcione

JCL não é passado.
JCL é a espinha dorsal silenciosa do presente e do futuro.

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...