Translate

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

terça-feira, 12 de maio de 2026

🔥☕ DB2 COMMANDS AVANÇADOS NO IBM Z — O QUE ESSES COMANDOS REALMENTE REVELAM SOBRE A SAÚDE DO MAINFRAME 💾🚨

 

Bellacosa Mainframe Db2 avançado para um sysprog

🔥☕ DB2 COMMANDS AVANÇADOS NO IBM Z — O QUE ESSES COMANDOS REALMENTE REVELAM SOBRE A SAÚDE DO MAINFRAME 💾🚨

A tela que você mostrou agora já entra em um nível MUITO mais avançado do DB2 z/OS.

Aqui não estamos mais falando apenas de:

-DIS THREAD(*)

Agora estamos entrando no território de:

  • troubleshooting pesado,

  • análise recovery,

  • pending states,

  • advisory states,

  • limbo pages,

  • tablespaces problemáticas,

  • diagnóstico profundo de storage DB2.

Esses são comandos típicos de:

  • DBA senior,

  • Sysprog,

  • suporte de produção crítica,

  • recovery team,

  • performance specialists.


🔥 CMD 1 — O “RAIO-X GLOBAL” DAS DATABASES

Comando

-DIS DB(*) SP(*) RESTRICT LIMIT(*)

💾 O QUE ELE FAZ?

Esse comando:

  • percorre TODAS as databases,

  • mostra TODOS os spaces,

  • filtra objetos em estado RESTRICT,

  • sem limite de quantidade.


🧠 EXPLICAÇÃO DOS PARÂMETROS

ParâmetroSignificado
DB(*)Todas as databases
SP(*)Todos os spaces
RESTRICTMostra objetos restritos
LIMIT(*)Sem limite de retorno

🚨 O QUE É RESTRICT?

Estados RESTRICT indicam:

  • objeto parcialmente indisponível,

  • utility incompleta,

  • recovery necessário,

  • inconsistência operacional.


💥 CENÁRIOS REAIS

Após falha de REORG

Você pode encontrar:

RESTRICT

indicando:

  • tablespace inconsistente.


Após falha LOAD

O objeto pode:

  • aceitar leitura,

  • mas bloquear update.


🔥 O QUE O SYSPOG PROCURA?

  • objetos presos,

  • utilities abandonadas,

  • estados recovery,

  • pendências ocultas.


🔥 CMD 2 — DISPLAY THREAD

Comando

-DIS THREAD(*)

💾 O COMANDO MAIS IMPORTANTE DO DB2

Esse comando mostra:

  • threads ativas,

  • conexões CICS,

  • batch,

  • TSO,

  • DDF,

  • waits,

  • CPU.


🚨 O QUE ANALISAR?

WAIT

Pode indicar:

  • lock,

  • I/O lento,

  • deadlock.


THREAD ZUMBI

Thread ativa sem progresso:

  • aplicação travada,

  • commit preso,

  • problema rede DDF.


THREAD MASSIVA

Uma única thread:

  • consumindo CPU absurda,

  • SQL ruim,

  • tablescan gigante.


🔥 CMD 3 — DISPLAY DATABASE OVERVIEW

Comando

-DISPLAY DATABASE(DSN8D13A) SPACE(*) OVERVIEW

💾 O QUE É OVERVIEW?

Mostra uma visão resumida:

  • status,

  • pendências,

  • utilities,

  • estados críticos.

Sem detalhar cada partição profundamente.


🎯 OBJETIVO

Obter diagnóstico rápido.

Muito usado em:

  • incidentes,

  • bridge call,

  • troubleshooting urgente.


💥 O QUE APARECE?

CampoSignificado
RWRead Write
RORead Only
STOPParado
UTUtility
CHKPCheck Pending

🚨 EXEMPLO REAL

Se aparecer:

UTRO

pode indicar:

  • utility rodando,

  • objeto somente leitura.


🔥 CMD 4 — LIST TABLESPACES SHOW DETAIL

Comando

-LIST TABLESPACES SHOW DETAIL

💾 O QUE ELE FAZ?

Lista:

  • tablespaces,

  • atributos,

  • detalhes físicos,

  • status internos.


🧠 INFORMAÇÕES IMPORTANTES

Pode mostrar:

  • DSSIZE,

  • PRIQTY,

  • SECQTY,

  • SEGSIZE,

  • bufferpool,

  • locksize,

  • partitioning.


🚨 MUITO USADO PARA

  • capacity planning,

  • tuning,

  • growth analysis,

  • storage troubleshooting.


💥 O DBA PROCURA

Tablespace gigante

Pode exigir:

  • reparticionamento,

  • compressão,

  • REORG.


Bufferpool inadequado

Pode gerar:

  • I/O excessivo,

  • CPU alta.


🔥 CMD 5 — DISPLAY DATABASE COM ADVISORY

Comando

-DISPLAY DATABASE(DSN8D13A) SPACENAM(*) LIMIT(*) ADVISORY(ARBDP,AREO*)

💾 ESSE É PESADO 😄

