Translate

Mostrar mensagens com a etiqueta depuração. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta depuração. Mostrar todas as mensagens

terça-feira, 24 de agosto de 2021

ABEND sem Mistérios — Parte VI

 

Bellacosa Mainframe em abend sem misterios parte vi

☕ Um Café no Bellacosa Mainframe

ABEND sem Mistérios — Parte VI

O Grande Laboratório de ABENDs: Como Reproduzir, Investigar e Corrigir os Principais Erros do Mainframe Passo a Passo

"O conhecimento começa quando entendemos um ABEND. A experiência começa quando conseguimos reproduzi-lo. A maestria nasce quando sabemos evitá-lo."


Introdução

Até aqui, percorremos uma longa jornada.

Aprendemos:

  • o que é um ABEND;

  • como investigá-lo;

  • como analisar dumps;

  • como funciona a arquitetura do IBM Z;

  • como os grandes bancos utilizam observabilidade e Inteligência Artificial para prevenir incidentes.

Agora chegou a hora de colocar a mão na massa.

Existe uma diferença enorme entre ler sobre um ABEND e vê-lo acontecer diante dos seus olhos.

É exatamente assim que os grandes especialistas aprendem.

Eles não estudam apenas teoria.

Eles criam laboratórios.

Provocam erros.

Quebram programas.

Analisam dumps.

Corrigem.

Repetem.

Depois de algum tempo, passam a reconhecer um S0C7 da mesma forma que um médico reconhece uma doença comum.

Esta parte apresenta uma metodologia de treinamento que pode ser utilizada tanto em ambientes educacionais quanto em laboratórios corporativos.

O objetivo não é apenas reproduzir erros, mas compreender profundamente o motivo pelo qual eles acontecem.


Por que criar ABENDs de propósito?

Parece estranho.

Durante toda a carreira tentamos evitar erros.

Então por que provocá-los?

Porque um ambiente de testes é o lugar mais seguro para aprender.

Imagine um piloto de avião.

Antes de transportar passageiros ele treina:

  • falha hidráulica;

  • pane elétrica;

  • incêndio;

  • perda de motor.

No Mainframe fazemos o mesmo.

Treinamos quando ninguém está sendo afetado.


Como montar um laboratório de ABENDs

Você não precisa de um ambiente gigantesco.

Um pequeno sistema já é suficiente.

Por exemplo:

TSO

↓

ISPF

↓

Enterprise COBOL

↓

JCL

↓

SDSF

↓

VSAM

↓

Arquivos Sequenciais

Se houver CICS e Db2, melhor ainda.

Mas não são obrigatórios.


Regra número um

Nunca provoque ABENDs em Produção.

Parece óbvio.

Mas vale repetir.

Ambientes de treinamento existem exatamente para isso.


Exercício 1 — O primeiro S0C7

Objetivo:

Compreender Data Exception.

Crie uma variável:

01 WS-VALOR PIC 9(5).

Depois carregue:

12A45

Agora execute:

ADD 1 TO WS-VALOR.

Resultado esperado:

S0C7

O que observar?

Antes de corrigir.

Analise:

  • JESMSGLG;

  • SYSOUT;

  • CEEDUMP;

  • Offset;

  • Linha COBOL.

Depois responda:

Por que aconteceu?


Correção

Validação.

IF WS-VALOR NUMERIC
    ADD 1 TO WS-VALOR
ELSE
    DISPLAY 'DADO INVALIDO'
END-IF

Observe que o objetivo nunca foi "tirar o S0C7".

Foi impedir que dados inválidos chegassem ao cálculo.


Exercício 2 — O clássico S0C4

Monte uma tabela.

OCCURS 10 TIMES

Agora faça:

Índice = 25

Resultado.

Muito provavelmente.

S0C4

Investigação

Perguntas importantes.

O índice foi validado?

Quem alterou seu valor?

Existe PERFORM VARYING correto?

Existe INITIALIZE?


Exercício 3 — S013

Altere propositalmente:

  • LRECL

  • RECFM

Ou utilize um DDNAME incorreto.

Resultado.

IEC141I

S013

