Translate

segunda-feira, 14 de outubro de 2019

O Mistério dos Dois Dígitos : Como um Simples "00" Salvou Bancos Inteiros... e um "35" Fez Programadores Passarem Madrugadas Inteiras

 

Bellacosa Mainframe e o misterio dos 2 digitos

☕ Um Café no Bellacosa Mainframe

O Mistério dos Dois Dígitos

Como um Simples "00" Salvou Bancos Inteiros... e um "35" Fez Programadores Passarem Madrugadas Inteiras Procurando um Arquivo Fantasma

"Naquela noite, o operador jurava que o JOB estava perfeito. O JCL havia sido revisado três vezes. O COBOL compilava sem um único warning. Ainda assim, às 02h17 da madrugada, a impressora começou a cuspir páginas e mais páginas de mensagens de erro. O culpado? Dois pequenos caracteres que quase ninguém enxergava... o FILE STATUS."


Prólogo – O Caso dos Dois Caracteres

Existe um antigo ditado entre programadores veteranos de Mainframe:

"Nunca confie em um READ que você não verificou."

O iniciante normalmente ri.

"Mas o programa compilou..."

"Não deu ABEND..."

"O arquivo abriu..."

Até que chega o primeiro incidente em produção.

Aquele telefonema às três da manhã.

A folha de pagamento não terminou.

O fechamento bancário parou.

O faturamento ficou incompleto.

E, no centro de todo esse caos...

Estavam apenas dois caracteres.

00

Ou talvez...

35

Ou pior...

39

Bem-vindo ao universo dos COBOL File Status Codes, um dos recursos mais antigos, discretos e importantes de toda a programação Mainframe.

Prepare seu café.

Hoje vamos investigar um dos maiores mistérios do COBOL.


Capítulo 1 — O Detetive Invisível do COBOL

Imagine que cada operação realizada em um arquivo deixa uma pequena anotação escondida.

Você abre um arquivo.

O COBOL faz uma anotação.

Você lê um registro.

Outra anotação.

Você grava.

Mais uma.

Você fecha.

Outra.

Essas anotações recebem o nome de:

File Status Code

São apenas dois caracteres.

Mas contam exatamente o que aconteceu.

É como conversar com o sistema.

Você pergunta:

"Conseguiu abrir?"

Ele responde:

00

Você pergunta:

"Encontrou outro registro?"

Ele responde:

10

Você pergunta:

"Gravou?"

Ele responde:

22

Ou talvez...

39

Cada resposta possui um significado extremamente específico.


Os Semáforos do Mainframe

Costumo ensinar meus alunos usando uma analogia muito simples.

Imagine que o programa está dirigindo por uma avenida.

O File Status funciona exatamente como um semáforo.

🟢 Verde

Pode seguir.

00

🟡 Amarelo

Atenção.

Fim do arquivo.

10

🔴 Vermelho

Pare imediatamente.

Algo está errado.

22

35

39

A genialidade do COBOL é justamente essa.

Ele nunca esconde o resultado.

Sempre responde.

O erro acontece quando o programador simplesmente ignora a resposta.


Capítulo 2 — O Médico Particular dos Arquivos

Outra comparação excelente.

Imagine um hospital.

Cada arquivo é um paciente.

Após cada procedimento, os equipamentos mostram seus sinais vitais.

❤️ Pressão normal

00

😴 Atendimento encerrado

10

🚑 Paciente desapareceu

35

🩻 Exame incompatível

39

🧬 DNA duplicado

22

Ignorar o File Status é como desligar o monitor cardíaco da UTI.

Pode parecer que está tudo bem.

Até não estar mais.


Capítulo 3 — Onde mora o File Status?

Ele nasce logo na definição do arquivo.

SELECT CLIENTE
       ASSIGN TO ARQCLI
       ORGANIZATION IS INDEXED
       FILE STATUS IS WS-FS.

Perceba algo curioso.

O File Status não pertence ao registro.

Nem ao FD.

Nem ao arquivo físico.

Ele pertence à conversa entre o COBOL e o sistema operacional.

Depois criamos sua variável.

01 WS-FS PIC XX.

Dois caracteres.

Somente isso.

Mas carregando décadas de engenharia.


Capítulo 4 — O Primeiro Suspeito: Status 00

Existe um código que todo operador adora.

00

Ele significa:

Tudo ocorreu normalmente.

OPEN?

Funcionou.

READ?

Funcionou.

WRITE?

Funcionou.

REWRITE?

Funcionou.

DELETE?