Aqui entramos em:

estados advisory.


🧠 O QUE É ADVISORY?

Não significa falha imediata.

Significa:

  • DB2 recomenda ação corretiva.


🚨 ARBDP

Advisory Rebuild Pending

Indica:

  • índice precisa rebuild.

Pode ocorrer:

  • após recover,

  • após falha,

  • inconsistência index.


🚨 AREO*

Advisory REORG Pending

O DB2 recomenda:

REORG

💥 POR QUE ISSO IMPORTA?

Mesmo funcionando:

  • performance degrada,

  • overflow aumenta,

  • access path piora,

  • CPU sobe.


🔥 SINTOMA CLÁSSICO

Aplicação:

“está ficando lenta”

DBA roda:

-DISPLAY DATABASE ... ADVISORY

e encontra:

AREO*

🔥 CMD 6 — DISPLAY DATABASE GLOBAL ADVISORY

Comando

-DISPLAY DATABASE(*) SPACENAM(*) LIMIT(*) ADVISORY

💾 O “CAÇA-PROBLEMAS” GLOBAL

Esse comando varre:

TODO o subsystem DB2.


🚨 O QUE ELE PROCURA?

  • AREO

  • ARBDP

  • RBDP

  • CHKP

  • COPY

  • pending states


💥 MUITO USADO EM:

  • health checks,

  • automação,

  • auditoria,

  • pré-manutenção,

  • pré-upgrade.


🔥 EM GRANDES BANCOS

Esse comando roda:

  • automaticamente,

  • várias vezes ao dia.


🔥 CMD 7 — LPL (Logical Page List)

Comando

-DISPLAY DATABASE(DSN8D13A) SPACENAM(*) LIMIT(*) LPL

💾 AGORA ENTRAMOS NO MODO “CIRURGIA CARDÍACA” 😄

LPL =

Logical Page List.


🚨 O QUE É LPL?

Lista páginas:

  • danificadas,

  • inconsistentes,

  • com problema recovery.


💥 COMO UMA PÁGINA ENTRA EM LPL?

  • falha I/O,

  • corrupção,

  • abend,

  • falha hardware,

  • escrita incompleta,

  • recover interrompido.


🚨 IMPACTO

Objetos em LPL:

  • podem ficar indisponíveis,

  • gerar SQLCODE,

  • causar abends,

  • travar aplicações.


🔥 O DBA PROCURA

Quantidade de páginas afetadas

Se poucas:

  • recover localizado.

Se muitas:

  • desastre potencial.


💣 COMANDOS ASSOCIADOS

Após detectar LPL:

Pode ser necessário:

-RECOVER
-START DB(...)
-STOP DB(...)

🔥 O QUE ESSA TELA ENSINA?

Essa tela é praticamente:

um mapa de sobrevivência do DB2.

Ela mostra:

  • diagnóstico,

  • recovery,

  • saúde,

  • inconsistência,

  • tuning,

  • pending states,

  • gargalos ocultos.


☕ A GRANDE VERDADE DO DB2 z/OS

O DB2 raramente “morre do nada”.

Antes do desastre ele:

  • avisa,

  • marca pending,

  • cria advisory,

  • registra utility,

  • sinaliza REORG,

  • aponta rebuild,

  • mostra waits,

  • denuncia locks.

O problema é:

pouca gente olha os comandos 😄


🚀 O QUE UM SYSPOG VETERANO FARIA?

Sequência clássica:

-DIS THREAD(*)
-DIS DB(*) SP(*) RESTRICT
-DIS UTIL(*)
-DIS LOG
-DIS BPOOL(*)
-DIS DATABASE(*) ADVISORY

Em poucos minutos ele consegue enxergar:

  • saúde do subsystem,

  • pressão operacional,

  • risco recovery,

  • gargalos,

  • objetos degradados,

  • ameaças à produção.

E isso…
diretamente do velho terminal 3270 💾🔥

terça-feira, 5 de maio de 2026

🔥☕ PACKAGE, PLAN, DBRM E O SUBMUNDO DA COMPILAÇÃO Db2 — O GUIA PADAWAN DO COBOL MAINFRAME ☕🔥

 

Bellacosa Mainframe explica como funciona um programa COBOL com DB2

🔥☕ PACKAGE, PLAN, DBRM E O SUBMUNDO DA COMPILAÇÃO Db2 — O GUIA PADAWAN DO COBOL MAINFRAME ☕🔥

Todo programador COBOL iniciante passa por isso.

Você escreve:

EXEC SQL
SELECT *
FROM EMPLOYEE
END-EXEC.

compila…

e de repente aparecem criaturas malignas como:

  • DBRM
  • PACKAGE
  • PLAN
  • BIND
  • DSNHPC
  • SQLCODE -805
  • SQLCODE -818

E o padawan pensa:

“Mas eu só queria fazer um SELECT…”

☕🔥

Então vamos entrar no verdadeiro submundo do Db2 z/OS.


☕ O MAIOR SEGREDO DO Db2