Agora investigue:

O problema está no COBOL?

Ou no JCL?

Essa diferença é fundamental.


Exercício 4 — S806

Compile normalmente.

Depois altere a STEPLIB.

Ou remova o Load Module.

Resultado.

S806

Aprendizado.

Nem todo ABEND vem do programa.


Exercício 5 — SB37

Crie um arquivo pequeno.

Depois grave milhares de registros.

O dataset ficará sem espaço.

Agora observe:

  • mensagens IEC;

  • SMS;

  • SYSOUT.


Exercício 6 — S322

Crie um loop infinito.

Exemplo.

PERFORM A
UNTIL 1 = 2

Configure TIME no JOB.

Resultado.

S322

Agora analise:

Quanto tempo demorou?

Como o sistema detectou?


Exercício 7 — FILE STATUS

Este talvez seja o exercício mais importante.

Leia um arquivo inexistente.

Sem verificar:

FILE STATUS

Depois repita verificando.

Perceba como muitos ABENDs desaparecem quando tratamos corretamente o retorno das operações.


Exercício 8 — SQLCODE

Mesmo sem gerar ABEND.

Faça:

SELECT

UPDATE

DELETE

ignorando SQLCODE.

Depois implemente tratamento.

É assim que sistemas robustos são construídos.


Exercício 9 — RESP no CICS

Execute comandos CICS.

Ignore RESP.

Depois implemente.

Você perceberá como muitos problemas são detectados antes de se transformarem em ASRA.


Exercício 10 — CEEDUMP

Escolha qualquer ABEND.

Agora tente responder apenas utilizando o CEEDUMP.

Onde ocorreu?

Qual variável estava errada?

Qual programa chamou aquele módulo?

Qual era o conteúdo da memória?

Esse exercício desenvolve enorme capacidade de investigação.


O Diário de ABENDs

Uma prática comum entre especialistas é manter um diário técnico.

Por exemplo.

DataABENDCausaSoluçãoComo evitar
10/07S0C7Campo inválidoValidaçãoIF NUMERIC
11/07S013LRECL erradoCorrigir JCLRevisão

Depois de alguns anos,

esse documento torna-se uma verdadeira biblioteca de conhecimento.


Aprendendo a formular hipóteses

Quando um incidente acontece,

não saia alterando o programa.

Primeiro formule hipóteses.

Por exemplo.

Hipótese 1

O arquivo veio corrompido.

Hipótese 2

O índice saiu do OCCURS.

Hipótese 3

O parâmetro foi passado incorretamente.

Depois procure evidências.

Esse é exatamente o método científico.


A regra de ouro da depuração

Nunca altere duas coisas ao mesmo tempo.

Imagine:

Você modifica:

  • JCL;

  • COBOL;

  • Copybook;

  • Parâmetros.

Depois funciona.

Qual alteração resolveu?

Você nunca saberá.

Faça mudanças pequenas.

Teste.

Observe.

Repita.


Simule incidentes completos

Depois de dominar os exercícios individuais,

crie cenários.

Exemplo.

O arquivo chega com layout errado.

Programa gera S0C7.

Batch seguinte não executa.

Relatório não é produzido.

Usuário abre chamado.

Agora reproduza toda a cadeia.

Essa abordagem aproxima o treinamento da realidade.


Automatizando laboratórios

Grandes empresas possuem ambientes capazes de:

  • executar centenas de testes;

  • gerar dumps automaticamente;

  • validar RC;

  • comparar resultados;

  • produzir relatórios.

Hoje isso pode ser integrado com:

  • Git;

  • Jenkins;

  • GitHub Actions;

  • IBM Dependency Based Build;

  • UrbanCode Deploy;

  • Ansible;

  • Zowe CLI.

Quanto mais automatizado o laboratório, mais rapidamente regressões são detectadas.


Como um mentor ensina ABENDs

Observe a diferença.

Professor comum:

"Esse é um S0C7."

Mentor experiente:

"Vamos provocar um S0C7, analisar o dump, descobrir a causa, corrigir o código e escrever um teste para garantir que ele nunca volte."

A segunda abordagem produz conhecimento duradouro.


