☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta cics vsam. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta cics vsam. Mostrar todas as mensagens

segunda-feira, 8 de dezembro de 2025

💥 SEU COBOL NÃO É LEGADO — É UM MOTOR TRANSACIONAL DE GUERRA: O Guia Definitivo de CICS TS no IBM z17 para Quem Quer Dominar Produção

 

Bellacosa Mainframe domine o CICS TS

💥 SEU COBOL NÃO É LEGADO — É UM MOTOR TRANSACIONAL DE GUERRA: O Guia Definitivo de CICS TS no IBM z17 para Quem Quer Dominar Produção

Se você ainda trata CICS como “aquele negócio antigo que roda COBOL”, está deixando dinheiro — e poder — na mesa.

O CICS TS (Customer Information Control System – Transaction Server) não é passado.
Ele é o motor invisível que sustenta bancos, seguros, governos e bilhões de transações por dia — agora turbinado no IBM z17.

E aqui vai o ponto que poucos entendem:

👉 CICS não executa programas. Ele orquestra negócios em tempo real com consistência absoluta.

Este artigo é um mergulho direto — técnico, prático e provocativo — para quem já vive de COBOL e quer ir além do “funciona”.


🏛️ Origem: Quando tudo começou (e por que ainda domina)

O CICS nasceu nos anos 60/70 dentro da IBM para resolver um problema brutal:

💥 Processar milhares de transações simultâneas com integridade garantida

Na época:

  • Bancos migravam de batch para online
  • Terminais 3270 surgiam
  • Usuários queriam resposta imediata

O resultado?

🔥 Nasceu o monitor transacional mais robusto da história

E ele evoluiu:

  • MVS → z/OS
  • SNA → TCP/IP
  • 3270 → APIs REST
  • COBOL → integração com Java, Node, APIs

Hoje, no IBM z17, o CICS é:

👉 Cloud-ready
👉 API-driven
👉 Integrado com IA e automação


⚙️ O que é CICS TS de verdade (sem romantismo)

CICS é:

👉 Um Transaction Processing Monitor (TP Monitor)
👉 Um gerenciador de recursos
👉 Um coordenador de consistência

Mas principalmente:

💥 Um orquestrador de Units of Work


🧠 Conceitos que você NÃO pode confundir

🔹 Transaction vs Task vs Unit of Work

ConceitoO que é
TransactionPedido do usuário
TaskExecução da transaction
Unit of WorkConjunto atômico de operações

👉 Regra de ouro:

Falhou antes do commit? Tudo volta. SEMPRE.


💣 Deadlock (o clássico)

Dois programas esperando recursos um do outro:

💥 Travou tudo.

O CICS resolve:

  • Detecta
  • Aborta uma task
  • Faz backout
  • Libera recursos

👉 Isso acontece silenciosamente — e salva sistemas inteiros.


🏗️ Arquitetura CICS (visão de quem trabalha em produção)

🧩 Componentes principais

  • Region → Address space no z/OS
  • Programs → COBOL, PL/I etc.
  • Resources → arquivos, filas, conexões
  • CSD → definições
  • Catalogs → estado do sistema

🚀 Como uma região nasce

Você não “abre” um CICS.

Você invoca:

// Started Task
S CICSTS

ou

// Batch
EXEC PGM=DFHSIP

👉 Isso sobe uma região completa, não só um programa.


🌐 Comunicação: onde o CICS virou moderno

🔹 MRO (Multiregion Operation)

👉 Comunicação interna (mesmo sysplex)

🔹 ISC (Intersystem Communication)

👉 Comunicação entre hosts

🔹 CTG (CICS Transaction Gateway)

👉 Porta de entrada para o mundo moderno

  • Java
  • APIs
  • Web apps

👉 Aqui o COBOL vira backend de API.


💾 Data Sets — onde muita gente cai (inclusive prova 😏)

Se você quer subir de nível, entenda isso:


📘 CSD (CICS System Definition)

👉 “O que pode existir”

  • Programs
  • Transactions
  • Files

💾 Global Catalog

👉 “Estado persistente”

  • Informações entre execuções
  • Localização do system log
  • Dados internos de domínio

