Translate

sexta-feira, 16 de agosto de 2013

☕🔥 EIBRESP no CICS — O “DNA” dos Erros e Respostas do Mainframe

 



☕🔥 EIBRESP no CICS — O “DNA” dos Erros e Respostas do Mainframe

No universo CICS, existe uma verdade absoluta:

“Se você não trata RESP e RESP2… o CICS tratará você.”

O campo EIBRESP é um dos mecanismos mais importantes do ambiente transacional IBM Mainframe.

Ele informa:

  • se o comando executou corretamente

  • qual erro ocorreu

  • qual condição excepcional aconteceu

  • se houve problema de terminal

  • erro de VSAM

  • problema de comunicação

  • rollback

  • timeout

  • lock

  • storage

  • autorização

  • spool

  • task

  • map

  • TSQ

  • TDQ

  • intersystem

  • e dezenas de outros cenários


☕ O que é EIBRESP?

O EIBRESP pertence ao:

EXEC CICS HANDLE CONDITION

e principalmente ao:

RESP()
RESP2()

Exemplo clássico:

EXEC CICS READ
     FILE('CLIENTE')
     INTO(WS-REGISTRO)
     RIDFLD(WS-CHAVE)
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

Após o comando:

  • WS-RESP recebe o código principal

  • WS-RESP2 traz detalhes adicionais


☕ Por que isso é tão importante?

Porque no CICS:

Nem todo erro gera ABEND.

Na verdade:

  • a maioria dos problemas retorna EIBRESP

  • e o programa CONTINUA

Ou seja:

se você não tratar…

o sistema segue em frente silenciosamente.

Isso é perigosíssimo.


☕ Exemplo clássico de desastre

Imagine:

EXEC CICS READ FILE('CLIENTE')
END-EXEC

Registro não existe.

O CICS retorna:

RESP = 13 (NOTFND)

Mas o programador ignorou.

Resultado:

  • dados inválidos

  • tela lixo

  • cálculos incorretos

  • SQL errado

  • corrupção lógica

Sem abend.
Sem dump.
Sem aviso.

O erro fica “fantasma”.


☕ Arquitetura Interna do EIB

O EIB é:

EXEC Interface Block

Área automática criada pelo CICS para cada task.

Contém:

  • EIBRESP

  • EIBRESP2

  • EIBTRNID

  • EIBTASKN

  • EIBTIME

  • EIBDATE

  • EIBAID

  • EIBCALEN

  • EIBFN

  • etc.

É literalmente o “contexto vivo” da transação.


☕ O fluxo REAL do CICS

Internamente:

Programa envia comando EXEC CICS
↓
Translator converte para CALL DFHEI1
↓
Kernel EXEC Interface processa
↓
Resource Manager executa
↓
Retorno é gravado em EIBRESP
↓
Programa decide o que fazer

Ou seja:

EIBRESP é praticamente o “status code” do kernel CICS.


☕ As categorias dos EIBRESP

Os códigos podem ser agrupados em:

CategoriaExemplos
Arquivo VSAMNOTFND, DUPKEY, ENDFILE
ComunicaçãoTERMERR, SYSIDERR
StorageNOSTG
SegurançaNOTAUTH
QueueQZERO, QBUSY
MAP/BMSMAPFAIL
ProgramasPGMIDERR
TransaçõesTRANSIDERR
SyncpointROLLEDBACK
InterSystemISCINVREQ

☕ Os códigos MAIS IMPORTANTES do mundo real


🔥 01 — ERROR

Erro genérico.

Normalmente significa:

  • comando falhou

  • condição inesperada

  • sem tratamento específico

Exemplo:

IF WS-RESP = DFHRESP(ERROR)

Curiosidade:

Muitos dumps antigos de CICS começam aqui.


🔥 13 — NOTFND

O mais famoso de todos.

Registro não encontrado.

Exemplo:

EXEC CICS READ
     FILE('CLIENTE')
     RIDFLD(WS-ID)
     RESP(WS-RESP)
END-EXEC

Se chave não existir:

RESP = 13

☕ Analogia real

É o equivalente mainframe de:

SELECT * FROM TABELA
WHERE ID=999

Sem linhas retornadas.


☕ Dica profissional

TODO READ deveria tratar:

EVALUATE WS-RESP
   WHEN DFHRESP(NORMAL)
      CONTINUE

   WHEN DFHRESP(NOTFND)
      MOVE 'N' TO WS-EXISTE

   WHEN OTHER
      PERFORM 9000-ERRO
END-EVALUATE

🔥 14 — DUPREC

Registro duplicado.

Muito comum em ESDS/RRDS.


🔥 15 — DUPKEY

Chave duplicada no KSDS.

Clássico de cadastro.

Exemplo:

EXEC CICS WRITE
     FILE('CLIENTE')

Tentou inserir chave já existente.


☕ Curiosidade

Em muitos bancos:

  • o COBOL captura DUPKEY

  • e transforma em mensagem amigável:

CLIENTE JÁ CADASTRADO

Sem o usuário perceber que foi um erro VSAM.


🔥 16 — INVREQ

“Invalid Request”.

Talvez o erro MAIS traiçoeiro do CICS.

Significa:

“Você pediu algo inválido para ESTE contexto.”

Exemplos:

  • READ sem arquivo aberto

  • START inválido

  • LINK incorreto

  • COMMAREA errada

  • comando proibido


☕ Easter Egg técnico

Grande parte dos:

AEI*

internamente começa com INVREQ.


🔥 17 — IOERR

Erro físico/lógico de I/O.

Pode indicar:

  • VSAM corrompido

  • CI quebrado

  • erro disco

  • problema buffer

  • catálogo inconsistente

Quando aparece:

⚠️ operadores começam a ficar nervosos.


🔥 18 — NOSPACE

Sem espaço.

Pode ocorrer em:

  • TSQ

  • TDQ

  • datasets

  • spool

  • buffers

Muito comum em ambientes mal dimensionados.


🔥 22 — LENGERR

Erro de tamanho.

Lenda absoluta do CICS.

Exemplo clássico:

EXEC CICS RECEIVE
     MAP('TELA1')
     INTO(WS-AREA-100)
END-EXEC

Mas o mapa possui 120 bytes.

Boom:

LENGERR

☕ O terror do COBOL antigo

Copys desatualizadas.

O mapa mudou.
O programa não recompilou.

Resultado:

RESP=22

🔥 25 — QBUSY

Queue ocupada.

Muito comum em concorrência pesada.


🔥 27 — PGMIDERR

Programa não encontrado.

Causas:

  • PPT errado

  • programa não instalado

  • nome incorreto

  • loadlib ausente

Exemplo:

EXEC CICS LINK
     PROGRAM('PGMXYZ')

Se não existir:

PGMIDERR

☕ Curiosidade histórica

Nos anos 80:

PGMIDERR era um dos erros mais comuns em produção noturna.

Especialmente após promotes manuais.


🔥 28 — TRANSIDERR

Transação inexistente.

Exemplo:

EXEC CICS START
     TRANSID('ABCD')

Se não existir no PCT:

TRANSIDERR

🔥 29 — ENDDATA

Fim de dados.

Muito comum em:

  • TSQ

  • TDQ

  • browse

Equivalente ao EOF lógico.


🔥 36 — MAPFAIL

Talvez o mais famoso do BMS.

Ocorre quando:

  • usuário pressionou ENTER sem dados

  • MDT desligado

  • campo vazio

  • RECEIVE não trouxe informação


☕ Exemplo REAL

Usuário entra na tela:

CPF: ________

Pressiona ENTER vazio.

CICS:

MAPFAIL

☕ Dica profissional importantíssima

Nunca trate MAPFAIL como erro fatal.

É fluxo normal de tela.


🔥 40 — OVERFLOW

Overflow de armazenamento/dados.

Pode ocorrer em:

  • TSQ

  • COMMAREA

  • buffers


🔥 42 — NOSTG

Sem storage.

Extremamente sério.

O CICS está sem memória suficiente.

Operações podem começar a degradar rapidamente.


☕ Bastidores

