Espaço para quem está começando no mundo do mainframe.

Guia dos principais ABENDs COBOL: S0C7, S0C4, S806 e S322

Mais
2 horas 47 minutos atrás #133 por bopnet
ABEND é a abreviação de abnormal end, ou término anormal. Ele acontece quando um programa ou job não consegue continuar sua execução por causa de algum erro.
Entre os ABENDs mais conhecidos no desenvolvimento COBOL estão S0C7, S0C4, S806 e S322.
S0C7 — Data Exception
O S0C7 geralmente ocorre quando o programa tenta executar uma operação numérica utilizando um campo que contém dados inválidos.
Exemplos de causas:
  • Espaços em um campo numérico;
  • Caracteres alfabéticos em uma variável numérica;
  • Campo COMP-3 corrompido;
  • Layout incorreto;
  • Arquivo processado com copybook incompatível;
  • Inicialização inadequada de variáveis;
  • REDEFINES utilizado incorretamente.
Exemplo:
Code:
      01 WS-VALOR PIC 9(05).       MOVE "12A45" TO WS-VALOR       ADD 1 TO WS-VALOR
A investigação deve identificar qual campo participou da operação e verificar seu conteúdo no momento do erro.
S0C4 — Protection Exception
O S0C4 normalmente indica que o programa tentou acessar uma área de memória inválida ou não disponível.
Possíveis causas:
  • Índice ou subscrito fora dos limites de uma tabela;
  • CALL utilizando uma área de comunicação incorreta;
  • Parâmetros incompatíveis entre programa chamador e chamado;
  • Endereço inválido;
  • LINKAGE SECTION diferente da área recebida;
  • Tentativa de acessar um item além do tamanho disponível;
  • Programa chamado com versão incompatível.
Verifique principalmente tabelas com OCCURS, comandos SEARCH, subscritos, índices e parâmetros recebidos por meio da LINKAGE SECTION.
S806 — Module Not Found
O S806 acontece quando o sistema não consegue encontrar o programa solicitado pelo EXEC PGM ou por um CALL dinâmico.
Possíveis causas:
  • Nome do programa escrito incorretamente;
  • Load module não gerado;
  • Biblioteca de carga ausente na STEPLIB;
  • Programa não promovido para o ambiente;
  • Versão incorreta da biblioteca;
  • Load module apagado ou não catalogado;
  • JOBLIB ou STEPLIB apontando para outra biblioteca.
Exemplo:
Code:
//STEP01 EXEC PGM=PROG001 //STEPLIB DD DSN=EMPRESA.SISTEMA.LOADLIB,DISP=SHR
Confirme se o membro PROG001 está presente na biblioteca informada.
S322 — CPU Time Exceeded
O S322 indica que o job ultrapassou o limite de tempo permitido.
Possíveis causas:
  • Loop infinito;
  • Condição de saída nunca alcançada;
  • Arquivo muito maior que o esperado;
  • Processamento ineficiente;
  • Leitura repetida de grandes volumes;
  • Ausência de atualização de um contador;
  • Limite de tempo inadequado para o processamento.
Exemplo de risco de loop infinito:
Code:
      PERFORM UNTIL WS-FIM = "S"           READ ARQUIVO               AT END                   MOVE "S" TO WS-FIM           END-READ       END-PERFORM
Se o indicador de finalização não for atualizado corretamente, o programa poderá continuar executando indefinidamente.
Roteiro geral de investigação
  1. Localize o step que terminou em ABEND;
  2. Identifique o código apresentado no spool;
  3. Consulte as mensagens complementares;
  4. Localize o programa e o ponto aproximado da falha;
  5. Verifique o conteúdo das variáveis envolvidas;
  6. Confirme as versões dos programas e copybooks;
  7. Analise as características dos arquivos;
  8. Corrija a causa e execute um teste controlado.
Esses quatro ABENDs representam situações diferentes: dados inválidos, acesso indevido à memória, programa não localizado e tempo de execução excedido.
Qual desses ABENDs você encontra com mais frequência? Conte qual foi a causa mais difícil que você já precisou investigar.

COBOL is not DEAD!

Por favor Entrar ou Registrar para participar da conversa.

Powered by Fórum Kunena