Translate

quinta-feira, 22 de agosto de 2024

☕💥 VSAM sem Mistério: Do Zero ao Jedi dos Datasets — O LAB que vai destravar sua mente Mainframe!

 

Bellacosa Mainframe VSAM em primeiros passos para padawans

☕💥 VSAM sem Mistério: Do Zero ao Jedi dos Datasets — O LAB que vai destravar sua mente Mainframe!

Se você é um padawan COBOL tentando entender VSAM e ainda acha que KSDS é nome de sindicato… chegou a hora da virada.

Aqui não tem teoria chata. É mão na massa, com JCL, IDCAMS, conceitos e aquele tempero Bellacosa: história + prática + sacadas que só quem já tomou dump às 3 da manhã entende 😄


🧠 ANTES DE COMEÇAR — O MAPA DA FORÇA (VSAM em 1 minuto)

VSAM (Virtual Storage Access Method) é o método de acesso mais poderoso do z/OS para dados estruturados.

👉 Tipos principais:

  • ESDS → Sequencial (sem chave)
  • KSDS → Indexado (com chave)
  • RRDS → Acesso direto por número (RRN)

👉 Conceitos fundamentais:

  • CI (Control Interval) → menor unidade de I/O
  • CA (Control Area) → conjunto de CIs
  • INDEX → árvore B usada no KSDS

🧪 LAB 1 — Criando seu primeiro ESDS (o “arquivo raiz”)

🎯 Objetivo

Criar um dataset sequencial VSAM.

🔧 JCL + IDCAMS

//ESDSJOB JOB (ACCT),'LAB ESDS',CLASS=A,MSGCLASS=X
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER(NAME(LAB.VSAM.ESDS)
RECORDSIZE(80 80)
TRACKS(1 1)
CISZ(4096)
NONINDEXED)
/*

💡 Insights Bellacosa

  • ESDS não tem chave → leitura sequencial pura
  • Ideal para logs, trilhas, arquivos históricos
  • CISZ(4096) → tuning começa aqui!

🧪 LAB 2 — KSDS: o cérebro do VSAM (com índice)

🎯 Objetivo

Criar um dataset indexado com chave.

🔧 JCL

//KSDSJOB JOB (ACCT),'LAB KSDS',CLASS=A,MSGCLASS=X
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER(NAME(LAB.VSAM.KSDS)
RECORDSIZE(80 80)
KEYS(10 0)
INDEXED
TRACKS(1 1)
CISZ(4096))
/*

💡 Insights de guerra

  • KEYS(10 0) → chave começa na posição 0 com tamanho 10
  • KSDS usa árvore B (index) → acesso rápido tipo DB2-lite
  • Pode acessar:
    • sequencial
    • random (pela chave)

🧪 LAB 3 — RRDS: acesso direto estilo “memória RAM”

🎯 Objetivo

Criar dataset por número relativo.

🔧 JCL

//RRDSJOB JOB (ACCT),'LAB RRDS',CLASS=A,MSGCLASS=X
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER(NAME(LAB.VSAM.RRDS)
RECORDSIZE(80 80)
NUMBERED
TRACKS(1 1)
CISZ(4096))
/*

💡 Sacada ninja

  • Acesso via RRN (Relative Record Number)
  • Tipo array:
    • Registro 1
    • Registro 2
    • Registro 3…

👉 Muito usado em sistemas antigos de alta performance


🔍 LAB 4 — Explorando INDEX (o segredo do KSDS)

🎯 Ver o INDEX

//LISTCAT JOB (ACCT),'LISTCAT',CLASS=A,MSGCLASS=X
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
LISTCAT ENT(LAB.VSAM.KSDS) ALL
/*

💡 O que observar:

  • INDEX LEVELS
  • CI/CA splits
  • FREESPACE

👉 Aqui você começa a pensar como performance engineer 😎


⚙️ LAB 5 — Brincando com CI e CA (onde mora a performance)

🎯 Criar KSDS com tuning

DEFINE CLUSTER(NAME(LAB.VSAM.KSDS.TUNED)
RECORDSIZE(80 80)
KEYS(10 0)
CISZ(8192)
FREESPACE(20 10)
INDEXED)

💡 Tradução prática

  • CISZ(8192) → menos I/O (mais dados por leitura)
  • FREESPACE(20 10):
    • 20% no CI
    • 10% no CA

👉 Evita CA SPLIT (o terror do desempenho)


🔥 LAB 6 — Carga de dados (REPRO)

//LOADJOB JOB (ACCT),'LOAD',CLASS=A,MSGCLASS=X
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//INFILE DD *
0000000001CLIENTE001
0000000002CLIENTE002
/*
//OUTFILE DD DSN=LAB.VSAM.KSDS,DISP=SHR
//SYSIN DD *
REPRO INFILE(INFILE) OUTFILE(OUTFILE)
/*

💻 LAB 7 — COBOL acessando VSAM (o momento Jedi)

📌 Exemplo KSDS

SELECT ARQ-KSDS ASSIGN TO 'LAB.VSAM.KSDS'
ORGANIZATION IS INDEXED
ACCESS MODE IS RANDOM
RECORD KEY IS WS-KEY.

FD ARQ-KSDS.
01 REGISTRO.
05 WS-KEY PIC X(10).
05 WS-DADOS PIC X(70).

🧠 MENTALIDADE DE PRODUÇÃO (ouro puro)

👉 ESDS = simples, rápido, bruto
👉 KSDS = flexível, poderoso, mais caro
👉 RRDS = ultra rápido, mas limitado

👉 Problemas reais que você vai ver:

  • CI SPLIT
  • CA SPLIT
  • Fragmentação
  • Performance degradando com o tempo

⚡ DESAFIO FINAL (modo Bellacosa ON)

  1. Crie um KSDS com chave cliente
  2. Insira 100 registros
  3. Faça leitura random via COBOL
  4. Gere LISTCAT antes/depois
  5. Analise splits

👉 Se você fizer isso, você deixou de ser padawan.


FECHAMENTO

VSAM não é só dataset.

É:

  • engenharia de performance
  • organização de dados
  • base de sistemas críticos há décadas

E quando você entende CI, CA e INDEX…

👉 você começa a enxergar o mainframe como ele realmente é.


Sem comentários:

Enviar um comentário