O Db2 NÃO executa SQL diretamente do fonte COBOL.

Ele precisa:

  • analisar SQL
  • validar objetos
  • escolher access path
  • gerar runtime structures

Por isso existe toda a cadeia:

SOURCE

PRECOMPILE

DBRM

COMPILE

LINK

BIND PACKAGE

BIND PLAN

RUN

🔥 VISÃO GERAL DA ARQUITETURA


☕ SOURCE COBOL

Seu programa original.

Exemplo:

EXEC SQL
SELECT EMPNO
INTO :WS-EMPNO
FROM EMPLOYEE
END-EXEC.

Dataset típico:

USERID.COBOL.SOURCE(MEUCOB)

🔥 STEP 1 — PRECOMPILE

Programa usado:

//DB2PC EXEC PGM=DSNHPC

☕ O QUE É O DSNHPC?

É o:

Db2 PRECOMPILER

🔥 O QUE ELE FAZ?

Ele:

✅ encontra EXEC SQL
✅ valida sintaxe SQL
✅ remove SQL do COBOL
✅ gera COBOL expandido
✅ gera DBRM


☕ RESULTADO DO PRECOMPILE

Saídas:

SaídaFunção
COBOL expandidoserá compilado
DBRMusado no BIND

🔥 O QUE É O DBRM?

DBRM =

DATABASE REQUEST MODULE

☕ PENSE NO DBRM COMO:

“o extrato SQL do seu programa”

Ele contém:

  • SQL do programa
  • informações internas Db2
  • metadados SQL

🔥 O DBRM NÃO É EXECUTÁVEL

Isso é importante.

Ele NÃO roda.

Ele apenas alimenta o BIND.


☕ ONDE O DBRM É SALVO?

Normalmente em:

//DBRMLIB DD DSN=USERID.DBRM.LIB(MEUPRG)

Dataset típico:

USERID.DBRM.LIB

Tipo:

PDS ou PDSE

🔥 EXEMPLO REAL DE PRECOMPILE

//DB2PC EXEC PGM=DSNHPC,
// PARM=('HOST(IBMCOB),APOST')

☕ EXPLICANDO OS PARÂMETROS


HOST(IBMCOB)

Define linguagem COBOL IBM.


APOST

Aspas simples delimitam strings SQL.


SOURCE

Mantém fonte expandido legível.


XREF

Gera cross reference.


DATE(ISO)

Formato ISO de datas.


🔥 STEP 2 — COMPILE COBOL

Programa:

//COB EXEC PGM=IGYCRCTL

☕ O QUE ACONTECE?

Agora o compilador COBOL compila:

o COBOL expandido gerado pelo precompiler

🔥 ELE NÃO COMPILA MAIS EXEC SQL

Porque o precompiler já removeu.


☕ SAÍDA DO COMPILE

Gera:

OBJECT MODULE

temporário.


🔥 STEP 3 — LINK-EDIT

Programa:

//LKED EXEC PGM=IEWL

☕ O QUE O LINK FAZ?

Une:

  • objeto COBOL
  • bibliotecas runtime
  • chamadas Db2

🔥 RESULTADO

LOAD MODULE EXECUTÁVEL

☕ ONDE FICA O LOAD MODULE?

Exemplo:

//SYSLMOD DD DSN=USERID.LOADLIB(MEUPRG)

Dataset típico:

USERID.LOADLIB

🔥 AGORA ENTRA O VERDADEIRO MUNDO Db2

Até aqui temos apenas:

programa COBOL executável

Mas o Db2 ainda NÃO sabe nada sobre ele.


☕ STEP 4 — BIND PACKAGE

Programa:

//BIND EXEC PGM=IKJEFT01

🔥 O QUE É O PACKAGE?

PACKAGE é:

o SQL compilado e otimizado do programa

☕ O PACKAGE CONTÉM

✅ access paths
✅ SQL otimizado
✅ metadados
✅ permissões
✅ informações de runtime


🔥 QUEM CRIA O PACKAGE?

O comando:

BIND PACKAGE

☕ O BIND USA:

  • DBRM
  • catálogo Db2
  • índices
  • estatísticas
  • permissões

🔥 O ACCESS PATH NASCE AQUI

Db2 decide:

  • index scan?
  • tablespace scan?
  • join order?
  • sort?
  • parallelism?

☕ ONDE PACKAGE É ARMAZENADO?

No próprio catálogo Db2.

Tabelas internas como:

SYSIBM.SYSPACKAGE

🔥 NÃO FICA EM PDS

Isso pega MUITOS iniciantes.

PACKAGE NÃO fica em dataset.

Fica dentro do Db2.


☕ EXEMPLO DE BIND PACKAGE

DSN SYSTEM(DBCG)

BIND PACKAGE(MYCOLL)
MEMBER(MEUPRG)
ACTION(REPLACE)
ISOLATION(CS)
VALIDATE(BIND)
EXPLAIN(YES)

🔥 EXPLICANDO OS PARÂMETROS


PACKAGE(MYCOLL)

Collection/package name.