O desafio dos grandes bancos

Os melhores programas não são aqueles que nunca falham.

São aqueles que:

  • detectam problemas rapidamente;

  • registram informações úteis;

  • facilitam o diagnóstico;

  • recuperam-se quando possível;

  • protegem os dados.

É exatamente esse pensamento que diferencia aplicações críticas.


Monte seu próprio catálogo

Ao longo da carreira, registre:

  • mensagens IEC;

  • mensagens IEF;

  • mensagens DFH;

  • SQLCODEs frequentes;

  • FILE STATUS;

  • RESP/RESP2;

  • ABENDs;

  • soluções.

Com o tempo você construirá um material que nenhum curso consegue fornecer.


Um roteiro de treinamento de 30 dias

Semana 1

  • S0C7

  • S0C4

  • S013

Semana 2

  • S806

  • SB37

  • S322

Semana 3

  • CEEDUMP

  • SYSMDUMP

  • JESMSGLG

  • JESYSMSG

Semana 4

  • IPCS

  • Fault Analyzer

  • Abend-AID

  • Root Cause Analysis

Ao final do mês, um Padawan terá experimentado dezenas de cenários que muitos profissionais só encontram após anos de trabalho.


Os cinco hábitos dos especialistas

  1. Nunca ignoram uma mensagem do sistema.

  2. Reproduzem o erro antes de corrigi-lo.

  3. Documentam tudo o que aprendem.

  4. Automatizam testes sempre que possível.

  5. Transformam cada incidente em conhecimento compartilhado.


Conclusão

Um ABEND não é um inimigo. Ele é um professor extremamente exigente.

Cada S0C7 ensina a validar dados. Cada S0C4 reforça a importância da memória e dos limites das tabelas. Cada S013 lembra que uma aplicação depende tanto do JCL quanto do código COBOL. Cada S806 mostra que uma compilação bem-sucedida não garante uma execução correta.

Os profissionais mais respeitados do mundo Mainframe não nasceram sabendo interpretar dumps ou localizar offsets em poucos minutos. Eles desenvolveram essa habilidade por meio de prática deliberada, repetindo investigações, registrando descobertas e aprendendo com cada incidente.

É exatamente por isso que um laboratório de ABENDs vale tanto. Nele, o erro deixa de representar um risco para o negócio e passa a ser uma ferramenta de aprendizado. E quando um Programador Padawan aprende a provocar, investigar, corrigir e prevenir os principais ABENDs em um ambiente controlado, ele chega muito mais preparado para enfrentar os desafios da produção.

No IBM Z, experiência não significa apenas tempo de carreira. Significa quantidade de problemas compreendidos, causas identificadas e conhecimento compartilhado. É assim que se forma um verdadeiro especialista em Mainframe.


quarta-feira, 26 de maio de 2021

ABEND sem Mistérios — Parte III

 

Bellacosa Mainframe em abend sem misterio parte III

☕ Um Café no Bellacosa Mainframe

ABEND sem Mistérios — Parte III

Como Pensam os Especialistas em Mainframe: Engenharia de Diagnóstico, Dumps, IPCS e a Arte de Encontrar a Causa Raiz

"Um bom programador corrige um ABEND. Um grande engenheiro descobre por que ele nunca deveria ter acontecido."


Introdução

Até aqui, aprendemos duas grandes lições.

Na Parte 1 entendemos:

  • o que é um ABEND;

  • como ele nasce;

  • quais são os principais códigos encontrados no dia a dia.

Na Parte 2 aprendemos:

  • como investigar;

  • quais mensagens analisar;

  • como utilizar JESMSGLG, JESYSMSG, CEEDUMP e SYSOUT.

Agora chegamos ao terceiro nível.

Aqui deixamos de ser apenas programadores COBOL.

Passamos a pensar como verdadeiros engenheiros de software para IBM Z.

É exatamente essa mudança de mentalidade que diferencia um desenvolvedor comum de um profissional extremamente valorizado pelos grandes bancos.


O maior erro durante uma investigação

Imagine que um programa termina com:

S0C7

O iniciante pensa:

