Translate

segunda-feira, 22 de junho de 2026

☕💥 Quando um Dataset VSAM Corrompe no z/OS: Guia de Sobrevivência para Sysprogs, Desenvolvedores COBOL e Administradores CICS

 

Bellacosa Mainframe uma pequena ajudinha recuperando dataset vsam

☕💥 Quando um Dataset VSAM Corrompe no z/OS: Guia de Sobrevivência para Sysprogs, Desenvolvedores COBOL e Administradores CICS

"Há dois tipos de profissionais de Mainframe: os que já recuperaram um dataset corrompido e os que ainda vão recuperar."


Introdução

Poucas mensagens conseguem acelerar tanto os batimentos cardíacos de um profissional de Mainframe quanto estas:

IDC3302I ACTION ERROR
IDC3351I VSAM OPEN RETURN CODE 168
IEC161I
IEC070I
DFHFC0157

Ou pior ainda:

"O arquivo de clientes não abre em produção."

Silêncio.

O scheduler para.

O CICS começa a emitir mensagens.

Os jobs entram em abend.

O telefone toca.

Alguém pergunta:

"Tem backup?"

E nesse momento percebemos que existe uma grande diferença entre saber programar COBOL, conhecer VSAM e realmente entender o processo de recuperação de corrupção em datasets no z/OS.

Hoje vamos tomar um café e conversar sobre um assunto pouco ensinado em treinamentos, mas extremamente valorizado em bancos, seguradoras, companhias aéreas e órgãos governamentais:

Como recuperar um dataset VSAM corrompido no z/OS.


O que significa um Dataset Corrompido?

Nem toda falha é uma corrupção.

Às vezes é apenas um catálogo inconsistente.

Em outros casos temos problemas muito mais graves.

Exemplos:

  • EOF inconsistente

  • HURBA inválido

  • HARBA incorreto

  • Alternate Index quebrado

  • Cadeia lógica danificada

  • Control Interval inválida

  • Problemas na VTOC

  • SMSVSAM inconsistente

  • CI Split interrompido

  • Erros físicos em disco


Primeira Regra: Pare Tudo

O maior erro que vejo iniciantes cometerem é tentar "olhar rapidamente".

Não.

Pare imediatamente.

Batch

Segure scheduler.

CA7

Control-M

TWS


CICS

Fechar arquivo.

CEMT SET FILE(CUSTFILE) CLOSED

ou

CEMT SET FILE(CUSTFILE) DISABLED

IMS

/DBR CUSTOMER

Started Tasks

Encerrar consumidores.

MQ

Connectors

Replication

ETL

CDC


A regra é simples.

Dataset suspeito.

Sem acesso.

Sem exceções.


Segunda Etapa: LISTCAT

Antes de sair executando VERIFY.

Olhe o paciente.

Comando

//STEP1 EXEC PGB=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *

 LISTCAT ENT(PROD.CUST.KSDS)
 ALL