MEMBER(MEUPRG)

Nome do DBRM.


ACTION(REPLACE)

Substitui package antigo.


ISOLATION(CS)

Cursor Stability.


VALIDATE(BIND)

Valida objetos no bind.


EXPLAIN(YES)

Salva access path.


☕ STEP 5 — BIND PLAN

Agora vem o PLAN.


🔥 O QUE É O PLAN?

PLAN é:

um agrupador de packages

☕ ANTIGAMENTE

Db2 antigo usava:

PLAN + DBRM

🔥 Db2 MODERNO USA:

PLAN + PACKAGE

☕ O PLAN FUNCIONA COMO

“container lógico de execução”

🔥 EXEMPLO

BIND PLAN(MYPLAN)
PKLIST(MYCOLL.*)

☕ PKLIST

Lista packages autorizados.


🔥 ONDE O PLAN FICA?

Também no catálogo Db2.

Tabela:

SYSIBM.SYSPLAN

☕ EXECUÇÃO — RUN

Agora sim:

RUN PROGRAM(MEUPRG)
PLAN(MYPLAN)

🔥 O FLUXO EM EXECUÇÃO

Programa chama:

PLAN

PACKAGE

SQL

Db2 Engine

☕ ANALOGIA PADAWAN

Imagine:


☕ SOURCE

Receita escrita.


🔥 DBRM

Lista dos ingredientes.


☕ PACKAGE

Receita otimizada pelo chef.


🔥 PLAN

Cardápio do restaurante.


☕ LOAD MODULE

Cozinheiro executando.

☕🔥


🔥 ERROS MAIS FAMOSOS


☕ SQLCODE -805

O terror dos iniciantes.

PACKAGE NÃO ENCONTRADO

CAUSAS

✅ bind não executado
✅ collection errada
✅ package apagado
✅ plan errado


🔥 SQLCODE -818

TIMESTAMP MISMATCH

SIGNIFICA

LOAD MODULE ≠ PACKAGE atual.


ACONTECE QUANDO

recompila COBOL mas não rebinda package.


☕ SQLCODE -204

objeto não encontrado

NORMALMENTE

schema/qualifier errado.


🔥 SQLCODE -551

sem autorização

☕ COMO INVESTIGAR PROBLEMAS


🔥 VER PACKAGE

SELECT *
FROM SYSIBM.SYSPACKAGE
WHERE NAME = 'MEUPRG'

☕ VER PLAN

SELECT *
FROM SYSIBM.SYSPLAN
WHERE NAME = 'MYPLAN'

🔥 DISPLAY PACKAGE

-DISPLAY PACKAGE(*)

☕ O QUE O JUNIOR PRECISA ENTENDER


🔥 O COBOL NÃO EXECUTA SQL DIRETAMENTE


☕ O PACKAGE É O SQL “COMPILADO”


🔥 O PLAN ORGANIZA EXECUÇÃO


☕ O DBRM É A PONTE ENTRE FONTE E PACKAGE


🔥 O BIND DEFINE PERFORMANCE


☕ O ACCESS PATH NASCE NO BIND


🔥 O MAIOR SEGREDO DO Db2

Muitos problemas de produção NÃO estão no COBOL.

Estão em:

  • package inválido
  • bind errado
  • access path ruim
  • rebind problemático
  • estatísticas ruins
  • qualifier incorreto

☕ A VERDADEIRA MAGIA

Enquanto frameworks modernos escondem tudo…

o programador mainframe aprende:

  • como SQL realmente executa
  • como runtime funciona
  • como otimização nasce
  • como banco conversa com aplicação

E isso transforma um simples padawan COBOL…

num verdadeiro Jedi do Db2 z/OS. ☕🔥


sábado, 11 de outubro de 2025

🔥☕ DSN COMMAND E SUBCOMMANDS NO DB2 z/OS — A PORTA DE ENTRADA DO UNIVERSO DB2 NO MAINFRAME IBM Z 💾🚨

 

Bellacosa Mainframe configurado o Db2

🔥☕ DSN COMMAND E SUBCOMMANDS NO DB2 z/OS — A PORTA DE ENTRADA DO UNIVERSO DB2 NO MAINFRAME IBM Z 💾🚨

Se existe um comando que praticamente todo programador COBOL/DB2, DBA ou sysprog encontra cedo ou tarde no Mainframe, esse comando é:

DSN

O DSN é o processador de comandos do Db2 no z/OS e funciona como um processador TSO.
Em outras palavras:

ele abre uma sessão de comunicação direta com o DB2.

É a partir dele que:

  • executamos SQL,

  • fazemos BIND,

  • REBIND,

  • RUN,

  • SPUFI,

  • administramos packages,

  • executamos programas DB2,

  • controlamos aplicações.


🔥 O QUE É O COMANDO DSN?

Tradução

O comando TSO DSN inicia uma sessão DSN.


💾 EXEMPLO BÁSICO

No prompt TSO:

READY

digite:

DSN SYSTEM(DB9G)

🚀 O QUE ACONTECE?