"Preciso corrigir este S0C7."

O profissional pensa diferente.

"O S0C7 é apenas consequência.
O que gerou os dados inválidos?"

Essa diferença muda completamente a investigação.


O conceito de Causa Raiz

Todo problema possui duas causas.

Sintoma

É aquilo que aparece.

S0C4

S0C7

ASRA

U4038

Causa

É o verdadeiro problema.

Exemplo:

Arquivo recebido com dados inválidos

↓

Campo não validado

↓

ADD

↓

S0C7

O ABEND não começou no ADD.

Começou quando alguém permitiu que dados incorretos chegassem até ali.


O pensamento em camadas

Especialistas enxergam uma aplicação como diversas camadas.

Usuário

↓

Tela

↓

CICS

↓

Programa COBOL

↓

COPYBOOK

↓

Db2

↓

VSAM

↓

MQ

↓

JCL

↓

z/OS

O erro pode nascer em qualquer uma delas.


O princípio dos "Cinco Porquês"

Uma técnica extremamente utilizada em engenharia é o 5 Whys, criado dentro do Sistema Toyota de Produção.

Exemplo.

Programa terminou em S0C7.

Por quê?

Porque tentou somar caracteres.

Por quê?

Porque recebeu "ABCDE".

Por quê?

Porque o arquivo veio corrompido.

Por quê?

Porque o sistema fornecedor alterou o layout.

Por quê?

Porque não existia contrato de interface.

Agora encontramos a verdadeira causa.


O ABC da investigação

Todo incidente pode ser dividido em três perguntas.

A

O que aconteceu?

ABEND S0C4

B

Onde aconteceu?

Programa

Parágrafo

Offset

C

Por que aconteceu?

Essa é a parte difícil.


O conceito de Timeline

Um erro nunca aparece instantaneamente.

Existe uma sequência.

08:00

Arquivo recebido

↓

08:03

Programa inicia

↓

08:05

Registro inválido

↓

08:05

Campo carregado

↓

08:06

Cálculo

↓

08:06

S0C7

Perceba que o problema nasceu seis minutos antes do ABEND.


O poder do CEEDUMP

O CEEDUMP é praticamente uma fotografia.

Mas imagine que você possui uma fotografia de um acidente.

Ela mostra:

  • onde ocorreu;

  • quem estava presente;

  • posição dos veículos.

Mas ela não mostra o momento da colisão.

Por isso precisamos combinar várias evidências.


Entrando no mundo do IPCS

Poucos iniciantes conhecem esta ferramenta.

IPCS significa:

Interactive Problem Control System

É uma das ferramentas mais importantes do z/OS.

Ela permite analisar:

  • dumps completos;

  • memória;

  • registradores;

  • módulos carregados;

  • PSW;

  • TCB;

  • ASCB;

  • cadeias de controle do sistema.

Na prática,

é o laboratório forense do IBM Z.


O que um Dump realmente contém?

Muitos imaginam um dump como um arquivo de texto.

Na realidade ele contém praticamente toda a memória capturada.

Por exemplo:

Endereços

Buffers

Variáveis

Registradores

Storage

TCBs

RBs

LSQA

CSA

ECSA

PSA

Núcleo

É literalmente uma fotografia da memória.


O famoso PSW

O Program Status Word é uma das primeiras informações analisadas.

Ele responde:

  • onde a CPU estava;

  • em qual instrução;

  • qual modo de execução;

  • qual estado do processador.

Por isso um SysProg costuma perguntar:

"Qual é o PSW?"


Registradores: a mochila do processador

O IBM Z possui registradores gerais.

Imagine um pedreiro.

Antes de subir uma escada,

ele coloca ferramentas na mochila.

A CPU faz exatamente isso.

Antes de executar instruções,

ela guarda informações temporárias nos registradores.

Quando ocorre um ABEND,

essa mochila continua exatamente como estava.

É por isso que os registradores são tão importantes.


O papel da Language Environment (LE)

Praticamente todo programa COBOL moderno executa sobre o Language Environment.

