Translate

Mostrar mensagens com a etiqueta perform. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta perform. Mostrar todas as mensagens

domingo, 30 de novembro de 2025

💥 IDCAMS: O “Canivete Suíço” do z/OS que Todo Dev COBOL Senior Usa… Mas Poucos REALMENTE Dominam

 

Bellacosa Mainframe apresenta o IDCAMS nos dataset VSAM

💥 IDCAMS: O “Canivete Suíço” do z/OS que Todo Dev COBOL Senior Usa… Mas Poucos REALMENTE Dominam

Se você trabalha com COBOL em ambiente IBM z/OS, existe uma ferramenta silenciosa que executa tarefas críticas todos os dias — e, muitas vezes, sem o devido respeito: o IDCAMS.

Você pode até usar DELETE ou DEFINE no automático… mas dominar o IDCAMS é outro nível. É aqui que você deixa de ser apenas um desenvolvedor COBOL experiente… e passa a ser um engenheiro de dados raiz do mainframe.


🧬 Origem e História: De VSAM à Alma do z/OS

O IDCAMS nasceu junto com o VSAM na década de 70, substituindo métodos mais antigos como ISAM e BDAM.

Ele faz parte do componente Access Method Services (AMS) e foi projetado para:

  • Criar e gerenciar datasets VSAM
  • Manipular catálogos (ICF Catalog)
  • Executar operações administrativas com alta precisão

💡 Curiosidade:
O IDCAMS foi uma das primeiras ferramentas no mundo a permitir gerenciamento declarativo de dados estruturados — algo que hoje vemos em bancos NoSQL modernos.


🧠 O Papel do IDCAMS na Vida do Dev COBOL

Você pode escrever o COBOL mais elegante do mundo… mas se o VSAM estiver mal definido, esquece.

O IDCAMS é responsável por:

  • Estrutura física do arquivo
  • Parâmetros de performance (CI/CA)
  • Chaves e índices
  • Reorganização (REPRO)
  • Diagnóstico de problemas

👉 Em outras palavras:
COBOL lê e escreve… IDCAMS decide COMO isso acontece.


🛠️ Comandos Essenciais (e o que ninguém te conta)

🔹 DEFINE CLUSTER (o nascimento do VSAM)