📊 SMF (System Management Facility)

👉 Performance, auditoria e estatísticas


💥 Dumps

  • System dump → região inteira
  • Transaction dump → uma task

🧵 Log do CICS

👉 Primary + Secondary = Log lógico

Sem isso?

💀 Recovery comprometido


📬 TDQ vs TSQ

  • TDQ Intrapartition → dentro do CICS
  • TDQ Extrapartition → fora
  • TSQ → armazenamento temporário

👉 Pergunta clássica de prova.


🧪 Easter Eggs de quem vive CICS

💡 CEMT não morreu — só não é mais suficiente
→ CICS Explorer domina ambientes modernos

💡 Transaction ≠ Task (erro clássico de iniciante)

💡 Você raramente vê o CICS falhar — ele se recupera antes

💡 Deadlocks acontecem mais do que você imagina

💡 SMF é onde está a verdade — não o log da aplicação

💡 Grande parte do “problema COBOL” é, na verdade, problema de arquitetura CICS


🧭 Passo a passo mental de uma transação

Usuário → Transaction → Task → Program → Recursos → Syncpoint → Commit/Backout

Se tudo der certo:

✅ Commit

Se algo falhar:

💥 Backout total


🏆 O segredo que separa júnior de sênior

Um dev comum pensa:

👉 “Meu programa funcionou?”

Um dev COBOL sênior pensa:

👉 “Minha Unit of Work é segura?”
👉 “E se der rollback?”
👉 “E concorrência?”
👉 “E recovery?”
👉 “E performance no SMF?”


🚀 CICS no IBM z17: o presente (não o passado)

Hoje o CICS está:

  • Integrado com APIs REST
  • Consumido por microservices
  • Conectado via MQ
  • Automatizado com RPA
  • Monitorado em tempo real

👉 O COBOL virou motor de backend crítico.


🔥 Conclusão (provocação final)

Se você ainda chama CICS de legado…

👉 Você não entendeu o jogo.

CICS é:

💥 Consistência em escala
💥 Processamento em tempo real
💥 Engenharia de missão crítica

E no IBM z17, ele não está sobrevivendo.

👉 Ele está dominando silenciosamente o mundo corporativo.


quinta-feira, 13 de dezembro de 2018

O Caso do Registro que Não Podia Ser Tocando : Quando um Jovem Programador COBOL Descobriu que Dois Usuários Podiam Roubar Dinheiro Sem Serem Ladrões

 

Bellacosa Mainframe e o caso do registro que nao podia ser tocando

☕ Um Café no Bellacosa Mainframe

O Caso do Registro que Não Podia Ser Tocando

Quando um Jovem Programador COBOL Descobriu que Dois Usuários Podiam Roubar Dinheiro Sem Serem Ladrões

"Existem crimes que deixam impressões digitais. Outros deixam apenas inconsistências no VSAM."


A chuva caía sobre o Centro de Processamento de Dados.

As luzes verdes do IBM Z piscavam lentamente, como se respirassem na escuridão.

Era quase meia-noite.

No monitor 3270, uma única mensagem chamava a atenção do jovem programador COBOL.

RESP = 14

Nenhum ABEND.

Nenhum dump.

Nenhum S0C7.

Nenhum S0C4.

Apenas um simples código de retorno.

Mas, como todo bom investigador sabe, às vezes o menor detalhe esconde o maior dos mistérios.

Foi então que o velho administrador de CICS aproximou-se segurando uma caneca de café.

Sem olhar para o monitor, apenas perguntou:

— Você tentou fazer REWRITE sem entender quem estava segurando a chave do cofre?

O rapaz respondeu:

— Eu só queria alterar um telefone...

O veterano sorriu.

— É exatamente assim que começam todos os grandes mistérios do CICS.

Hoje vamos investigar um dos mecanismos mais importantes de toda a arquitetura CICS: READ UPDATE e REWRITE, dois comandos aparentemente simples, mas responsáveis por proteger bilhões de registros VSAM diariamente em bancos, seguradoras, bolsas de valores, companhias aéreas e órgãos governamentais.