Ele fornece:

  • gerenciamento de memória;

  • tratamento de exceções;

  • traceback;

  • serviços comuns;

  • interoperabilidade entre COBOL, C, C++ e PL/I.

Sem o LE, muitos diagnósticos seriam muito mais difíceis.


Quando um U4038 esconde outro erro

Muitos iniciantes acreditam que:

U4038

↓

Erro encontrado

Na realidade,

muitas vezes acontece isto.

S0C7

↓

Language Environment

↓

U4038

Ou seja,

o U4038 pode ser apenas uma "embalagem" para outro problema.

Sempre investigue além do código retornado.


O papel do Fault Analyzer

Hoje muitos bancos utilizam o IBM Fault Analyzer.

Ele transforma um dump complexo em algo muito mais amigável.

Por exemplo.

Em vez de mostrar:

Offset

00003A8F

Ele mostra:

Programa

CLIENTES

Linha

538

Campo

WS-SALDO

Economiza horas de investigação.


Abend-AID

Outra ferramenta extremamente popular.

Ela apresenta:

  • variáveis;

  • CALL Stack;

  • conteúdo dos registros;

  • SQLCA;

  • áreas de memória;

  • File Status;

  • tabelas.

É praticamente um "Google Maps" do dump.


O valor de um bom Log

Imagine um programa sem nenhum DISPLAY.

Agora imagine outro com mensagens como:

Iniciando cálculo...

Cliente 12345

Saldo encontrado

Calculando juros

Atualizando Db2

Commit realizado

Qual será mais fácil de investigar?

A resposta é óbvia.

Logs bem escritos reduzem drasticamente o tempo de diagnóstico.


Engenharia defensiva

Programadores experientes evitam ABENDs antes mesmo que eles aconteçam.

Como?

Validando tudo.

IF NUMERIC

IF FILE STATUS

IF SQLCODE

IF RESP

IF RESP2

IF LENGTH

IF EOF

IF RETURN-CODE

Quem valida dados produz programas muito mais robustos.


Os três níveis da depuração

Nível 1

Corrigir o erro.

Nível 2

Descobrir a causa.

Nível 3

Modificar o sistema para impedir que volte a acontecer.

Esse terceiro nível é onde nasce a excelência técnica.


O pensamento dos grandes bancos

Em ambientes críticos,

a pergunta raramente é:

"Quem escreveu o programa?"

A pergunta costuma ser:

"Por que nossos processos permitiram que isso chegasse à produção?"

Perceba a diferença.

Sai o culpado.

Entra a melhoria contínua.


O custo de um ABEND

Um único ABEND pode provocar:

  • atraso em milhares de transações;

  • indisponibilidade de canais digitais;

  • bloqueio de filas MQ;

  • rollback de atualizações no Db2;

  • atraso em processamentos batch;

  • impacto financeiro;

  • horas de investigação.

Por isso bancos investem tanto em observabilidade, monitoramento e prevenção.


Checklist profissional antes de corrigir um ABEND

Nunca altere o código antes de responder:

  • Qual foi o primeiro erro registrado?

  • O ABEND é causa ou consequência?

  • Houve mudança recente de layout, JCL ou copybook?

  • O problema é reproduzível?

  • Existe CEEDUMP ou SYSMDUMP?

  • O SQLCODE, FILE STATUS ou RESP indicavam falha antes do ABEND?

  • A correção elimina apenas o sintoma ou resolve a origem?


A evolução de um Programador Padawan

Todo profissional passa por estágios.

1

Tenho medo do ABEND.

↓

2

Consigo identificar o código.

↓

3

Aprendo a usar o SDSF.

↓

4

Entendo CEEDUMP.

↓

5

Interpreto mensagens do z/OS.

↓

6

Analiso offsets.

↓

7

Leio dumps.

↓

8

Descubro causas raiz.

↓

9

Evito novos ABENDs.

↓

10

Ensino outras pessoas.

É exatamente assim que surgem os especialistas.


Conclusão

A verdadeira maturidade técnica não está em decorar centenas de códigos de ABEND, mas em desenvolver uma forma estruturada de investigar problemas.