Quando NOSTG aparece em sequência:

  • SOS condition

  • short-on-storage

  • risco de região cair

É situação crítica.


🔥 44 — QIDERR

Queue inexistente.

Muito comum em TSQ/TDQ.


🔥 53 — SYSIDERR

Erro de sistema remoto.

Clássico em:

  • MRO

  • ISC

  • IPIC

  • APPC

O sistema remoto:

  • caiu

  • não respondeu

  • não existe

  • sessão falhou


🔥 70 — NOTAUTH

Falha de autorização.

O RACF disse:

NO.

☕ Integração CICS + RACF

Aqui ocorre:

  • verificação de transação

  • FILE

  • TDQ

  • TSQ

  • PROGRAM

  • SURROGAT

  • resources


🔥 73 — WRONGSTAT

Estado inválido.

Muito comum em sessões/APPC.


🔥 76 — CCERROR

Erro de controle de comunicação.


🔥 77 — MAPERROR

Erro estrutural de mapa.

Diferente de MAPFAIL.

MAPERROR normalmente significa:

  • definição inconsistente

  • estrutura inválida

  • problema BMS


🔥 80 — NOSPOOL

Sem spool.

Muito comum em ambientes JES saturados.


🔥 81 — TERMERR

Erro terminal/dispositivo.

Pode indicar:

  • sessão caiu

  • VTAM problemático

  • LU desconectada

  • timeout terminal


🔥 82 — ROLLEDBACK

Rollback executado.

Um dos mais importantes do mundo transacional.

Significa:

SUAS ALTERAÇÕES FORAM DESFEITAS

☕ Cenário clássico

UPDATE CONTA A
UPDATE CONTA B
ERRO NO FINAL
SYNCPOINT ROLLBACK

CICS:

ROLLEDBACK

🔥 84 — DISABLED

Recurso desabilitado.

Pode ser:

  • FILE

  • TRANSACTION

  • TERMINAL

  • PROGRAM

  • CONNECTION


☕ A diferença entre RESP e RESP2

RESP:

erro genérico

RESP2:

detalhamento interno

Exemplo:

RESP  = INVREQ
RESP2 = 8

Cada RESP2 possui significado específico.

É aí que mora o troubleshooting avançado.


☕ Exemplo profissional completo

EXEC CICS READ
     FILE('CLIENTE')
     RIDFLD(WS-CHAVE)
     INTO(WS-REG)
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

EVALUATE WS-RESP

   WHEN DFHRESP(NORMAL)
      CONTINUE

   WHEN DFHRESP(NOTFND)
      MOVE 'CLIENTE INEXISTENTE'
        TO WS-MSG

   WHEN DFHRESP(NOTAUTH)
      MOVE 'SEM AUTORIZACAO'
        TO WS-MSG

   WHEN OTHER
      DISPLAY 'RESP=' WS-RESP
      DISPLAY 'RESP2=' WS-RESP2
      PERFORM 9999-ABEND

END-EVALUATE

☕ Dica de arquiteto CICS

Os melhores sistemas enterprise:

✅ tratam TODOS os RESP
✅ logam RESP2
✅ possuem tabelas de tradução
✅ transformam erro técnico em mensagem funcional
✅ evitam abends desnecessários


☕ Curiosidade histórica

Antes do uso massivo de:

RESP()

muitos programas dependiam de:

HANDLE CONDITION

Isso tornava o fluxo:

  • difícil de rastrear

  • cheio de GO TO

  • quase impossível de debugar

RESP revolucionou o tratamento moderno.


☕ Easter Egg Mainframe

Veteranos conseguem identificar problemas olhando apenas:

AEI9
AEY9
ASRA
MAPFAIL
INVREQ
PGMIDERR

É quase uma linguagem secreta do CICS.


☕ Regra de ouro do CICS

“O comando EXEC CICS nunca deve ser confiado cegamente.”

Sempre:

  • RESP

  • RESP2

  • HANDLE CONDITION

  • HANDLE ABEND

Porque no mundo transacional:

o programa pode continuar funcionando…

mesmo completamente errado.

Sem comentários:

Enviar um comentário