Você entra no ambiente DB2:

DSN

Agora:

  • comandos DB2,

  • SQL,

  • BIND,

  • RUN

podem ser executados.


🧪 LABORATÓRIO 1 — ENTRANDO NO DB2

Passo 1

No TSO:

DSN SYSTEM(DB9G)

Passo 2

Você verá:

DSN

Passo 3

Teste um comando:

-DIS THREAD(*)

Passo 4

Saia da sessão:

END

🔥 END COMMAND

“Saindo do universo DB2”

Tradução

O subcomando END termina a sessão DSN e retorna ao TSO.


💾 EXEMPLO

END

🚀 RESULTADO

Você volta ao:

READY

🔥 IMPORTANTE — FOREGROUND E BACKGROUND

Os subcomandos DSN podem rodar:

  • foreground (interativo),

  • background (batch JCL).

Exceto:

SPUFI

que roda apenas no foreground ISPF.


🔥 ABEND

“Forçar um crash controlado”

Tradução

O subcomando ABEND termina a sessão DSN com abend X'04E'.


🚨 IMPORTANTE

IBM diz claramente:

use apenas sob orientação do suporte IBM.


💾 PARA QUE SERVE?

Diagnóstico profundo:

  • dumps,

  • análise interna,

  • debugging DB2.


🚨 EXEMPLO

ABEND

💥 RESULTADO

Gera:

  • dump,

  • encerramento anormal,

  • diagnóstico técnico.


🔥 BIND PACKAGE

“Criando o package executável do DB2”

Tradução

Constrói um package de aplicação.

O DB2:

  • registra descrição no catálogo,

  • salva package no directory,

  • remove versões antigas.


💾 O QUE É PACKAGE?

Package contém:

  • SQL compilado,

  • access path,

  • metadata otimizada.


🧪 LABORATÓRIO 2 — BIND PACKAGE

Passo 1 — Pré-compilar COBOL DB2

Gerar DBRM.


Passo 2 — Entrar no DSN

DSN SYSTEM(DB9G)

Passo 3 — Executar bind

BIND PACKAGE(MYCOLL) MEMBER(PROG1)
      ACTION(REPLACE)
      VALIDATE(BIND)

🚀 RESULTADO

DB2 cria:

  • package executável,

  • access path SQL.


🚨 ERROS COMUNS

SQLCODE -805

Package não encontrado.


AUTH FAILURE

Sem privilégio BIND.


🔥 BIND PLAN

“Criando o plano de execução da aplicação”

Tradução

Constrói um application plan.

Todo programa DB2 precisa de um PLAN para:

  • alocar recursos,

  • executar SQL.


💾 RELAÇÃO PACKAGE vs PLAN

ItemFunção
PACKAGESQL compilado
PLANEstrutura execução

🧪 LABORATÓRIO 3 — BIND PLAN

Passo 1

DSN SYSTEM(DB9G)

Passo 2

BIND PLAN(PLAN1)
     PKLIST(MYCOLL.*)

🚀 RESULTADO

Plano criado associando packages.


🔥 BIND QUERY

“Congelando access paths”

Tradução

Lê informações da:

DSN_USERQUERY_TABLE

e controla bind options/access paths.


💾 PARA QUE SERVE?

Estabilizar performance SQL.

Muito usado para:

  • evitar regressão,

  • preservar access path.


💥 CENÁRIO REAL

Após upgrade DB2:

  • SQL ficou pior.

DBA usa:

BIND QUERY

para manter plano antigo.


🔥 BIND SERVICE

“Criando REST Services no DB2”

Tradução

Cria package representando REST Service DB2.


💾 IMPORTÂNCIA MODERNA

Permite:

  • APIs REST,

  • integração cloud,

  • microservices,

  • mobile.


🧪 EXEMPLO

BIND SERVICE(MYREST)

🔥 DCLGEN

“O gerador mágico de estruturas COBOL”

Tradução

Produz:

  • DECLARE TABLE SQL,

  • estrutura COBOL/PL1/C.


💾 O QUE ELE GERA?

Exemplo:

01 CLIENTE.
   05 CLI-ID       PIC S9(9) COMP.
   05 CLI-NOME     PIC X(30).

🧪 LABORATÓRIO 4 — DCLGEN

Passo 1

DSN SYSTEM(DB9G)

Passo 2

DCLGEN TABLE(CLIENTES)
       LIBRARY('USER.COPYLIB')
       ACTION(REPLACE)

🚀 RESULTADO

DB2 gera:

  • copybook COBOL,

  • DECLARE TABLE.


🔥 FREE PACKAGE

“Apagando packages antigos”

Tradução

Remove:

  • versões específicas,

  • collections inteiras,

  • packages antigos.


🧪 EXEMPLO

FREE PACKAGE(MYCOLL.PROG1)

🚨 CUIDADO

Se apagar package em produção:

SQLCODE -805

🔥 FREE PLAN

“Removendo plans”

Tradução

Apaga application plans do DB2.


🧪 EXEMPLO

