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