/*

O que analisar?

Cluster

Data Component

Index Component

Volume

HI-USED-RBA

Catalog

SMS Classes


Exemplo

HURBA = 000001987654
HARBA = 000001999999

Valores estranhos podem indicar inconsistências.


VERIFY

Provavelmente a ferramenta mais subestimada do IDCAMS.


Função

Sincronizar.

Catalog

Volume

EOF

RBA

Informações físicas


Exemplo

VERIFY DATASET(PROD.CUST.KSDS)

Com recuperação:

VERIFY DATASET(PROD.CUST.KSDS)
RECOVER

O VERIFY resolve

EOF incorreto

Catalog inconsistente

Discrepâncias simples

Alguns problemas em KSDS


Mas atenção.

VERIFY não é mágica.

Ele não reconstrói uma estrutura destruída.


EXAMINE

Agora começa a parte realmente interessante.

EXAMINE é quase um scanner médico do VSAM.


Data Component

EXAMINE -
NAME(PROD.CUST.KSDS)
DATATEST

Índice

EXAMINE -
NAME(PROD.CUST.KSDS)
INDEXTEST

Completo

EXAMINE -
NAME(PROD.CUST.KSDS)
DATA

O que ele encontra?

Control Interval inválida

Ponteiros quebrados

Índices inconsistentes

RBAs errados

Registros perdidos


A Grande Pergunta

Após EXAMINE surge a decisão.

Corrupção pequena?

ou

Corrupção severa?

Essa decisão define tudo.


Cenário 1 — Corrupção Leve

Exemplos.

Catalog inconsistente.

EOF errado.

Pequenos danos.


Solução.

VERIFY

REPRO

Rebuild


REPRO

Criar novo cluster.

DEFINE CLUSTER(...)

Copiar.

REPRO -
INFILE(IN1)
OUTFILE(OUT1)

Muitas vezes isso resolve.

Surpreendentemente.


Cenário 2 — Corrupção Grave

Aqui muda completamente.

Nunca seja herói.

Backup sempre vence.


Restore

Melhor prática.

Sempre.


DFSMSdss

RESTORE DATASET(...)

HSM

HRECOVER

FDR

RESTORE TYPE=DS

E se não existir backup?

Infelizmente acontece.

Mais vezes do que deveria.


Estratégia

Salvar o que for possível.

Criar novo dataset.

Tentar REPRO.

Descartar registros inválidos.

Reconstruir índices.


Alternate Index

Muitos esquecem do AIX.

Ele também pode corromper.


Rebuild

BLDINDEX

Ou.

Excluir.

Criar novamente.

Popular.


Recuperação de Catálogo

Uma área extremamente especializada.

Pouca gente domina.

Muito valorizada.


DIAGNOSE

DIAGNOSE

EXPORT

EXPORT -
CATALOG(MYCAT)
TEMPORARY

IMPORT

IMPORT CONNECT

Ambientes CICS

A situação muda bastante.

Especialmente em RLS.


SMSVSAM

Cache compartilhado.

Lock global.

Coupling Facility.

Múltiplas regiões.


Problemas comuns.

CF inconsistente.

Lock perdido.

Buffer inválido.


Procedimento

Fechar arquivos.

Verificar SMSVSAM.

Executar VERIFY.

EXAMINE.

Restore.

Abrir novamente.


Ambientes Bancários

O fluxo normalmente é.


Incidente aberto.

Congelamento.

Snapshot.

LISTCAT.

VERIFY.

EXAMINE.

Análise.

Restore.

Testes.

Validação.

Produção.


Testes Pós-Recovery

Nunca devolver imediatamente.

Teste.

Leia registros.

Atualize.

Delete.

Browse.

Sequencial.

Random.


Batch

Executar programas COBOL.

Validar.

Retorno.

SMF.

CPU.

EXCP.


CICS

Abrir arquivo.

Executar transações.

CRUD.

Commit.

Syncpoint.


IMS

DBOPEN.

GN.

GU.

REPL.

DLET.


Ferramentas Úteis

IDCAMS

DFSMSdss

DFSMShsm

FDR

LISTCAT

VERIFY

EXAMINE

BLDINDEX

DIAGNOSE


O que Aprendemos?

O Mainframe continua sendo uma das plataformas mais resilientes do planeta.

Mas nenhuma tecnologia é imune.

Discos falham.

Pessoas erram.

Jobs são cancelados.

Aplicações apresentam bugs.

Volumes ficam inconsistentes.

Catálogos podem sofrer danos.

A diferença entre um desastre e uma recuperação tranquila quase sempre está em três fatores.

Backup.

Procedimentos.

Conhecimento.

Um desenvolvedor COBOL que entende apenas READ, WRITE e REWRITE é valioso.

Um desenvolvedor que compreende LISTCAT, VERIFY, EXAMINE, REPRO, recuperação de catálogo e estratégias de restore torna-se um profissional muito mais próximo do universo de Sysprog, Storage e Administração z/OS.

E essa é justamente uma das características que mais diferencia especialistas Mainframe experientes.

Porque no fim do dia, quando o telefone toca e alguém diz:

"O arquivo de produção corrompeu..."

A pergunta deixa de ser:

"Quem programou isso?"

E passa a ser:

"Quem sabe trazer a base de volta?"

E, acredite, nas grandes corporações, essas pessoas são lembradas por muitos anos.


Bellacosa Mainframe

"Transformando mensagens IDCAMS em oportunidades de aprendizado, um café por vez."


domingo, 21 de junho de 2026

Natural x CICS BMS para Desenvolvedores COBOL

 

Bellacosa Mainframe e uma breve comparação entre Natural e CICS BMS

☕ Um Café no Bellacosa Mainframe

Natural x CICS BMS para Desenvolvedores COBOL

Entendendo duas filosofias diferentes de construir aplicações Online no Mainframe

Salve jovem Padawan.

Uma das dúvidas mais comuns de quem começa no mundo Mainframe é:

Se eu sei desenvolver online em Natural, já sei desenvolver em CICS?

A resposta curta é:

Não.

A resposta longa é:

Você conhece o objetivo, mas não conhece o mecanismo.

Natural e CICS possuem filosofias completamente diferentes para construir aplicações online.


A grande diferença

Natural é uma plataforma completa.

CICS é um monitor transacional.

Podemos pensar da seguinte maneira:

NaturalCICS
FrameworkMonitor Transacional
IDE integradaFerramentas separadas
Tela automáticaBMS
Segurança integradaRACF/CICS
Navegação nativaProgramada
Dicionário PredictCopybooks
Estado mantido pelo NaturalCOMMAREA
Desenvolvimento RADDesenvolvimento explícito

Arquitetura Natural

Em Natural normalmente temos:

Usuário

↓

Terminal 3270

↓

Natural Runtime

↓

Programa Natural

↓

Predict

↓

Adabas

Natural faz praticamente tudo.

O desenvolvedor apenas escreve:

INPUT

'CPF' CPF

'Nome' NOME


END-INPUT

Pronto.

Tela criada.


Arquitetura CICS

No CICS:

Usuário

↓

3270

↓

BMS

↓

MAPSET

↓

COBOL

↓

COMMAREA

↓

DB2


Tudo é responsabilidade do desenvolvedor.


Natural é quase um framework

Natural lembra.

Django

Rails

PowerBuilder

Oracle Forms


Exemplo Natural


INPUT USING MAP 'CLI001'

END-INPUT



Natural já sabe.

Mapa.

Campos.

Validação.

Cursor.

Ajuda.

PF Keys.

Tudo praticamente pronto.


CICS é uma caixa de ferramentas

CICS fornece:

SEND

RECEIVE

LINK

RETURN

HANDLE

Mas você constrói.


Exemplo


SEND MAP


RECEIVE MAP


VALIDA


CONSULTA DB2


SEND


RETURN



Predict

Aqui está uma grande diferença.


Natural usa Predict.

Predict é um catálogo.

Um dicionário corporativo.


Armazena.

Campos

Programas

Mapas

Arquivos

Views

Documentação

Relacionamentos


Exemplo


CLIENTE


CPF


NOME


ENDERECO


LIMITE




Natural gera automaticamente.

Campos.

Mapas.

Views.

Documentação.


Exemplo


1 CPF

1 NOME

1 CIDADE


Tudo centralizado.


CICS não possui Predict

No CICS.

Criamos.

Copybooks.

Layouts.

BMS.

Manualmente.


Exemplo


COPY CLIENTE.


COPY CLIMAP.




Construção de Menus

Natural

Muito simples.


MENU

1 Consulta

2 Inclusao

3 Alteracao



CICS

Criamos.

MAPSET.

COBOL.

Fluxo.

PF Keys.


Exemplo

MENU01


1 Consultar


2 Incluir


3 Alterar



PF3



Hierarquia de programas

Natural

Quase sempre.

Programa chama programa.



MENU


↓

CLIENTE


↓

CONSULTA


↓

ALTERA


Natural controla.


No CICS.

Mais cuidado.


Podemos usar.

LINK

XCTL

START


LINK

Retorna.


EXEC CICS LINK

PROGRAM('CLI002')

END-EXEC



XCTL

Não retorna.



EXEC CICS XCTL

PROGRAM('MENU')


END-EXEC



Como segregar funções

Boa prática.


MENU

Só navegação.


CLIENTE

Negócio.


DBCLI

DB2.


TELA

BMS.


UTIL

Rotinas.


Exemplo



MENU0001



CLI0001



DBCLI01



UTILCPF



MSGERRO




Segurança

Natural

Muito integrada.


Natural Security.

NSC.

Predict.

Menus.

Perfis.


Exemplo

Usuário João.

Pode.

Consultar.

Não alterar.


Natural faz.


No CICS.

Usamos.

RACF.


Transação.

Programa.

Arquivo.

Fila.

TSQ.

TDQ.


Exemplo


CLI1


CONS



ALT1


ADM1




RACF controla.


Navegação

Natural

Automática.


ENTER.

PF3.

PF12.


Tudo tratado.


CICS.

Manual.


Precisamos verificar.


COPY DFHAID





EVALUATE EIBAID



WHEN DFHPF3


PERFORM SAIR



WHEN DFHPF5


PERFORM REFRESH


END-EVALUATE



BMS

Natural

Mapas do Natural.


CICS

BMS.


MAP

Tela.


MAPSET

Conjunto de telas.


Exemplo



LOGIN



MENU



CLIENTE



CONSULTA



HELP




Mapset.


DFHMSD




Tela.


DFHMDI




Campo.


DFHMDF




PF Keys

Muito importante.


PF1

Ajuda


PF3

Sair


PF5

Atualizar


PF7

Anterior


PF8

Próximo


PF12

Cancelar


No terminal 3270

Emuladores modernos.

PCOMM.

Rocket.

Vista.

x3270.


Teclas mapeadas.


Exemplo.

F3

PF3


F7

PF7


Shift+F12

PF24


Clear

PA1


Attention

PA2


SYSREQ

PA3


Comportamento curioso

No 3270.

ENTER.

Não é.

Carriage Return.


É um.

AID.

Attention Identifier.


CICS recebe.


EIBAID



Natural trata.

Automaticamente.


Uma analogia moderna

Natural é parecido com:

Oracle Forms

PowerBuilder

GeneXus


CICS é parecido com.

HTML

CSS

Javascript

Backend Java


Natural oferece produtividade.

CICS oferece controle.


O que é melhor?

Depende.

Natural é excelente para:

Desenvolvimento rápido.

CRUD.

Adabas.


CICS é excelente para:

Grandes volumes.

Flexibilidade.

Integração.

APIs.

DB2.

MQ.


Minha recomendação para um COBOL Júnior

Aprenda primeiro:

  • BMS

  • SEND/RECEIVE

  • DFHAID

  • COMMAREA

  • Pseudo-conversação

  • LINK/XCTL

  • TSQ

  • CEDF

Depois estude:

  • Natural

  • Predict

  • Adabas

  • Natural Security

Quando você conhecer os dois mundos, perceberá algo interessante:

Natural tenta esconder a complexidade do CICS.

CICS mostra explicitamente como as engrenagens funcionam.

E, para quem deseja realmente entender os bastidores das aplicações bancárias e seguradoras do IBM Z, estudar CICS/BMS costuma ser uma excelente forma de aprender como um sistema transacional corporativo é construído desde a fundação.

sábado, 20 de junho de 2026

☕ LAB - CICS BMS para Padawans

 

Bellacosa Mainframe laboratorio pratico CICS BMS

☕ LAB Bellacosa Mainframe

CICS BMS para Padawans

Bem-vindo ao Laboratório Bellacosa Mainframe – CICS BMS para Padawans. Este conjunto de exercícios foi projetado para conduzir um desenvolvedor COBOL iniciante por uma jornada gradual de aprendizado, partindo da criação do primeiro MAPSET BMS até a construção de uma pequena aplicação pseudo-conversacional semelhante às encontradas em bancos, seguradoras e grandes empresas. 

O objetivo não é apenas aprender a sintaxe das macros DFHMSD, DFHMDI e DFHMDF, mas desenvolver a forma de pensar utilizada por desenvolvedores CICS experientes.

Ao longo dos laboratórios, o aluno será estimulado a raciocinar em termos de interface, estado, fluxo de navegação, persistência temporária de informações e interação entre usuário e aplicação. Inicialmente, o foco será compreender como uma tela 3270 é construída, como os campos são definidos, protegidos ou liberados para edição e como o BMS abstrai as características do terminal. 

Em seguida, serão introduzidos os conceitos de SEND MAP, RECEIVE MAP, EIBAID, DFHAID, posicionamento dinâmico de cursor e tratamento de teclas funcionais.

Nos desafios mais avançados, espera-se que o aluno seja capaz de projetar uma aplicação utilizando pseudo-conversação, COMMAREA, paginação, mensagens de erro e validações, adotando uma abordagem semelhante à empregada em sistemas corporativos reais. 

Mais importante do que memorizar comandos é desenvolver o raciocínio arquitetural necessário para compreender como aplicações CICS foram concebidas, evoluíram ao longo das décadas e continuam sustentando milhões de transações críticas diariamente no ecossistema IBM Z.

10 Laboratórios Práticos de BMS


LAB01 – Meu Primeiro BMS

Objetivo:

Criar o primeiro MAPSET.

Resultado esperado:

HELLO BMS

PF3=Sair

Atividades

Criar um DFHMSD

Criar um DFHMDI

Criar dois DFHMDF

Gerar Physical Map

Gerar Symbolic Map


Solução

HELLO DFHMSD TYPE=&SYSPARM,
       LANG=COBOL,
       MODE=OUT,
       TIOAPFX=YES

TELA1 DFHMDI SIZE=(24,80)

      DFHMDF POS=(5,25),
              LENGTH=10,
              INITIAL='HELLO BMS',
              ATTRB=(PROT,BRT)

      DFHMDF POS=(22,2),
              LENGTH=8,
              INITIAL='PF3=Sair',
              ATTRB=(ASKIP)

      DFHMSD TYPE=FINAL

END

LAB02 – Criando Campo de Entrada

Objetivo

Campo editável.


Resultado

Nome :

______________

Atividades

Adicionar campo input

Posicionar cursor

Testar MDT


Solução

NOME DFHMDF POS=(5,15),
              LENGTH=30,
              ATTRB=(UNPROT,IC)

LAB03 – Campos Protegidos

Objetivo

Criar labels.


Resultado

CPF:


Cidade:


Email:

Solução

DFHMDF POS=(1,1),
        LENGTH=4,
        INITIAL='CPF:',
        ATTRB=(ASKIP)

LAB04 – Tela Cadastro Cliente

Objetivo

Montar tela completa.


Resultado

Codigo:


Nome:


CPF:


Cidade:


Telefone:



PF3


PF5


ENTER

Atividades

Criar 5 campos

Criar mensagens

Criar PF Keys


Solução

CODIGO DFHMDF
        POS=(5,15),
        LENGTH=6,
        ATTRB=(UNPROT,IC)



CPF DFHMDF
        POS=(7,15),
        LENGTH=11,
        ATTRB=(UNPROT,NUM)

LAB05 – SEND MAP

Objetivo

Mostrar tela.


Atividades

Criar programa COBOL

Executar SEND


Solução

EXEC CICS SEND MAP

MAP('TELA01')

MAPSET('CLIMAP')

ERASE

FREEKB

END-EXEC.

LAB06 – RECEIVE MAP

Objetivo

Receber dados.


Atividades

Capturar nome.

Capturar CPF.


Solução

EXEC CICS RECEIVE

MAP('TELA01')

MAPSET('CLIMAP')

INTO(TELA01I)

END-EXEC.

LAB07 – Tratando ENTER e PF3

Objetivo

Usar DFHAID.


Atividades

Copy DFHAID

Verificar tecla


Solução

COPY DFHAID.



EVALUATE EIBAID


WHEN DFHENTER

PERFORM PROCESSA



WHEN DFHPF3

PERFORM SAIR



END-EVALUATE

LAB08 – Cursor Dinâmico

Objetivo

Cursor em campo inválido.


Exemplo

CPF inválido


Cursor volta CPF

Solução

MOVE -1 TO CPFL



EXEC CICS SEND

CURSOR

END-EXEC

LAB09 – Pseudo Conversação

Objetivo

Implementar COMMAREA.


Atividades

Salvar contexto

Retornar transação


Solução

EXEC CICS RETURN


TRANSID('CLI1')


COMMAREA(WS-COMM)


LENGTH(100)


END-EXEC.

Primeira vez

IF EIBCALEN = ZERO

PERFORM PRIMEIRA-VEZ

END-IF.

LAB10 – Mini Sistema Bancário

Objetivo

Criar aplicação real.


Funcionalidades

Consultar Cliente

Cadastrar

Alterar

Excluir

Paginar

PF7

PF8

PF3


Tela


==================================

CLIENTES


Codigo


Nome


CPF



PF3=Sair

PF5=Limpar

PF7=Anterior

PF8=Próximo


==================================


Desafio Extra

Implementar:

MAPFAIL

HANDLE CONDITION

HANDLE AID

FSET

FRSET

DATAONLY

MAPONLY


Gabarito Esperado

Ao final dos 10 labs o aluno deverá dominar:

✅ DFHMSD

✅ DFHMDI

✅ DFHMDF

✅ SEND MAP

✅ RECEIVE MAP

✅ DFHAID

✅ EIBAID

✅ CURSOR

✅ MDT

✅ FSET

✅ COMMAREA

✅ Pseudo-conversação

✅ CEDA

✅ CEMT

✅ INSTALL

✅ BMS Physical

✅ Symbolic Maps


🏆 Desafio Bellacosa Mainframe (Boss Fight)

Construa uma aplicação semelhante a um sistema bancário contendo:

  • Login

  • Menu Principal

  • Consulta Cliente

  • Inclusão

  • Alteração

  • Exclusão

  • Paginação PF7/PF8

  • Help PF1

  • Mensagens de erro

  • COMMAREA

  • TSQ para paginação

  • DB2 (simulado)

  • CEDF para debug

Se conseguir completar este laboratório, você estará muito próximo do nível esperado de um Desenvolvedor COBOL/CICS Júnior pronto para atuar em projetos corporativos IBM Z.


sexta-feira, 19 de junho de 2026

🚀 CICS BMS para Padawans: Do Primeiro MAP ao Mundo Real dos Sistemas Bancários

Selecione um artigo ☕