Funcionou.

CLOSE?

Funcionou.

É praticamente o equivalente ao famoso:

"Missão cumprida."


Curiosidade Noir ☕

Nos grandes bancos da década de 1980 existiam operadores que praticamente decoravam dezenas de códigos de File Status.

Quando aparecia um "39", muitos já sabiam exatamente qual analista deveria ser acordado.

Era como médicos reconhecendo sintomas apenas olhando o paciente.


Capítulo 5 — O Código que Assusta os Iniciantes

10

EOF.

End Of File.

O curioso?

Não é erro.

Repita comigo.

Não é erro.

É apenas o COBOL dizendo:

"Acabaram os registros."

Imagine uma lista.

Maria

João

Carlos

Primeiro READ.

Maria
00

Segundo.

João
00

Terceiro.

Carlos
00

Quarto.

Não existe ninguém.

O COBOL responde:

10

Fim.

Hora de ir para casa.


Easter Egg nº 1 🕵️

Nos filmes noir dos anos 1950, o detetive frequentemente chegava ao fim de uma trilha e dizia:

"Não há mais pegadas."

O Status 10 faz exatamente isso.

Não encontrou erro.

Apenas não existem mais pistas.


Capítulo 6 — O Fantasma do Dataset Perdido

Poucos códigos causam tanto desespero quanto:

35

Arquivo inexistente.

Ou impossível de localizar.

É como chegar ao endereço de uma testemunha...

E descobrir que o prédio nunca existiu.

As causas?

Dataset não criado.

DD incorreto.

Catálogo inconsistente.

Typo no DSN.

Volume errado.

DISP inadequado.

Alias incorreto.

Até um simples "S" esquecido no nome do dataset pode provocar um 35.


História Real

Quantas horas já foram desperdiçadas porque alguém escreveu:

CLIENTE

Em vez de:

CLIENTES

Uma única letra.

Milhões de instruções executadas.

Zero registros processados.


Capítulo 7 — O Arquivo Disfarçado

Agora entra um dos meus favoritos.

39

Attribute Mismatch.

Imagine que você marca um encontro com uma bibliotecária.

Chega ao local.

Quem aparece?

Um piloto de avião.

Pessoa errada.

Lugar certo.

É exatamente isso.

Seu programa espera:

Arquivo Sequencial.

Mas encontra:

VSAM KSDS.

Ou espera:

FB 80

E recebe:

VB 256

Ou espera:

LRECL 100

Mas encontra:

LRECL 133

Tudo parece arquivo.

Mas não é o arquivo que o programa esperava.


Capítulo 8 — O Crime da Chave Duplicada

Status:

22

Imagine um cartório.

Já existe um CPF.

Você tenta cadastrar novamente.

Resposta?

Negado.

No VSAM acontece exatamente isso.

Você tenta gravar uma chave existente.

O sistema responde:

22

É uma proteção.

Sem ela, bancos duplicariam contas.

Hospitais criariam pacientes repetidos.

Companhias aéreas venderiam o mesmo assento várias vezes.


Curiosidade Histórica

Esse comportamento inspirou muitos bancos de dados relacionais.

Hoje chamamos isso de:

Primary Key Violation.

O conceito já existia muito antes no universo VSAM.


Capítulo 9 — O Grande Erro dos Padawans

Todo iniciante escreve algo parecido.

READ CLIENTE.

E continua.

Sem perguntar nada.

Sem verificar.

Sem conferir.

O profissional faz diferente.

READ CLIENTE

EVALUATE WS-FS

WHEN "00"

     PERFORM PROCESSA

WHEN "10"

     SET EOF TO TRUE

WHEN "35"

     PERFORM ERRO-ARQUIVO

WHEN OTHER

     PERFORM ERRO-GERAL

END-EVALUATE

Perceba.

O programa conversa.

Escuta.

Decide.

Age.


Easter Egg nº 2 ☕

George Boole jamais imaginou que, mais de um século depois, um programa COBOL estaria tomando decisões com apenas dois caracteres.

Cada EVALUATE é um pequeno tribunal onde o File Status presta depoimento.


Capítulo 10 — O JCL Também Pode Ser o Vilão

Um erro muito comum entre iniciantes é culpar o COBOL.

Mas muitas vezes...

O culpado é o JCL.

Veja alguns suspeitos clássicos:

  • DDNAME incorreto

  • DSN errado

  • DISP incompatível

  • RECFM diferente

  • BLKSIZE incorreto

  • LRECL incompatível

  • Dataset catalogado errado

  • VSAM definido incorretamente