Prepare seu café.

Acenda a luminária verde da mesa.

Porque esta investigação vai muito além de um simples comando COBOL.


O verdadeiro problema nunca foi gravar um registro

Todo programador iniciante pensa assim:

"Quero alterar um cliente."

Então imagina algo parecido com:

Ler

↓

Modificar

↓

Gravar

Parece simples.

E realmente seria...

...se apenas uma pessoa utilizasse o sistema.

Mas o CICS nasceu para outro mundo.

Um mundo onde milhares de pessoas utilizam o mesmo arquivo ao mesmo tempo.

Imagine um banco.

Enquanto você lê este artigo...

Milhares de clientes estão:

  • pagando boletos;

  • transferindo PIX;

  • alterando endereço;

  • consultando saldo;

  • contratando empréstimos;

  • desbloqueando cartão.

Tudo isso pode atingir exatamente o mesmo registro VSAM.

Agora surge a pergunta que assombra arquitetos desde os anos 1970:

Quem ganha quando duas pessoas querem alterar o mesmo registro ao mesmo tempo?


O nascimento do maior vilão dos sistemas online

Seu nome é:

Lost Update

Ele não gera ABEND.

Não trava o CICS.

Não derruba o sistema.

Pior.

Ele produz dados errados.

Imagine o seguinte registro.

Cliente

Saldo

R$ 1.000,00

Agora entram dois caixas.

Caixa A deposita:

+R$ 100,00

Caixa B faz um saque.

-R$ 200,00

Os dois executam:

READ

Ambos recebem:

R$ 1.000,00

Caixa A calcula:

1.100

Grava.

Logo depois...

Caixa B calcula:

800

Também grava.

Resultado final:

R$ 800,00

Mas espere.

O correto seria:

R$ 900,00

Onde desapareceram os R$ 100,00?

Ninguém roubou.

Ninguém fraudou.

Nenhum operador errou.

Foi apenas um clássico caso de Lost Update, um problema de concorrência em que uma atualização sobrescreve a outra por ambas terem partido de uma mesma versão antiga do registro.

É exatamente para impedir esse tipo de situação que o CICS criou um dos mecanismos mais elegantes da computação transacional.


A filosofia do READ UPDATE

Muitos iniciantes acreditam que UPDATE significa:

"Atualize o registro."

Na verdade...

Não.

O UPDATE não grava absolutamente nada.

Ele apenas comunica ao CICS:

"Vou precisar modificar este registro. Reserve-o para mim."

É quase como chegar à biblioteca e colocar um marcador sobre um livro dizendo:

"Estou usando."

Enquanto esse marcador existir...

Ninguém mais pode pegar aquele livro.

No CICS acontece exatamente isso.

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

Observe.

Não houve alteração alguma.

O registro continua exatamente igual.

A única diferença é invisível.

Agora existe um cadeado.

Registro Cliente

──────────────

Saldo

Telefone

Endereço

──────────────

🔒

Esse pequeno cadeado é um dos maiores responsáveis pela confiabilidade dos sistemas bancários modernos.


O cadeado invisível

Esse bloqueio é chamado de lock exclusivo.

Enquanto ele existir:

✔ outro programa pode consultar outros registros;

✔ outras transações continuam funcionando normalmente;

✔ outros clientes continuam utilizando o banco.

Mas aquele registro...

Aquele especificamente...

Pertence temporariamente à sua transação.

É como um investigador isolando a cena do crime.

Até que a perícia termine...

Ninguém entra.


O segundo investigador chega

Imagine agora.

Programa A faz:

READ UPDATE

Registro bloqueado.

Cinco milissegundos depois...

Programa B também tenta atualizar o mesmo cliente.

READ UPDATE

O que acontece?

O CICS responde algo semelhante a:

RESP = 14

Registro bloqueado.

Dependendo da configuração da aplicação, a segunda transação poderá:

  • aguardar a liberação do lock;

  • receber imediatamente a indicação de bloqueio;

  • ou seguir outra estratégia definida pelo sistema.

Perceba a genialidade.

O CICS prefere atrasar uma operação por alguns milissegundos a permitir corrupção dos dados.