No IBM Z, praticamente nada acontece por acaso. Cada mensagem do JES2, cada registro do SDSF, cada CEEDUMP, cada offset e cada registrador contam parte da história. O papel do engenheiro é reunir essas peças até reconstruir a sequência completa dos acontecimentos.

Quando você deixa de perguntar "qual foi o ABEND?" e passa a perguntar "qual decisão, dado ou processo tornou esse ABEND inevitável?", seu modo de pensar muda para sempre.

É nesse momento que você deixa de ser apenas um programador COBOL e passa a enxergar o IBM Z como ele realmente é: um dos sistemas computacionais mais sofisticados, observáveis e resilientes já construídos. E essa é a habilidade que transforma um simples solucionador de erros em um verdadeiro especialista em Mainframe.

terça-feira, 30 de março de 2021

O Guia Definitivo para um Programador Padawan Entender o Que Realmente Acontece Quando um Programa "Morre" no IBM Z

 

Bellacosa Mainframe apresenta abends sem misterios

☕ Um Café no Bellacosa Mainframe

ABEND sem Mistérios

O Guia Definitivo para um Programador Padawan Entender o Que Realmente Acontece Quando um Programa "Morre" no IBM Z

"O primeiro ABEND assusta. O centésimo ensina. O milésimo transforma um programador comum em alguém que consegue conversar com o sistema operacional."


Introdução

Existe um momento na vida de praticamente todo programador COBOL em que ele termina seu código, compila sem erros, executa o JOB e...

***** ABEND *****

Silêncio.

O coração acelera.

A primeira reação costuma ser:

"Meu programa está errado."

Na maioria das vezes, essa conclusão está incompleta.

No mundo Mainframe, um ABEND (Abnormal End) não significa apenas que o programa possui um erro. Ele significa que alguma parte do ecossistema que envolve aquela execução encontrou uma condição considerada fatal.

E esse ecossistema é enorme.

Um programa COBOL nunca trabalha sozinho.

Ele depende de:

  • JCL

  • JES2

  • z/OS

  • Catálogo

  • Arquivos

  • CICS

  • Db2

  • VSAM

  • SDSF

  • Memória

  • Storage

  • Segurança (RACF)

  • Compilador

  • Link-Edit

  • Bibliotecas (STEPLIB)

Quando qualquer uma dessas peças falha, o programa pode terminar com um ABEND.

Entender isso é a primeira evolução de um Programador Padawan.


Afinal, o que significa ABEND?

ABEND é abreviação de:

ABnormal END

Ou seja:

O sistema encerrou aquela execução porque ela não podia continuar de maneira segura.

É importante observar que:

Nem todo erro produz um ABEND.

Um programa pode terminar normalmente retornando RC=08.

Outro pode gerar apenas mensagens.

Já um ABEND significa:

"A execução foi interrompida imediatamente."


Quem executa um programa COBOL?

Muitos iniciantes imaginam algo assim:

COBOL
 ↓
Executa

Na realidade, acontece algo muito maior.

JCL

↓

JES2

↓

Initiator

↓

Load Module

↓

Language Environment

↓

Programa COBOL

↓

Arquivos

↓

Db2

↓

VSAM

↓

CICS

↓

z/OS

O programa é apenas um pequeno participante.


O papel do JCL

O JCL funciona como um plano de execução.

Ele informa:

  • qual programa executar;

  • quais arquivos abrir;

  • quais bibliotecas usar;

  • memória necessária;

  • parâmetros;

  • classes;

  • datasets temporários.

Se o COBOL é o cozinheiro...

O JCL é a receita inteira.


O papel do JES2

O JES2 (Job Entry Subsystem 2) é o grande organizador do processamento batch.

Ele:

  • recebe JOBs;

  • coloca na fila;

  • controla prioridades;

  • envia para execução;

  • coleta SYSOUT;

  • registra mensagens;

  • devolve resultados.

Pense no JES2 como um enorme aeroporto.

Os JOBs são aviões.

O JES2 decide:

  • quem decola;

  • quando decola;

  • em qual pista;

  • para onde vai.


O papel do SDSF

Depois da execução, normalmente usamos o SDSF.

Ele não executa nada.