FREE PLAN(PLANOLD)

🚨 IMPACTO

Aplicações associadas:

  • param imediatamente.


🔥 REBIND PACKAGE

“Reotimizando SQL sem recompilar”

Tradução

Rebind package após mudanças que afetam package sem alterar SQL.


💾 PARA QUE SERVE?

Muito usado após:

  • RUNSTATS,

  • upgrade DB2,

  • mudança índice,

  • tuning.


🧪 LABORATÓRIO 5 — REBIND PACKAGE

Passo 1

REBIND PACKAGE(MYCOLL.PROG1)

🚀 RESULTADO

DB2:

  • recalcula access path,

  • reotimiza SQL.


🚨 PERIGO

Às vezes:

  • performance piora 😄


🔥 REBIND PLAN

“Atualizando plans sem recriar”

Tradução

Rebind application plan após alterações atributos.


🧪 EXEMPLO

REBIND PLAN(PLAN1)

🔥 RUN

“Executando programa DB2”

Tradução

Executa aplicação contendo SQL.


🧪 LABORATÓRIO 6 — RUN COBOL DB2

Passo 1

DSN SYSTEM(DB9G)

Passo 2

RUN PROGRAM(PROGCOB)
    PLAN(PLAN1)
    LIB('USER.LOADLIB')

🚀 RESULTADO

Programa COBOL executado sob DB2.


🔥 SPUFI

“O SQL interativo clássico do Mainframe”

Tradução

Executa SQL usando entrada arquivo.


💾 O QUE É SPUFI?

SQL Processor Using File Input.

Ferramenta clássica DB2.


🧪 LABORATÓRIO 7 — SPUFI

Passo 1

Entrar no DB2I.


Passo 2

Selecionar:

SPUFI

Passo 3

Executar:

SELECT *
FROM SYSIBM.SYSTABLES
FETCH FIRST 10 ROWS ONLY;

🚀 RESULTADO

DB2 retorna linhas SQL.


🔥 O QUE SEPARA O PROGRAMADOR COBOL DO ESPECIALISTA DB2?

O iniciante:

  • escreve SQL.

O especialista:

  • entende:

    • BIND,

    • PLAN,

    • PACKAGE,

    • REBIND,

    • RUN,

    • DCLGEN,

    • access path,

    • runtime DB2.


💣 A GRANDE VERDADE DO DB2

O SQL é apenas:

a superfície.

O verdadeiro motor do DB2 vive:

  • nos packages,

  • nos plans,

  • nos binds,

  • nos traces,

  • no optimizer,

  • no runtime DSN.

E entender os subcomandos DSN é praticamente:

aprender a conversar diretamente com o coração do DB2 no IBM Z 💾🔥


sábado, 10 de dezembro de 2011

🔥 DB2 DCLGEN para COBOL – Onde a Tabela Vira Código e o Código Vira Contrato 🔥

 

Bellacosa Mainframe apresenta o DCLGEN

🔥 DB2 DCLGEN para COBOL – Onde a Tabela Vira Código e o Código Vira Contrato 🔥



Se existe um ponto em que DB2, COBOL e disciplina se encontram, esse ponto se chama DCLGEN.

Quem já manteve sistema legado sabe:
👉 layout duplicado dá problema
👉 tipo mal definido vira bug
👉 desalinhamento vira incidente às 3h da manhã

O DCLGEN não é só uma ferramenta.
Ele é um pacto de não-agressão entre o banco e o programa.


🕰️ Um Pouco de História – Por Que o DCLGEN Existe?

Antes do DCLGEN, o programador:

  • Lia a DDL

  • “Interpretava” os tipos

  • Criava o layout na mão

  • Rezava

💡 Resultado:

  • Campos truncados

  • Decimais errados

  • -302 misterioso

A IBM, num raro momento de empatia com o ser humano, criou o DCLGEN (Declarations Generator):
👉 a definição oficial da tabela vira estrutura COBOL.

Menos interpretação.
Mais verdade.


🧬 O Que o DCLGEN Gera, de Fato?

Um DCLGEN padrão gera:

  1. EXEC SQL DECLARE TABLE

  2. Estrutura COBOL (01 / 05)

  3. EXEC SQL DECLARE CURSOR (opcional)

Tudo alinhado com:

  • Tipo

  • Tamanho

  • Precisão

  • Nulidade

💡 Regra de ouro Bellacosa:
Se não veio do DCLGEN, desconfie.


🧱 Tipos DB2 vs Tipos COBOL – Onde a Magia Acontece

Aqui mora a maioria dos bugs silenciosos.

🔢 NUMERIC / DECIMAL

DB2

DECIMAL(9,2)

COBOL (DCLGEN)

05 COL-VALOR       PIC S9(7)V99 COMP-3.

💡 Por quê COMP-3?
Porque DB2 armazena decimal compactado.
DISPLAY aqui é convite ao desastre.


🔠 CHAR / VARCHAR

DB2

CHAR(10)
VARCHAR(50)

COBOL