REWRITE: a hora da verdade

Depois de alterar a Working-Storage...

Chega o momento mais importante.

EXEC CICS REWRITE
     FILE('CLIENTE')
     FROM(WS-REG)
END-EXEC

Agora sim.

O VSAM grava novamente o registro.

Muitos iniciantes perguntam:

"Ele grava somente o telefone?"

Não.

O REWRITE grava o registro inteiro.

Mesmo que apenas um campo tenha mudado.

Imagine um cadastro.

Nome

CPF

Telefone

Cidade

Saldo

Limite

Nascimento

Endereço

Estado Civil

Você modifica somente:

Telefone

Mesmo assim...

Todo o registro volta ao disco.

Isso acontece porque o VSAM trabalha com registros completos, e o REWRITE substitui a imagem inteira do registro originalmente lido.


O segredo da chave imutável

Existe uma regra quase sagrada.

O REWRITE mantém a mesma chave do registro.

Você pode alterar:

  • telefone;

  • saldo;

  • limite;

  • endereço;

  • e-mail;

  • profissão.

Mas não pode alterar a chave primária.

Se precisar mudar a chave...

O caminho normalmente envolve excluir o registro antigo e gravar outro com a nova chave.

É uma mudança de identidade.

E identidades novas exigem um novo registro.


A importância do COMMIT

Um detalhe frequentemente esquecido pelos iniciantes é imaginar que o REWRITE já libera o registro.

Nem sempre.

Enquanto a unidade lógica de trabalho não termina, o lock pode continuar ativo.

É por isso que o fluxo clássico é:

READ UPDATE

↓

Modificar memória

↓

REWRITE

↓

SYNCPOINT (COMMIT)

↓

Lock liberado

O COMMIT confirma a alteração e encerra aquela etapa da transação.

Se ocorrer um erro antes disso, o sistema pode desfazer a operação, preservando a consistência dos dados.


O perigo dos formulários longos

Imagine esta situação.

Você faz:

READ UPDATE

Depois envia uma tela.

O usuário vai atender o telefone.

Conversar.

Tomar café.

Voltar vinte minutos depois.

Só então pressiona ENTER.

Durante todo esse tempo...

O registro permaneceu bloqueado.

Resultado?

Filas.

Esperas.

Outros usuários impedidos de alterar aquele mesmo cliente.

Por isso existe uma regra de ouro no desenvolvimento CICS:

Nunca mantenha um lock por mais tempo do que o estritamente necessário.

Uma estratégia comum é:

  1. Fazer um READ simples para exibir os dados.

  2. Receber as alterações do usuário.

  3. Executar um READ UPDATE pouco antes da gravação.

  4. Validar novamente.

  5. Fazer o REWRITE.

  6. Finalizar a unidade de trabalho.

Assim, o bloqueio dura apenas alguns milissegundos.


RESP e RESP2: os investigadores silenciosos

Nunca ignore os códigos de retorno.

Um programa robusto verifica cuidadosamente o resultado de cada comando CICS.

Alguns exemplos comuns:

RESPSignificado
00Operação realizada com sucesso
02Registro não encontrado
14Registro bloqueado
20Arquivo ou recurso não encontrado
30Requisição inválida
91Atualização não concluída; investigar a causa

Quando disponível, RESP2 complementa o diagnóstico, fornecendo informações adicionais específicas sobre a condição encontrada.

Um bom programador COBOL não apenas trata o erro; ele entende por que ele ocorreu.


Curiosidade: por que não existe UPDATE como no SQL?

Quem vem do mundo relacional estranha.

No SQL basta escrever:

UPDATE CLIENTE
SET TELEFONE = '11999999999'
WHERE ID = 100;

No VSAM, a lógica é diferente.

Primeiro você obtém o registro.

Depois altera sua cópia em memória.

Só então grava o registro inteiro novamente.

Essa diferença vem da própria natureza do VSAM, que trabalha com registros físicos completos, enquanto o banco de dados relacional manipula colunas e linhas sob um mecanismo diferente de armazenamento.


Curiosidade histórica