Ele apenas permite observar.

No SDSF encontramos:

  • JESMSGLG

  • JESJCL

  • JESYSMSG

  • SYSOUT

  • RC

  • ABEND

É o equivalente ao painel de monitoramento.


Como um ABEND nasce?

Imagine:

JCL

↓

Programa COBOL

↓

OPEN INPUT CLIENTES

↓

Arquivo inexistente

↓

IEC141I

↓

S013

Ou então:

MOVE "ABC"
TO WS-NUMERO PIC 9(5)

↓

S0C7

Cada tipo de erro produz um código diferente.

Esse código é o ABEND.


ABENDs do Sistema (Sxxxx)

Quando começam com:

S

Significa:

System Abend

O próprio z/OS detectou o problema.

Exemplos:

S0C4

S0C7

S013

SB37

ABENDs do Usuário (Uxxxx)

Quando aparecem:

U4038

U0999

Foram gerados pela aplicação.

Ou pelo Language Environment.


ABENDs do CICS

No CICS aparecem códigos de quatro letras:

ASRA

AICA

AEI9

São específicos do ambiente transacional.


Os ABENDs mais importantes


S0C1

Operation Exception

O processador tentou executar uma instrução inválida.

Pode ocorrer por:

  • módulo corrompido;

  • CALL incorreto;

  • programa não compilado corretamente;

  • desvio para área inválida.

É relativamente raro.


S0C4

Protection Exception

Provavelmente o ABEND mais famoso.

O programa tentou acessar memória proibida.

Exemplos:

  • ponteiro inválido;

  • tabela fora do OCCURS;

  • endereço inexistente;

  • parâmetro incorreto na LINKAGE.

Sempre que ouvir "Storage Violation", pense em S0C4.


S0C7

Data Exception

O favorito dos iniciantes.

O programa tentou fazer cálculo com dados inválidos.

Exemplo:

PIC 9(5)

conteúdo:

12A45

Ao executar:

ADD 1

Resultado:

S0C7

A maior causa costuma ser falta de validação de entrada.


S013

Erro de Dataset

Relaciona-se à abertura de arquivos.

Normalmente envolve:

  • DCB incompatível;

  • RECFM;

  • LRECL;

  • BLKSIZE;

  • modo de abertura incorreto;

  • DD errado.

É um ABEND de integração entre JCL e programa.


S222

O JOB foi cancelado manualmente.

Normalmente:

CANCEL JOB

Não significa erro da aplicação.


S322

Tempo de CPU excedido.

O programa entrou em loop.

Ou o TIME do JOB foi ultrapassado.

Sempre investigue:

PERFORM UNTIL

GO TO

READ

EOF

S806

Programa não encontrado.

As causas clássicas:

  • STEPLIB incorreta;

  • LOAD inexistente;

  • biblioteca errada;

  • módulo não linkeditado.

É um dos primeiros erros que um desenvolvedor encontra.


SB37

Sem espaço durante gravação.

O dataset atingiu seu limite.

Muito comum em SORTs.


SD37

Sem espaço por quantidade de extents.

Mesmo existindo espaço físico.

O dataset não consegue crescer.


SE37

Quantidade máxima de extensões atingida.

O administrador normalmente resolve ajustando a alocação.


B37

Erro semelhante aos anteriores.

Também relacionado à falta de espaço.

A diferença está na forma como o sistema detectou a limitação.

Na prática, todo Padawan deve associar:

B37

SB37

SD37

SE37

↓

Problemas de espaço em disco.

U4038

Muito comum em COBOL.

Normalmente produzido pelo Language Environment.

Pode esconder:

  • S0C7;

  • S0C4;

  • SQLCODE fatal;

  • erro interno.

Sempre consulte o CEEDUMP.

Nunca pare na primeira mensagem.


U0999

Erro definido pela própria aplicação.

É comum em grandes bancos.

Exemplo:

IF ERRO

DISPLAY "CLIENTE INVALIDO"

MOVE 999 TO RETURN-CODE

CALL ABEND

É um erro de negócio.


ASRA (CICS)

Equivalente ao S0C4 ou S0C7 dentro do CICS.

