☕🔥 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-RESPrecebe o código principalWS-RESP2traz 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:
| Categoria | Exemplos |
|---|---|
| Arquivo VSAM | NOTFND, DUPKEY, ENDFILE |
| Comunicação | TERMERR, SYSIDERR |
| Storage | NOSTG |
| Segurança | NOTAUTH |
| Queue | QZERO, QBUSY |
| MAP/BMS | MAPFAIL |
| Programas | PGMIDERR |
| Transações | TRANSIDERR |
| Syncpoint | ROLLEDBACK |
| InterSystem | ISCINVREQ |
☕ 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.