Os conceitos por trás de READ UPDATE e REWRITE surgiram muito antes da popularização da internet.

Décadas antes de existirem smartphones, APIs REST ou microsserviços, grandes bancos já processavam milhões de transações simultâneas graças a mecanismos sofisticados de bloqueio, sincronização e recuperação.

Grande parte dessas ideias continua válida até hoje.

Muitas tecnologias modernas reinventaram princípios que os mainframes já utilizavam há décadas.


Passo a passo para atualizar um registro com segurança

Um fluxo típico em uma aplicação COBOL/CICS pode ser resumido assim:

  1. Receber a chave do registro.

  2. Executar READ UPDATE.

  3. Verificar RESP e, quando aplicável, RESP2.

  4. Alterar apenas os campos necessários na Working-Storage.

  5. Executar REWRITE.

  6. Confirmar a unidade lógica de trabalho (SYNCPOINT) ou realizar rollback em caso de falha.

  7. Encerrar a transação.

Parece simples.

E realmente é.

A dificuldade não está na sequência.

Está em compreender por que ela existe.


Dicas de ouro para quem está aprendendo CICS

✔ Nunca execute REWRITE sem um READ UPDATE bem-sucedido.

✔ Mantenha o tempo de bloqueio o menor possível.

✔ Sempre trate RESP e RESP2.

✔ Não altere a chave do registro antes do REWRITE.

✔ Pense em concorrência desde o primeiro programa que escrever.

✔ Lembre-se de que o usuário nunca está sozinho no sistema.

✔ Teste cenários com duas transações tentando atualizar o mesmo registro.

Esses testes ensinam mais sobre CICS do que centenas de exemplos puramente teóricos.


Easter Egg Bellacosa Mainframe 🕵️

Os veteranos do CPD contam uma velha história.

Durante uma madrugada de processamento, um programador jurava que o VSAM "perdia dinheiro".

Após horas analisando dumps, SMF e logs do CICS, nada parecia explicar o problema.

Foi então que um analista aposentado, conhecido apenas como O Guardião do 3270, pediu para ver apenas uma linha do código.

Ali estava:

EXEC CICS READ

Sem a palavra:

UPDATE

O veterano fechou o terminal, tomou um gole de café e disse:

— "O culpado nunca foi o VSAM. O registro estava falando com duas pessoas ao mesmo tempo."

Dizem que, desde então, quem programa CICS nas madrugadas presta mais atenção aos quatro caracteres que mudam completamente o destino de uma transação:

UPDATE


O verdadeiro mistério nunca esteve no REWRITE

Ao final desta investigação, descobrimos que o REWRITE não é o protagonista.

Ele apenas grava o resultado.

O verdadeiro herói é o READ UPDATE, que protege o registro enquanto a alteração está sendo preparada.

É ele quem impede que duas transações sobrescrevam o trabalho uma da outra.

É ele quem preserva a integridade dos dados.

É ele quem garante que milhões de operações bancárias possam acontecer simultaneamente com segurança.

Na superfície, parecem apenas dois comandos COBOL.

Nas sombras do CPD, porém, eles são os guardiões silenciosos da consistência, da concorrência e da confiança que sustentam alguns dos sistemas mais críticos do planeta.

E, como em toda boa revista noir dos anos 1950, o maior mistério nunca foi quem escreveu o código.

Foi descobrir quem estava segurando a chave do cofre quando ninguém mais podia tocá-lo.


domingo, 6 de maio de 2012

☕🔥 CICS COMMANDS — O UNIVERSO OCULTO QUE MOVE O MAINFRAME MUNDIAL

 

Bellacosa Mainframe e os comandos cics mainframe

☕🔥 CICS COMMANDS — O UNIVERSO OCULTO QUE MOVE O MAINFRAME MUNDIAL

A Anatomia Completa dos Comandos CICS Que Todo Programador IBM Z Precisa Dominar

O CICS (Customer Information Control System) não é apenas um monitor transacional.

Ele é o “sistema nervoso” de milhares de bancos, companhias aéreas, seguradoras, governos e bolsas de valores.

Enquanto aplicações web modernas fazem milhões de chamadas REST…