//STEP01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER(NAME(MEU.VSAM.KSDS)
INDEXED
KEYS(10 0)
RECORDSIZE(80 80)
CYLINDERS(5 2)
FREESPACE(10 10)
)
/*

💣 Insight avançado:

  • FREESPACE mal configurado = split constante = performance degradada
  • RECORDSIZE impacta diretamente o número de registros por CI

🔹 REPRO (o “COPY inteligente”)

REPRO INFILE(ENTRADA) OUTDATASET(MEU.VSAM.KSDS)

🔥 Aqui mora um dos maiores poderes:

  • Pode migrar dados entre PS ↔ VSAM
  • Pode ser usado como backup lógico
  • Suporta filtros e conversões indiretas

💡 Easter Egg:
Pouca gente sabe, mas REPRO pode ser usado para “reorganizar” um VSAM sem usar utilitários pagos.


🔹 LISTCAT (o raio-X do dataset)

LISTCAT ENT(MEU.VSAM.KSDS) ALL

🧠 Aqui você descobre:

  • CI/CA size
  • Número de splits
  • Estatísticas reais de uso

👉 Dica de ouro:
Use LISTCAT antes de culpar o COBOL.


🔹 DELETE (simples… e perigoso)

DELETE MEU.VSAM.KSDS CLUSTER

💀 Sem confirmação. Sem rollback. Sem piedade.


🧪 Laboratório Prático (nível Bellacosa)

🎯 Objetivo:

Criar, carregar e validar um VSAM na prática


🥇 Passo 1 — Criar o cluster

DEFINE CLUSTER(NAME(LAB.VSAM.KSDS)
INDEXED
KEYS(5 0)
RECORDSIZE(50 50)
TRACKS(10 5)
)

🥈 Passo 2 — Popular com REPRO

REPRO INFILE(INPUT) OUTDATASET(LAB.VSAM.KSDS)

🥉 Passo 3 — Validar estrutura

LISTCAT ENT(LAB.VSAM.KSDS) ALL

🧨 Passo 4 — Simular erro clássico

  • Criar com chave errada
  • Rodar COBOL
  • Observar FILE STATUS 22 ou 23

👉 Agora sim você aprende de verdade.


🤯 Curiosidades que Só Veteranos Sabem

  • IDCAMS retorna códigos próprios, mas também influencia FILE STATUS do COBOL
  • Um VSAM mal definido pode gerar:
    • Loop de I/O
    • CPU spike
    • Deadlock em CICS
  • DEFINE mal feito pode custar mais caro que um SQL ruim no IBM Db2

🧩 Easter Eggs & Segredos

🥚 1. PRINT Dataset via IDCAMS

PRINT INDATASET(MEU.VSAM.KSDS) CHARACTER

👉 Sim, dá pra “ver” o conteúdo sem COBOL


🥚 2. ALTER sem recriar

ALTER MEU.VSAM.KSDS NEWNAME(NOVO.NOME)

🔥 Pouco usado, mas extremamente poderoso


🥚 3. VERIFY

Valida integridade do VSAM — essencial após falhas


⚖️ Pontos Fortes vs Limitações

✅ Fortes

  • Nativo do z/OS
  • Extremamente poderoso
  • Sem custo adicional
  • Alta performance

❌ Limitações

  • Sintaxe pouco amigável
  • Documentação densa
  • Erros pouco intuitivos

🧠 Comentário de quem vive isso

O IDCAMS é aquele tipo de ferramenta que:

  • Quem não domina → sofre
  • Quem domina → resolve incidente em minutos
  • Quem ignora → vira refém de storage/admin

👉 E aqui vai a verdade direta:

“Se você é dev COBOL senior e não entende IDCAMS profundamente… você ainda está jogando no modo easy.”


🚀 Conclusão: IDCAMS é Poder — e Responsabilidade

Dominar IDCAMS significa:

  • Criar VSAM performático
  • Evitar gargalos invisíveis
  • Diagnosticar problemas reais
  • Ganhar respeito no ambiente mainframe

Ele não é só um utilitário.

👉 Ele é o alicerce invisível de tudo que seu COBOL faz.

💥 TABELA COMPLETA — PARÂMETROS IDCAMS (NA PRÁTICA)


🧱 🔹 DEFINE CLUSTER (o mais importante de todos)

ParâmetroTipoDescriçãoInsight de campo
NAMEobrigatórioNome do datasetBase de tudo
INDEXEDtipoKSDSMais comum
NONINDEXEDtipoESDSSequencial
LINEARtipoLDSUsado por DB2
KEYS(length offset)obrigatório (KSDS)Define chaveErro aqui = desastre
RECORDSIZE(avg max)obrigatórioTamanho registroImpacta CI
FREESPACE(ci ca)opcionalEspaço livreEvita split
CYLINDERS(primary secondary)opcionalAlocaçãoProdução padrão
TRACKSopcionalAlternativa a cilindrosMais granular
SHAREOPTIONS(x y)opcionalConcorrênciaCICS crítico
REUSEopcionalReutilizaçãoBatch útil
SPEEDopcionalMais rápidoSem recovery
RECOVERYopcionalMais seguroDefault prod
UNIQUEKEYopcionalChave únicaDefault KSDS
NONUNIQUEKEYopcionalPermite duplicidadeMuito usado
BUFFERSPACEopcionalMemóriaRaro
CISZopcionalControl IntervalPerformance tuning
VOLUMESopcionalVolume físicoStorage define
ERASEopcionalSegurançaLGPD vibes 😄
CONTROLINTERVALSIZEopcionalMesmo que CISZNome longo
IMBEDopcionalÍndice embutidoRaro hoje
REPLICATEopcionalReplica índiceLegado
LOG / NOLOGopcionalLoggingBatch tuning

🧩 🔹 DEFINE DATA / INDEX

ParâmetroDescriçãoObservação
NAMENome componenteObrigatório
CYLINDERS / TRACKSEspaçoSeparação física
VOLUMESVolumeMulti-volume
CONTROLINTERVALSIZECI sizeAjuste fino
FREESPACEEspaço livreMesmo conceito
BUFFERSPACEMemóriaPouco usado

💡 Insight:
Separar DATA e INDEX melhora performance em ambientes grandes.


🔄 🔹 REPRO (o ETL raiz do mainframe)

ParâmetroDescriçãoUso real
INFILEEntrada DDBatch clássico
OUTFILESaída DD
INDATASETEntrada diretaAlternativa
OUTDATASETSaída direta
REPLACESobrescreveMuito usado
COUNT(n)Limite registrosTeste
SKIP(n)Pula registrosDebug
FROMKEYInício por chaveVSAM
TOKEYFim por chaveVSAM
KEYSIntervaloFiltro
LOG / NOLOGLoggingPerformance
FASTLOADCarga rápidaGrandes volumes

💣 Insight avançado:
REPRO pode substituir ferramentas ETL simples.


🔍 🔹 LISTCAT (diagnóstico avançado)

ParâmetroDescriçãoUso
ENTRY / ENTNome datasetDireto
ALLTudoSempre usar
LEVELPrefixoListagem
HISTORYHistóricoAuditoria
VOLUMEInfo volumeStorage
ALLOCATIONEspaçoCapacidade

💡 Dica:
LISTCAT é seu “debugger de storage”.


❌ 🔹 DELETE

ParâmetroDescriçãoRisco
CLUSTERRemove tudoNormal
DATASó dadosAvançado
INDEXSó índiceRaro
PURGEIgnora proteção💀 perigoso
ERASEApaga fisicamenteSegurança
NOSCRATCHRemove catálogo apenasDeixa dados

🔧 🔹 ALTER

ParâmetroDescriçãoUso
NEWNAMERenomeiaMuito usado
VOLUMESMuda volumeStorage
BUFFERSPACEAjuste memóriaRaro

🖨️ 🔹 PRINT

ParâmetroDescriçãoUso
INDATASETDatasetBase
CHARACTERTextoDebug
HEXHexadecimalDebug avançado
DUMPDump brutoForense
COUNTLimiteTeste

🧪 🔹 VERIFY

ParâmetroDescrição
DATASETDataset alvo
RECOVERTenta corrigir

👉 Essencial após crash


⚙️ 🔹 Parâmetros via DD (tuning real)

ParâmetroOndeDescrição
AMPDDParâmetros avançados
BUFNDAMPBuffers de dados
BUFNIAMPBuffers de índice
STRNOAMPConcorrência
OPTCDAMPModo acesso
MACRFAMPMétodo acesso

🧠 🔹 Parâmetros menos conhecidos (nível ninja)

ParâmetroDescriçãoQuando usar
IMBEDÍndice dentro do CIPequenos datasets
REPLICATEReplica índiceLegado
LOGLoggingAuditoria
NOLOGSem logPerformance
SPEEDPerformanceBatch
RECOVERYSegurançaProd

🤯 RELAÇÃO COM COBOL (o que ninguém explica)

Tudo isso impacta diretamente:

  • FILE STATUS
  • Tempo de I/O
  • Locks (CICS)
  • CPU usage

👉 Exemplo real:

  • FREESPACE errado → split → slowdown → batch estoura janela

⚖️ RESUMO ESTRATÉGICO

👉 Os parâmetros mais críticos na prática:

  1. KEYS
  2. RECORDSIZE
  3. FREESPACE
  4. CISZ
  5. SHAREOPTIONS
  6. BUFND / BUFNI

🧨 VERDADE FINAL (modo Bellacosa)

“IDCAMS não é sobre comando…
é sobre controle físico dos dados.”

Se você domina isso:

  • Você prevê problema antes de acontecer
  • Você resolve incidente sem depender de ninguém
  • Você vira referência no time 



domingo, 13 de setembro de 2015

🧠 Structured Programming (Dijkstra) — A Revolução Silenciosa que Salvou o Software

 

Bellacosa Mainframe fala sobre o legado Dijkstra : Structured Programming

🧠 Structured Programming (Dijkstra) — A Revolução Silenciosa que Salvou o Software

☕ Um Café no Bellacosa Mainframe

Nos primórdios da programação, escrever código era mais parecido com montar uma gambiarra elétrica do que com engenharia. Fios cruzados, saltos imprevisíveis e um único erro podia derrubar tudo. Foi nesse caos que surgiu uma ideia simples — e revolucionária:

💡 Programas deveriam ser estruturados, previsíveis e compreensíveis.

O nome por trás dessa virada?


👉 Edsger W. Dijkstra — um dos maiores gênios da computação.


🏛️ Antes da Revolução: O Velho Oeste do Código

Nos anos 50 e início dos 60:
  • Programas eram gigantescos blocos lineares

  • Cheios de saltos incondicionais

  • Manutenção era um pesadelo

  • Bugs eram quase impossíveis de rastrear

O principal culpado? 😈

👉 O famigerado GOTO

Um comando que dizia:

“Pare o que está fazendo e vá executar ali no meio do programa.”

Resultado: o famoso spaghetti code 🍝


💣 A Carta que Mudou Tudo

Em 1968, Dijkstra publicou uma carta histórica:

👉 “Go To Statement Considered Harmful”

Essa publicação virou um terremoto intelectual na área.

Ele não estava apenas criticando um comando — estava propondo uma nova forma de pensar software.


🧱 O Conceito Central: Programas Devem Ter Estrutura

Structured Programming defende que todo programa pode ser construído usando apenas três estruturas de controle:

1️⃣ Sequência

Executar instruções na ordem.

A
B
C

2️⃣ Seleção (Decisão)

IF condição
A
ELSE
B
END-IF

3️⃣ Iteração (Repetição)

WHILE condição
A
END-WHILE

💡 Só isso. Sem saltos caóticos.


🏗️ O Impacto no Mainframe

https://i.ebayimg.com/images/g/UP4AAOSwjTlnBJCl/s-l1200.png
Folha de Codificacao COBOL
https://www.leapwork.com/hs-fs/hubfs/Blog%20Images/MicrosoftTeams-image.png?height=329&name=MicrosoftTeams-image.png&width=329
Terminal 3270
https://attachment.tapatalk-cdn.com/2988/202003/14238_34a44305c61df33e1c21eb07e30ba66d.png
Programa COBOL

Structured Programming influenciou diretamente:

  • COBOL moderno (COBOL-74 em diante)

  • Pascal (projetado para ensino estruturado)

  • C

  • Ada

  • praticamente todas as linguagens posteriores

No COBOL, surgiram práticas como:

  • PERFORM estruturado

  • END-IF, END-PERFORM

  • eliminação de GO TO sempre que possível

💬 Nos ambientes corporativos, isso foi decisivo para sistemas críticos sobreviverem décadas.


☕ Comentário Bellacosa Mainframe

Se você já abriu um programa legado cheio de:

GO TO ERRO-999
GO TO SAIDA
GO TO VOLTA-LOOP
GO TO TRATA-ABEND

Você sabe exatamente por que Dijkstra virou uma lenda 😅

Structured Programming não é frescura acadêmica.

👉 É o que permite um sistema bancário rodar 40 anos sem colapsar.


🕵️ Curiosidades e Bastidores

🧩 1) Dijkstra odiava computadores “bagunçados”

Ele acreditava que programação deveria ser uma disciplina matemática rigorosa.

Chegou a dizer que:

“Testar pode mostrar a presença de bugs, nunca sua ausência.”


✍️ 2) Ele escrevia à mão

Sim — muitos de seus algoritmos eram desenvolvidos no papel antes de qualquer implementação.


🧮 3) Também criou o algoritmo de caminho mínimo

👉 O famoso Algoritmo de Dijkstra, base de roteamento e GPS.


🧨 4) Nem todo mundo gostou da crítica ao GOTO

Programadores da época reagiram com:

  • indignação

  • sarcasmo

  • artigos contra

  • debates acalorados

Hoje parece óbvio. Na época, foi uma guerra cultural.


🐣 Easter Egg Mainframe

Mesmo em sistemas altamente estruturados…

👉 GO TO nunca morreu completamente.

Em COBOL legado, ele aparece como:

  • fuga de erro

  • tratamento de exceções improvisado

  • controle de fluxo antigo

  • patches históricos

É o equivalente ao:

“Não encoste nisso que está funcionando.”


🤫 Fofoquice Histórica

Dijkstra não gostava de popularização excessiva da programação.

Ele acreditava que:

👉 nem todos deveriam programar
👉 programação é atividade intelectual profunda
👉 más práticas se espalham rápido demais

Hoje, com milhões de devs no mundo… imagine o que ele diria 😄


🚀 Por que isso ainda importa HOJE?

Structured Programming é a base de:

  • Clean Code

  • Arquitetura de Software

  • Boas práticas corporativas

  • Programação orientada a objetos

  • Sistemas críticos

  • Segurança e confiabilidade

Sem essa revolução, software moderno seria inviável.


✅ Conclusão

Structured Programming não é apenas um capítulo da história.

👉 É o alicerce invisível de praticamente todo software sério já escrito.

No mundo mainframe, especialmente, ela foi a diferença entre:

💀 sistemas incontroláveis
e
🏦 infraestruturas que sustentam economias inteiras

sábado, 10 de julho de 2010

🔥 PERFORM no COBOL: você manda ou ele manda em você?

 

Bellacosa Mainframe apresenta o comando Perform em COBOL

🔥 PERFORM no COBOL: você manda ou ele manda em você?

(Um café no Bellacosa Mainframe, para padawans e cavaleiros Jedi do z/OS)

Você já deu o spoiler certo: PERFORM é o maestro do COBOL.
Quem domina PERFORM escreve código legível, previsível, auditável e aceito em produção.
Quem não domina… acaba criando um GO TO disfarçado com terno e gravata 😅

Vamos organizar, aprofundar e elevar o nível do que você trouxe — com exemplos reais, pegadinhas, DB2, CICS e dicas de campo.



COBOL e o Perform

🧠 Origem e filosofia do PERFORM

Nos anos 70, COBOL sofreu com o “spaghetti code” (muito GO TO).
O PERFORM surgiu como a resposta estruturada, permitindo:

  • Modularidade

  • Fluxo previsível

  • Testabilidade

  • Facilidade de manutenção (sim, o auditor agradece)

👉 Regra de ouro mainframe:

“Se dá pra fazer com PERFORM, NÃO use GO TO.”


Comando Perform e suas variações em COBOL
1️⃣ PERFORM Simples — chamada limpa e direta

📌 O que faz

Executa um parágrafo uma única vez.

PERFORM 0100-CALCULA-IMPOSTO

🧪 Exemplo real

0100-CALCULA-IMPOSTO. COMPUTE WS-IMPOSTO = WS-VALOR * 0.15. 0100-EXIT. EXIT.

💡 Dica Bellacosa

  • Sempre crie o -EXIT

  • Facilita debug, tracing e manutenção futura


2️⃣ PERFORM VARYING — o FOR do COBOL

📌 O que faz

Loop com contador explícito.

PERFORM VARYING WS-CONT FROM 1 BY 1 UNTIL WS-CONT > 10 PERFORM 0300-PROCESSA-REGISTRO END-PERFORM

🧪 Exemplo com tabela interna

PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > WS-QTDE MOVE WS-TABELA(IDX) TO WS-REG PERFORM 0400-VALIDA-DADO END-PERFORM

⚠️ Pegadinha clássica

❌ Alterar WS-CONT dentro do parágrafo executado
✔️ Deixe o controle só no PERFORM


3️⃣ PERFORM UNTIL — o rei da leitura de arquivos

📌 O que faz

Repete até a condição ser verdadeira
(atenção: condição é avaliada antes)

PERFORM UNTIL WS-FIM = 'SIM' READ ARQ-ENTRADA AT END MOVE 'SIM' TO WS-FIM NOT AT END PERFORM 0500-PROCESSA-REG END-READ END-PERFORM

🧠 Padrão mainframe clássico

  • Batch

  • VSAM

  • Sequential files

  • DB2 cursors (já já)


4️⃣ PERFORM TIMES — simples, direto e elegante

📌 O que faz

Executa um bloco N vezes, sem contador explícito.

PERFORM 12 TIMES ADD 1 TO WS-TOTAL END-PERFORM

📌 Quando usar

  • Simulações

  • Inicializações

  • Processos fixos

❌ Quando NÃO usar

  • Quando você precisa do índice (use VARYING)


5️⃣ PERFORM THRU — tradição mainframe raiz 🧓💾

📌 O que faz

Executa uma sequência contínua de parágrafos

PERFORM 1000-INICIALIZA THRU 1099-INICIALIZA-EXIT

🧪 Estrutura clássica

1000-INICIALIZA. OPEN INPUT ARQ-ENTRADA PERFORM 1100-CARREGA-PARAMETROS. 1099-INICIALIZA-EXIT. EXIT.

⚠️ Regra sagrada

Nunca coloque código fora da sequência THRU

Senão…
🔥 comportamento imprevisível
🔥 bugs fantasma
🔥 chamado em produção às 3h da manhã


🟦 PERFORM + DB2 (exemplo real)

Cursor com PERFORM UNTIL

PERFORM UNTIL SQLCODE NOT = 0 EXEC SQL FETCH C1 INTO :WS-COL1, :WS-COL2 END-EXEC IF SQLCODE = 0 PERFORM 2000-PROCESSA-LINHA END-IF END-PERFORM

👉 Padrão de ouro DB2 COBOL


🟩 PERFORM + CICS

PERFORM 3000-VALIDA-MAP PERFORM 3100-PROCESSA-NEGOCIO PERFORM 3200-ENVIA-RESPOSTA

✔ Modular
✔ Legível
✔ Fácil de testar




🧨 Erros comuns em produção

ErroImpacto
PERFORM THRU mal delimitadoExecução inesperada
Alterar contador no parágrafoLoop infinito
Falta de EXITDebug caótico
GO TO misturado com PERFORMCódigo ilegível

🧙 Curiosidades & Easter Eggs

🥚 Em COBOL antigo, PERFORM THRU era o padrão absoluto
🥚 Auditores AMAM código com PERFORM bem estruturado
🥚 Muitos shops ainda proíbem GO TO por norma interna
🥚 PERFORM é um dos motivos do COBOL sobreviver tão bem até hoje


🎓 Regra final para padawans

Se você entende PERFORM, você entende o fluxo do COBOL.
Se entende o fluxo, domina Batch, DB2 e CICS.