| Bellacosa Mainframe solucionando abends em cobol |
| Bellacosa Mainframe e o caçador de abends |
Não entre em Pânico.
Supere seus desafios. A solução de ABENDS em mainframe pode ser desafiadora, intrigante, caótica e gratificante ao mesmo tempo, tudo junto e bem misturado. Por isso mantenha uma atitude positiva e uma mentalidade construtiva e esteja pronto para enfrentar qualquer problema que surgir em seu caminho.
Seja paciente e persistente e não desista facilmente. Seja criativo e flexível e não dependa de uma solução ou método, às vezes receitas de bolo pioram o problema. Canalize a colaboração e a cooperação e tente não trabalhar isoladamente.
Ao solucionar problemas, documente e compartilhe o conhecimento com os colegas, lembre-se sempre da máxima do velho deitado, digo velho ditado: uma mão lava a outra e aproveite a jornada do mainframe, participe de um projeto que há 70 anos vem tirando noite de sonos de homens e mulheres nos mais diversos Centros de Processamento de Dados do Mundo.
No pior cenário consulte o manual da linguagem, instalação e procure o Mestre dos Magos, sempre haverá um, mais próximo do que imagine.
ABEND
Relembrando, ABEND é uma situação anômala onde um programa mainframe (COBOL, PLI, Natural, REXX, Easytreve etc) tem um término anormal. Ou seja, termina com erro. A origem da palavra ABEND, que no Brasil virou sinônimo de erro e, ao mesmo tempo, verbo, surgiu da junção de duas palavras inglesas: ABNORMAL (anormal) END.
Muito em uso nos CPDS, agora chega de delongas e vamos ao nosso pequeno help na solução de alguns abends comuns em COBOL Mainframe, que poderão ser visualizados no SDSF, através do SPOOL do JOB, que indicara qual o step do JCL, o programa envolvido e o código do ABEND.
S0C1
Quais são as possíveis causas dos ABEND: S0C1?
O S0C1 é um erro associado a ambiente de I/O, muito normalmente associado a arquivos QSAM/VSAM e suas declarações no programa e JCL, e em algumas raras situações a chamadas CALL em subprogramas. A solução é relativamente simples e a correção é rápida, basta identificar o statemant do erro e verificar o tipo de Bug, conforme tabela abaixo:
1. Nome DD ausente ou escrito incorretamente.
2. Ler/gravar em DataSet não aberto.
3. Leia a saída aberta do DataSet.
4. Gravar na entrada aberta do DataSet.
5. Subprograma chamado não encontrado
S0C4
Quais são as possíveis causas dos ABEND: S0C4?
O SOC4 é um erro associado ao ambiente de I/O, Arrays e Tabelas internas, uso de variáveis computacional. Abaixo temos algumas causas comuns, muitas vezes é necessário o uso de DISPLAY para encontrar o erro com mais segurança, alguns comandos COBOL possuem captura de erro, utilize-os para antecipar e prever anomalias.
1. Instrução Select ausente (durante a compilação), verificar as declarações no Environment Division / Data Division, pode estarem com erro de grafia nome, verifique também a clausula D DD no JCL.
2. Em um array ou Tabela interna o Subscrito/índice está incorreto.
3. Variável computacional com valores incorretos, uma Exceção de proteção.
4. Falta de inicialização ou variável incorreta, ou seja, parâmetros ausentes na chamada CALL de subprograma.
5. Ler/gravar registros de dados em arquivo não aberto.
6. Gravar registros de dados de/para em arquivo não aberto.
S0C5
Quais são as possíveis causas dos ABEND: S0C5?
O SOC5 é um erro associado ao ambiente de I/O, Arrays e Tabelas internas. Abaixo temos algumas causas comuns, muitas vezes é necessário o uso de DISPLAY para encontrar o erro com mais segurança.
1. Subscrito/índice incorreto em Tabela interna ou Array,
2. Tentativa de Fechar um DataSet não aberto durante o processamento.
3. Problemas no PERFORM, saída conturbada ou erro de logica.
4. Tentativa de acesso à área de E/S (FD) antes do comando READ.
SOC7
Quais são as possíveis causas dos ABEND: S0C7?
Este abend pode ser ocasionado por variáveis numéricas, problemas de cálculos e confusão entre formatos alfanuméricos, alfabéticos e numéricos. Lembrando que toda variável de trabalho deve ser inicializada para evitar surpresas no decorrer do processamento, em algumas situações o mal uso do Índice na Tabela/Array resultará num S0C7
1. Operação numérica em dados não numéricos.
2. Variáveis não inicializadas ou com valores nulos.
3. Estouro de índice no uso de Tabela / Array.
SOCB
Quais são as possíveis causas dos ABEND: S0CB?
O abend S0CB normalmente esta associado com divisão, tanto no DIVIDY como no COMPUTE e informa que o divisor está com o valor zerado ou nulo.
1. Divisão por zero.
DICAS & SOLUÇÕES
Como solucionar um Abend SOC1 ?
Um Abend S0C1 ocorrerá se a CPU tentar executar um código binário que não seja uma instrução de máquina válida, por exemplo. Se você tentar executar dados.
Como solucionar um Abend SOC4 ?
Um S0C4 é uma violação de proteção de memória. Isso ocorre se um programa tentar acessar o armazenamento além das áreas atribuídas a ele. A famosa invasão de área, verifique suas tabelas e array, muitas vezes o culpado esta bem visível.
Como solucionar um Abend SOC7 ?
Em linhas bem gerais, não me xingue, basicamente necessitas corrigir os dados incorretos.
Muitas vezes o motivo do SOC7 é um item numérico não inicializado, lembre-se de usar o VALUE na declaração da variável, ou INITIALIZE no decorrer da execução. Examine essa possibilidade primeiro.
Muitas instalações fornecem um dump para ABENDs em tempo de execução (ele também pode ser gerado chamando algumas sub-rotinas ou serviços do sistema operacional através da linguagem assembly). Esses dumps fornecem o deslocamento da última instrução em que ocorreu o ABEND. Examine a compilação e produza a listagem XREF para obter o comando e o número da linha do código-fonte (Statement) neste deslocamento.
Então poderás olhar o código-fonte para caçar o bug, debugar para os íntimos. Lembrando que para capturar os dumps de tempo de execução, terás que definir alguns conjuntos de dados (SYSABOUT etc) no JCL.
Se nada disso for útil, use julgamento e DISPLAY para localizar a origem do erro, melhor solução sempre, porém lotaras o SPOOL e o analista de produção não gostará muito.
Algumas instalações podem ter ferramentas de depuração de programas em lote. Use-as se possível recomendo: o OMEGAMON e o APA.
DISPLAY
Utilize o comando DISPLAY para realizar uma trilha de DEBUG, assim pode seguir passo-a-passo por onde o ponteiro da execução passou, saberá até o momento anterior ao ABEND.
Utilize para ver o valor do antes e depois da variável após um cálculo, uma chamada CALL e etc.
Handling erros - Tratamento de erros
Deixe o COBOL trabalhar para ti, existem algumas soluções BUG TRAP, use código em seus programas que antecipe possíveis problemas de sistema ou de tempo de execução. Se você não incluir esse código, os dados ou arquivos de saída poderão ser corrompidos e o usuário poderá nem perceber que há um problema.
O código de tratamento de erros pode realizar ações como lidar com a situação, emitir uma mensagem ou interromper o programa. Você pode, por exemplo, criar rotinas de detecção de erros para erros de entrada de dados ou para erros conforme sua instalação os define.
Lembre-se sempre de prevenir, pensar, preparar-se e codificar uma mensagem de aviso é uma boa ideia, os famosos warnings de execução.
1. ON OVERFLOW em STRING e UNSTRING operações.
2. ON SIZE ERROR em operações aritméticas.
3. No tratamento de arquivos de Input e Output.
4. ON EXCEPTION ou ON OVERFLOW em chamadas CALL.
5. Criar rotinas para validar e tratar possíveis exceções.
Sem comentários:
Enviar um comentário