o CICS já fazia processamento transacional distribuído, controle de concorrência, recuperação automática, segurança, filas, locking e gerenciamento de sessões desde os anos 70.

E tudo isso através dos famosos:

EXEC CICS
END-EXEC

A lista enviada contém praticamente o “arsenal clássico” do programador CICS.

Agora vamos muito além da referência.

Vamos explorar:

  • arquitetura,

  • filosofia,

  • comportamento interno,

  • performance,

  • armadilhas,

  • uso real em produção,

  • relação com VSAM,

  • pseudo-conversação,

  • concorrência,

  • recovery,

  • e o impacto histórico de cada grupo de comandos.


🔥 1 — A FILOSOFIA DO CICS

Antes de entender comandos…

precisa entender o modelo mental do CICS.

O CICS NÃO funciona como batch.

No batch:

  • programa começa,

  • executa,

  • termina.

No CICS:

  • milhares de tarefas coexistem,

  • compartilham memória,

  • disputam recursos,

  • acessam arquivos simultaneamente,

  • conversam com terminais,

  • podem ser interrompidas,

  • retomadas,

  • rollbackadas,

  • sincronizadas.

Por isso os comandos CICS existem.

Eles são uma “API do sistema operacional transacional”.


☕ 2 — OS COMANDOS MAIS IMPORTANTES DA HISTÓRIA DO CICS

Se fosse montar o “Top Tier” dos comandos mais usados no mundo real:

CategoriaComandos
Navegação de telaSEND, RECEIVE, SEND MAP
Fluxo de programaLINK, XCTL, RETURN
Arquivos VSAMREAD, WRITE, REWRITE, DELETE
BrowseSTARTBR, READNEXT, ENDBR
FilasWRITEQ TS, READQ TS
Tratamento de erroHANDLE CONDITION
Controle transacionalSYNCPOINT
MemóriaGETMAIN, FREEMAIN
ConcorrênciaENQ, DEQ
TemporizaçãoSTART, DELAY
Debug/RecoveryABEND, DUMP

Esses comandos sustentam literalmente bilhões de transações diárias.


🔥 3 — LINK vs XCTL — O DUELO MAIS IMPORTANTE DO CICS

EXEC CICS LINK

EXEC CICS LINK PROGRAM('PROG2')
END-EXEC

O LINK:

  • chama outro programa,

  • espera terminar,

  • volta para o chamador.

É semelhante ao:

  • CALL COBOL,

  • subrotina,

  • procedure call.

Mas com superpoderes:

  • troca de contexto CICS,

  • proteção transacional,

  • comunicação entre regiões,

  • syncpoint awareness.


EXEC CICS XCTL

EXEC CICS XCTL PROGRAM('MENU001')
END-EXEC

Aqui o programa atual MORRE.

O controle é transferido.

Não existe retorno.

É praticamente um:

  • GOTO inter-programas.


Impacto arquitetural

LINK:

  • aumenta stack lógica,

  • mantém contexto,

  • pode gerar encadeamentos enormes.

XCTL:

  • economiza recursos,

  • reduz profundidade,

  • muito usado em menus.


☕ 4 — O CORAÇÃO DO CICS: SEND e RECEIVE

Sem SEND/RECEIVE…

não existiria terminal 3270.


SEND MAP

EXEC CICS SEND MAP('TELA1')
END-EXEC

O BMS:

  • formata tela,

  • monta buffer 3270,

  • gerencia atributos,

  • protege campos,

  • controla cursor.


RECEIVE MAP

EXEC CICS RECEIVE MAP('TELA1')
END-EXEC

Recebe:

  • ENTER,

  • PFKEY,

  • PAKEY,

  • dados digitados.


O detalhe histórico incrível

Os terminais 3270 NÃO eram “burros”.

Eles tinham:

  • buffer local,

  • atributos físicos,

  • otimização de transmissão.

O CICS explorava isso décadas antes do AJAX existir.


🔥 5 — HANDLE CONDITION — A “EXCEPTION” DO MUNDO MAINFRAME

EXEC CICS HANDLE CONDITION
     NOTFND(SEM-REGISTRO)