05 COL-NOME        PIC X(10).
05 COL-DESC-LEN    PIC S9(4) COMP.
05 COL-DESC-TEXT   PIC X(50).

💡 Curiosidade:
VARCHAR vira dois campos em COBOL.
Esqueceu do LENGTH? Vai ler lixo.

🥚 Easter egg clássico:
LENGTH negativo = dado inválido ou bug sorrateiro.


📅 DATE / TIME / TIMESTAMP

DB2

DATE
TIMESTAMP

COBOL

05 COL-DATA        PIC X(10).
05 COL-TS          PIC X(26).

💡 Comentário Bellacosa:
Não trate data DB2 como número.
Isso termina em lágrimas.


🔣 INTEGER / SMALLINT / BIGINT

DB2

INTEGER
SMALLINT
BIGINT

COBOL

05 COL-ID          PIC S9(9) COMP.
05 COL-COD         PIC S9(4) COMP.
05 COL-SEQ         PIC S9(18) COMP.

💡 Dica de sobrevivência:
Nunca use DISPLAY para inteiros DB2.
Nunca.


🚨 NULLs – O Inimigo Invisível

DB2 aceita NULL.
COBOL… não.

DCLGEN resolve isso com indicadores:

05 COL-VALOR       PIC S9(7)V99 COMP-3.
05 COL-VALOR-IND   PIC S9(4) COMP.
  • 0 → valor válido

  • -1 → NULL

💡 Dica Bellacosa:
Esqueceu de tratar indicador?
Parabéns, você acaba de criar um dump futuro.


🧪 Conversões Implícitas – Onde o DB2 Avisa (ou não)

DB2 até converte tipos…
Mas cobra juros.

  • CHAR → DECIMAL

  • DATE → CHAR

  • VARCHAR → FIXED

💡 Conhecimento de bastidor:
Conversão implícita custa CPU e pode quebrar índice.

👉 Converta no COBOL, não no SQL.


⚙️ DCLGEN no Mundo Moderno (Git, CI/CD, DevOps)

Hoje o DCLGEN:

  • É versionado no Git

  • Gerado automaticamente

  • Sincronizado com DDL

  • Integrado ao pipeline

💡 Regra de ouro moderna:
DDL mudou?
👉 gere novo DCLGEN
👉 recompile
👉 rebind

Sem atalhos.


🗣️ Fofoquices de Sala-Cofre

  • “Funcionava ontem” → tabela mudou

  • “Só aumentaram o tamanho” → DCLGEN não regenerado

  • “É só um campo novo” → layout desalinhado


🧠 Pensamento Final do El Jefe

DCLGEN não é burocracia.
É contrato.

Ele garante que:

  • O que o DB2 grava

  • É exatamente o que o COBOL lê

Sem achismo.
Sem “interpretação criativa”.

🔥 Regra final Bellacosa Mainframe:
Se a tabela é verdade,
o DCLGEN é a tradução oficial.

Todo o resto…
é boato que vira incidente. 💾🧠


segunda-feira, 31 de janeiro de 2011

🔥 Aprender COBOL com DB2 — o caminho do programador mainframer de verdade

 

Aprenda COBOL com DB2 ao estilo Bellacosa Mainframe

🔥 Aprender COBOL com DB2 — o caminho do programador mainframer de verdade



🧠 Introdução: por que COBOL + DB2 ainda manda no jogo

Se você quer ser programador mainframe COBOL com DB2, precisa entender uma verdade simples:

COBOL processa.
DB2 guarda.
SQL conecta o cérebro à memória do negócio.

Não estamos falando de tecnologia “antiga”.
Estamos falando da infraestrutura que processa bilhões por dia, com ACID, consistência e auditoria que muita stack moderna ainda tenta copiar.

Esse artigo é um mapa de estrada, do zero até o código profissional, misturando:

  • técnica

  • história

  • prática

  • fofoca de data center

  • e aquela sabedoria que só mainframer velho passa no café ☕


DB2 o banco de dados do Mainframe


🧱 PARTE 1 — Conhecendo o DB2 (o coração dos dados)

📜 Um pouco de história

O DB2 nasce na IBM nos anos 80, baseado no modelo relacional proposto por Edgar F. Codd.

👉 Conceito revolucionário:

  • dados em tabelas

  • relações lógicas

  • SQL como linguagem declarativa

Enquanto o mundo brigava com arquivos VSAM:

“Me diga o que você quer, não como buscar.”


🧩 Modelo Relacional (base de tudo)

  • Tabela → entidade de negócio

  • Linha (row) → registro

  • Coluna (column) → atributo

  • Primary Key → identidade

  • Foreign Key → relacionamento

💬 Bellacosa comenta:

“Se você não entende modelo relacional, não adianta saber COBOL.”


🧾 Tipos de Dados DB2 (o casamento com COBOL)

DB2COBOL
CHAR / VARCHARPIC X
INTEGERPIC S9
DECIMALPIC S9V
DATEPIC X(10)
TIMESTAMPPIC X(26)