Na maioria das vezes há um ABEND de sistema escondido atrás dele.

É necessário verificar o dump do CICS.


AEI9

Tentativa de acessar recurso inexistente.

Pode envolver:

  • programa;

  • mapa BMS;

  • fila;

  • recurso não instalado.


AKCS

Erro relacionado ao ambiente CICS ou à configuração de recursos e segurança. Costuma indicar inconsistências operacionais que exigem análise das mensagens associadas e da definição do recurso.


APCT

Programa não encontrado no CICS.

Equivale ao S806 do ambiente batch.

Verifique:

  • PPT;

  • DFHRPL;

  • módulo.


AICA

Loop infinito.

O CICS cancelou a transação.

É o equivalente do:

S322

Só que dentro do CICS.


ATNI

A transação solicitada não está instalada ou habilitada.

Verifique:

  • PCT;

  • nome da transação;

  • instalação dos recursos.


AEYD

Problemas relacionados ao acesso ou ao estado de recursos do CICS (como filas, arquivos ou outros objetos), normalmente indicando que o recurso esperado não está disponível ou não pode ser utilizado da forma solicitada. A mensagem detalhada do CICS complementa o diagnóstico.


Como investigar um ABEND?

Uma sequência bastante utilizada por profissionais experientes é:

1
Qual é o ABEND?

↓

2
É System?
É User?
É CICS?

↓

3
Verificar JESYSMSG

↓

4
Verificar JESMSGLG

↓

5
Verificar SYSOUT

↓

6
Existe CEEDUMP?

↓

7
Existe SYSMDUMP?

↓

8
Analisar última instrução executada

↓

9
Conferir JCL

↓

10
Reproduzir o problema

Essa disciplina evita "corrigir" o sintoma sem encontrar a causa.


Dicas de ouro para um Padawan

  • Leia a primeira mensagem de erro, não apenas a última. Muitas vezes ela explica a causa antes do ABEND.

  • Aprenda a navegar no SDSF. JESMSGLG, JESYSMSG e SYSOUT contam a história da execução.

  • Conheça os utilitários do compilador e do Language Environment. CEEDUMP, SYSMDUMP e IPCS são aliados valiosos.

  • Não altere código antes de entender o erro. Corrigir por tentativa e erro pode esconder problemas mais sérios.

  • Entenda o contexto. Um S806 aponta para bibliotecas; um S013 para JCL e datasets; um S0C7 para dados; um S0C4 para memória. O código do ABEND já indica a direção da investigação.

  • Mantenha um caderno de ABENDs. Profissionais experientes criam seu próprio catálogo de erros e soluções ao longo da carreira.


Curiosidades

  • Muitos bancos possuem verdadeiras "enciclopédias" internas de ABENDs, acumuladas ao longo de décadas.

  • Alguns ABENDs praticamente desapareceram com compiladores modernos, enquanto outros continuam comuns porque dependem de erros de lógica ou configuração.

  • Um mesmo problema de negócio pode gerar ABENDs diferentes dependendo se a execução ocorre em batch, CICS ou sob o Language Environment.

  • Desenvolvedores experientes frequentemente identificam a causa provável apenas ao ouvir um código como S0C7 ou S806, antes mesmo de abrir o dump.


Conclusão

O maior erro de um iniciante é imaginar que um ABEND representa apenas um defeito no programa COBOL.

Na realidade, um ABEND é uma mensagem do ecossistema IBM Z. Ele informa que alguma camada — aplicação, JCL, compilador, Language Environment, CICS, JES2, arquivos, armazenamento ou o próprio z/OS — encontrou uma condição que impediu a continuidade segura da execução.

Aprender a interpretar esses códigos é um divisor de águas. O programador deixa de ser apenas alguém que escreve COBOL e passa a compreender como o sistema operacional, o ambiente batch e o ambiente transacional trabalham em conjunto.

Como todo Padawan descobre cedo ou tarde: escrever o programa é apenas parte do trabalho. O verdadeiro domínio começa quando se entende por que ele executa, por que falha e como o IBM Z revela exatamente onde procurar a causa.