END-EXEC

É o ancestral dos:

  • try/catch,

  • exception handlers,

  • middleware exception routing.


O que poucos entendem

HANDLE CONDITION NÃO captura COBOL errors.

Ele captura:

  • RESP CICS,

  • condições transacionais,

  • erros de recurso,

  • timeouts,

  • locks,

  • fim de browse.


Problema clássico

Junior faz:

READ FILE
IF RESP NOT = NORMAL

Veterano faz:

HANDLE CONDITION
    NOTFND(...)
    DUPREC(...)
    ENDFILE(...)

Porque:

  • reduz boilerplate,

  • melhora legibilidade,

  • segue padrão CICS.


☕ 6 — READ UPDATE + REWRITE — O LOCK INVISÍVEL

Esse é um dos conceitos mais importantes do CICS.


READ UPDATE

EXEC CICS READ
     FILE('CLIENTE')
     RIDFLD(CHAVE)
     UPDATE
END-EXEC

Aqui o registro fica LOCKADO.

Nenhuma outra task altera.


Depois:

EXEC CICS REWRITE
END-EXEC

ou:

EXEC CICS UNLOCK
END-EXEC

O perigo mortal

Se esquecer:

  • REWRITE,

  • DELETE,

  • UNLOCK,

  • SYNCPOINT,

você cria:

  • contention,

  • deadlocks,

  • waits,

  • tasks congeladas.

Isso derruba produção REAL.


🔥 7 — STARTBR / READNEXT — O “CURSOR VSAM”

Esses comandos implementam navegação sequencial.


STARTBR

EXEC CICS STARTBR
     FILE('CLI')
     RIDFLD(CHAVE)
END-EXEC

Abre um browse.


READNEXT

EXEC CICS READNEXT
END-EXEC

Lê o próximo.


ENDBR

EXEC CICS ENDBR
END-EXEC

Fecha browse.


Isso é equivalente ao quê?

Praticamente um cursor DB2.

Mas para:

  • VSAM KSDS,

  • RRDS,

  • ESDS.


☕ 8 — WRITEQ TS — O REDIS DOS ANOS 80

Temporary Storage Queue.


WRITEQ TS

EXEC CICS WRITEQ TS
     QUEUE('TEMP01')
END-EXEC

READQ TS

EXEC CICS READQ TS
END-EXEC

O que isso fazia?

Muito antes de:

  • Redis,

  • Memcached,

  • sessões web,

o CICS já tinha:

  • filas temporárias,

  • compartilhamento de estado,

  • persistência opcional,

  • armazenamento em memória ou disco.


TS Queue virou:

  • sessão web primitiva,

  • cache transacional,

  • passing area,

  • workflow storage.


🔥 9 — SYNCPOINT — O COMMIT DO CICS

EXEC CICS SYNCPOINT
END-EXEC

Esse comando é MONSTRUOSAMENTE importante.

Ele sincroniza:

  • VSAM,

  • DB2,

  • MQ,

  • journals,

  • recoverable TS queues.


Sem SYNCPOINT

Nada é garantido.


Com ROLLBACK

EXEC CICS SYNCPOINT ROLLBACK
END-EXEC

Tudo volta.


Isso é engenharia de altíssimo nível

O CICS fazia two-phase commit quando boa parte do mundo ainda usava arquivos flat sem recovery.


☕ 10 — GETMAIN / FREEMAIN — O malloc/free DO CICS


GETMAIN

EXEC CICS GETMAIN
     SET(PTR)
     LENGTH(1000)
END-EXEC

Aloca memória.


FREEMAIN

EXEC CICS FREEMAIN
     DATA(PTR)
END-EXEC

Libera memória.


O problema clássico

Se esquecer FREEMAIN:

🔥 storage leak.

E em CICS:

  • leak = SOS condition,

  • região degradando,

  • task abending,

  • operação entrando em pânico.


🔥 11 — ENQ / DEQ — O CONTROLE DE CONCORRÊNCIA EMPRESARIAL


ENQ

EXEC CICS ENQ
     RESOURCE('CLIENTE123')