O COBOL apenas informa.

Quem causou o problema pode ter sido outra camada do sistema.

É por isso que um bom desenvolvedor Mainframe precisa entender o ecossistema completo.


Passo a Passo para Tratar File Status Corretamente

Passo 1

Declare um campo FILE STATUS para cada arquivo.

Passo 2

Associe-o na cláusula SELECT.

Passo 3

Após cada OPEN, verifique o código retornado.

Passo 4

Após cada READ, valide se o retorno foi "00" ou "10".

Passo 5

Antes de cada WRITE ou REWRITE, trate condições como chave duplicada (22) e outros erros previstos.

Passo 6

Centralize o tratamento de erros em um único parágrafo ou módulo. Isso facilita manutenção, auditoria e padronização.

Passo 7

Registre (DISPLAY, logs ou ferramentas corporativas) os códigos inesperados. Em produção, essa informação pode economizar horas de investigação.


Dicas de Ouro do Bellacosa ☕

✅ Nunca compare o FILE STATUS como número; ele é um campo PIC XX.

✅ Utilize constantes ou níveis 88 para tornar o código mais legível.

01 WS-FS                PIC XX.
   88 FS-OK             VALUE "00".
   88 FS-EOF            VALUE "10".
   88 FS-DUPLICATE      VALUE "22".
   88 FS-NOT-FOUND      VALUE "35".

Assim, você poderá escrever:

IF FS-OK
    PERFORM PROCESSA
END-IF

Muito mais expressivo do que comparar literais espalhados pelo programa.

✅ Nunca assuma que um OPEN funcionou apenas porque o programa não sofreu ABEND.

✅ Em VSAM, familiarize-se também com códigos como 23 (registro não encontrado), 46 (nenhum registro disponível para leitura), 47 e outros específicos do ambiente.


Curiosidades que Pouca Gente Conhece

  • Existem dezenas de códigos de FILE STATUS, e alguns compiladores estendem a lista com retornos específicos para determinados ambientes.

  • Grandes organizações mantêm tabelas internas relacionando códigos de FILE STATUS a procedimentos operacionais, permitindo que equipes de suporte identifiquem rapidamente a origem de um incidente.

  • Em muitos projetos legados, a qualidade do tratamento de FILE STATUS é utilizada como um dos indicadores da maturidade do código.


O Mistério Nunca Foi o Arquivo...

Depois de décadas trabalhando com Mainframe, aprendemos uma lição curiosa.

Quase nunca o arquivo é o verdadeiro culpado.

Na maioria das vezes, o problema está em alguma expectativa incorreta:

  • o programa esperava um formato diferente;

  • o JCL apontava para outro dataset;

  • uma chave já existia;

  • o fim do arquivo foi interpretado como erro;

  • alguém esqueceu de verificar aqueles dois pequenos caracteres.

O FILE STATUS apenas revela a verdade.

Como um velho detetive das revistas pulp dos anos 1950, ele não faz acusações precipitadas. Apenas observa a cena, reúne as evidências e entrega o relatório.


Epílogo — Os Dois Dígitos que Movem o Mundo

Imagine um banco processando 120 milhões de transações durante a madrugada.

Cada OPEN.

Cada READ.

Cada WRITE.

Cada REWRITE.

Cada CLOSE.

Silenciosamente, o COBOL responde com dois caracteres.

Quase ninguém os vê.

Quase ninguém fala sobre eles.

Mas eles decidem se um pagamento será realizado, se um saldo será atualizado, se uma folha de pagamento chegará aos funcionários ou se um voo poderá ser embarcado.

No universo do Mainframe, heróis raramente usam capas. Eles usam listagens de compilação, dominam JCL, conhecem VSAM, conversam com Db2 e, acima de tudo, jamais ignoram a voz calma do FILE STATUS.

Porque, no fim das contas, o maior mistério nunca foi descobrir qual era o código retornado.

O verdadeiro mistério sempre foi entender o que o sistema estava tentando lhe dizer. E, quando você aprende a interpretar essa linguagem silenciosa, deixa de ser apenas um programador COBOL e passa a pensar como um verdadeiro investigador do Mainframe, capaz de desvendar enigmas antes mesmo que eles se transformem em incidentes de produção. Afinal, no Bellacosa Mainframe, toda madrugada guarda um caso, todo arquivo esconde uma história e, às vezes, os maiores segredos do IBM Z cabem em apenas dois pequenos caracteres.

Sem comentários:

Enviar um comentário

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...