🥚 Easter egg:
DB2 guarda DECIMAL melhor do que muito banco moderno guarda FLOAT 😏


Queries SQL no DB2 

🧑‍💻 PARTE 2 — Linguagem SQL no DB2

🗣️ SQL: a língua franca dos dados

SQL não é procedural.
SQL é declarativa.

🔹 DDL — Data Definition Language

CREATE TABLE CLIENTE ( ID_CLIENTE INTEGER NOT NULL, NOME VARCHAR(50), SALDO DECIMAL(9,2), PRIMARY KEY (ID_CLIENTE) );
  • CREATE

  • DROP

  • ALTER


🔹 DCL — Data Control Language

GRANT SELECT ON CLIENTE TO USER01;

Controle de acesso.
Segurança raiz de banco.


🔹 DML — Data Manipulation Language

INSERT INTO CLIENTE VALUES (1, 'JOÃO', 1500.00); SELECT * FROM CLIENTE; UPDATE CLIENTE SET SALDO = SALDO + 100 WHERE ID_CLIENTE = 1; DELETE FROM CLIENTE WHERE ID_CLIENTE = 1;

💬 Bellacosa:

“DELETE sem WHERE é como RM -RF /”


🔍 SELECT, JOIN e afins (onde o bicho pega)

SELECT C.NOME, P.VALOR FROM CLIENTE C JOIN PEDIDO P ON C.ID_CLIENTE = P.ID_CLIENTE;

👉 JOIN mal feito = batch lento = gente te ligando às 3 da manhã.


🛠️ SPUFI e QMF

  • SPUFI → SQL direto no TSO

  • QMF → consultas, relatórios, análise

💡 Dica Bellacosa:

“Todo mundo começa no SPUFI.
Quem fica bom, aprende QMF.”



🧩 PARTE 3 — COBOL com DB2 (onde nasce o profissional)

🏛️ História rápida do COBOL

  • Criado em 1959

  • Foco: negócio

  • Legibilidade

  • Estabilidade

👉 Não é bonito.
👉 É confiável.


🧠 Estrutura de um programa COBOL

  • IDENTIFICATION DIVISION

  • ENVIRONMENT DIVISION

  • DATA DIVISION

  • PROCEDURE DIVISION

📌 Árvore programática é fundamental para não virar macarrão lógico.


🔗 Host Variables (a ponte COBOL ↔ DB2)

EXEC SQL SELECT SALDO INTO :WS-SALDO FROM CLIENTE WHERE ID_CLIENTE = :WS-ID END-EXEC.
  • Sempre com :

  • Tipagem correta

  • Conversão consciente


📊 SQLCA — seu melhor amigo

IF SQLCODE = 0 CONTINUE ELSE DISPLAY 'ERRO DB2 ' SQLCODE END-IF
SQLCODESignificado
0OK
+100NOT FOUND
< 0ERRO

💬 Bellacosa:

“Quem ignora SQLCODE vira operador sem saber.”


📚 DCLGEN — o BOOK sagrado

  • Gera layout da tabela

  • Gera host variables

  • Evita erro humano

//STEP01 EXEC PGM=DSNTEP2

👉 Nunca escreva layout DB2 na mão. Nunca.


Consulta pagina via cursor no DB2

🌀 PARTE 4 — Cursores (nível profissional)

🔄 Cursor para leitura

EXEC SQL DECLARE C1 CURSOR FOR SELECT ID_CLIENTE, NOME FROM CLIENTE END-EXEC.
EXEC SQL FETCH C1 INTO :WS-ID, :WS-NOME END-EXEC.

📌 Sempre:

  • OPEN

  • FETCH

  • CLOSE


✍️ Inserindo, alterando e excluindo via COBOL

  • INSERT → novo registro

  • UPDATE → alteração controlada

  • DELETE → cuidado máximo

💡 Boa prática:

“Nunca DELETE direto sem histórico.”


🧠 PARTE 5 — Boas práticas Bellacosa Mainframe

✔ Use DCLGEN
✔ Sempre trate SQLCODE
✔ Evite SELECT *
✔ Documente regra de negócio
✔ Separe lógica de acesso a dados
✔ Teste com volume real
✔ Pense em performance desde o SELECT

🥚 Easter egg clássico:

“O batch estava lento porque alguém esqueceu o índice.”


🧪 Exercícios de fixação (mentalidade correta)

  1. Criar tabela DB2

  2. Gerar DCLGEN

  3. Programa COBOL com:

    • INSERT

    • SELECT

    • UPDATE

    • DELETE

  4. Programa com CURSOR

  5. Programa com JOIN

  6. Analisar SQLCODE

  7. Ajustar performance

👉 Isso forma programador, não copiador de código.


🧠 Comentário final Bellacosa

Aprender COBOL com DB2 não é aprender uma linguagem.
É aprender:

  • como dados movem o mundo

  • como sistemas críticos pensam

  • como escrever código que não pode falhar

🔥 COBOL + DB2 não é passado.
É o núcleo silencioso do presente.

Enquanto modas passam,
o batch fecha o dia.