END-EXEC

Reserva recurso lógico.


DEQ

EXEC CICS DEQ
END-EXEC

Libera.


Isso é fundamental porque:

Em sistemas financeiros:

  • duas tasks NÃO podem atualizar simultaneamente.


Exemplos reais

  • saldo bancário,

  • limite de cartão,

  • número de apólice,

  • geração de boleto,

  • emissão de passagem aérea.


☕ 12 — ABEND — O GRITO DE SOCORRO DO CICS

EXEC CICS ABEND
     ABCODE('ERRO')
END-EXEC

Força abend.


Por que isso existe?

Porque às vezes continuar é PIOR.

O ABEND:

  • protege integridade,

  • força rollback,

  • gera dump,

  • interrompe corrupção.


Grandes sistemas usam isso estrategicamente

Em ambientes críticos:

  • “falhar rápido” é mais seguro.


🔥 13 — DUMP — A AUTÓPSIA DIGITAL

EXEC CICS DUMP
END-EXEC

Gera snapshot da região.


Dump contém:

  • memória,

  • TCA,

  • TWA,

  • COMMAREA,

  • registers,

  • control blocks,

  • trace.


O dump é literalmente:

a caixa-preta do avião do mainframe.


☕ 14 — START — O AGENDADOR INTERNO

EXEC CICS START
     TRANSID('TRN1')
END-EXEC

Agenda transação futura.


Isso criou:

  • workflows,

  • processamento assíncrono,

  • retries automáticos,

  • timers,

  • batch online.

Muito antes de:

  • Kafka,

  • cron distribuído,

  • microservices schedulers.


🔥 15 — RETURN COMMAREA — O SEGREDO DA PSEUDO-CONVERSAÇÃO

Esse é o conceito MAIS IMPORTANTE do CICS clássico.


O problema

Terminal é lento.

Não dá para deixar task presa esperando usuário digitar.


Solução genial do CICS

A task termina.

Mas guarda estado.


RETURN COMMAREA

EXEC CICS RETURN
     TRANSID('MENU')
     COMMAREA(AREA)
END-EXEC

O que acontece?

  1. Task termina

  2. Usuário pensa

  3. Nova task nasce

  4. COMMAREA restaura contexto


Isso revolucionou computação

Pseudo-conversação:

  • economiza memória,

  • aumenta escalabilidade,

  • permite milhares de usuários simultâneos.

Esse conceito foi MUITO à frente do seu tempo.


☕ 16 — O QUE SEPARA UM JUNIOR DE UM VETERANO CICS

Junior:

  • aprende sintaxe.

Veterano:

  • entende:

    • locking,

    • pseudo-conversação,

    • recovery,

    • task lifetime,

    • syncpoint,

    • storage,

    • contention,

    • dispatching,

    • response time.


🔥 17 — A VERDADE QUE POUCOS FALAM SOBRE CICS

Muitos pensam:

“CICS é antigo.”

Mas a realidade é:

O CICS resolveu:

  • concorrência massiva,

  • alta disponibilidade,

  • transação distribuída,

  • recovery,

  • rollback,

  • escalabilidade,

  • segurança,

  • workload management,

décadas antes da computação moderna reinventar esses conceitos.

Grande parte do que hoje chamam:

  • microservices,

  • orchestration,

  • transactional middleware,

  • distributed coordination,

o CICS já fazia em produção bancária desde o século passado.


☕ CONCLUSÃO — O CICS NÃO É APENAS UM PRODUTO

É UMA DAS MAIORES OBRAS DE ENGENHARIA DA HISTÓRIA DA COMPUTAÇÃO

Cada comando CICS carrega:

  • décadas de evolução,

  • engenharia enterprise,

  • otimização extrema,

  • compatibilidade histórica,

  • confiabilidade absurda.

Quando alguém escreve:

EXEC CICS READ

existe um universo inteiro acontecendo por trás:

  • locks,

  • buffers,

  • recovery,

  • journaling,

  • dispatching,

  • integrity control,

  • syncpoint management,

  • task scheduling.

E é exatamente isso que torna o mundo IBM Z tão fascinante.

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...