Translate

Mostrar mensagens com a etiqueta DB2 zOS. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta DB2 zOS. Mostrar todas as mensagens

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. ☕🔥


segunda-feira, 4 de maio de 2026

🔥☕ O SUBMUNDO DO Db2 z/OS — LOGS, RECOVERY E O QUE ACONTECE QUANDO O BANCO “MORRE” ☕🔥

 

Bellacosa Mainframe em uma visão sobre o LOG do DB2

🔥☕ O SUBMUNDO DO Db2 z/OS — LOGS, RECOVERY E O QUE ACONTECE QUANDO O BANCO “MORRE” ☕🔥

Existe um momento na vida de todo programador COBOL/Db2 em que ele descobre uma verdade assustadora:

O Db2 nunca esquece nada.

Cada:

  • INSERT,
  • UPDATE,
  • DELETE,
  • COMMIT,
  • ROLLBACK,
  • ALTER,
  • REORG,

deixa rastros.

E esses rastros vivem dentro de uma das estruturas mais importantes do ecossistema mainframe:

🔥 O LOG DO Db2.

Se você é programador COBOL pleno e acha que recovery é “coisa de DBA”, cuidado.

Porque no dia em que um:

-904
-911
-803
00C90084
RESOURCE UNAVAILABLE

explodir produção às 3h da manhã…

você vai descobrir que entender o log do Db2 muda completamente sua carreira.


☕ O QUE É O LOG DO Db2?

O log do Db2 é o “diário transacional” do banco.

Tudo que altera dados gera registros de log.

O Db2 escreve:

  • before image,
  • after image,
  • controle transacional,
  • checkpoints,
  • unidades de recuperação.

Basicamente:

ALTERAÇÃO → LOG → DISCO

Antes mesmo da página ser gravada no tablespace.


🔥 ACTIVE LOGS vs ARCHIVE LOGS

Aqui começa uma das maiores confusões dos iniciantes.

🔹 Active Logs

São os logs online e ativos.

Ficam sendo usados continuamente.

Eles armazenam:

  • alterações recentes,
  • transações em andamento,
  • recovery imediato.

São críticos.

Perder active log é pesadelo nível apocalipse.


🔹 Archive Logs

Quando active logs ficam cheios:

  • Db2 descarrega,
  • copia,
  • arquiva.

Esses logs históricos viram:

ARCHIVE LOGS

Eles são usados para:

  • PIT recovery,
  • auditoria,
  • rollback histórico,
  • disaster recovery.

☕ COMO O Db2 ESCREVE NO LOG?

Muita gente acha que Db2 grava direto no disco.

Não.

Primeiro ele grava em:

🔥 LOG BUFFERS

na memória.

Depois:

  • COMMIT,
  • checkpoint,
  • buffer cheio,
  • sync I/O,

forçam gravação nos:

ACTIVE LOG DATASETS

🔥 WRITE AHEAD LOGGING (WAL)

Aqui está o segredo do recovery moderno.

O Db2 segue:

🔥 WAL — Write Ahead Logging

Regra:

“O log precisa ser gravado ANTES da página do banco.”

Isso garante:

  • rollback,
  • redo,
  • recuperação consistente.

Sem isso:
💀 corrupção.


☕ O QUE ACONTECE NUM COMMIT?

Quando o programa COBOL faz:

EXEC SQL COMMIT END-EXEC

o Db2:

  1. sincroniza logs,
  2. confirma UOW,
  3. libera locks,
  4. torna alterações permanentes.

O COMMIT é basicamente:

🔥 “Agora isso virou verdade oficial.”


☕ E NUM ABEND?

Aqui entra o terror psicológico do DBA.

Se ocorre:

  • S0C7,
  • S878,
  • timeout,
  • deadlock,
  • cancel,
  • crash,
  • queda de LPAR,

o Db2 usa os logs para:

🔥 ROLLBACK

Ele desfaz tudo desde o último COMMIT.


🔥 TIPOS DE ERRO MAIS COMUNS


⚠️ SQLCODE -911 / -913

Deadlock ou timeout

Dois programas querem recursos incompatíveis.

Exemplo clássico:

  • batch segurando tabela,
  • online tentando atualizar.

DBA/Sysprog:

  • analisar locking,
  • IFCID,
  • traces,
  • IRLM,
  • timeout values.

Programador COBOL:

  • reduzir tempo entre commits,
  • melhorar SQL,
  • evitar scan gigante.

⚠️ SQLCODE -904

Resource unavailable

Tablespace parado.
Utility rodando.
Objeto indisponível.

DBA:

  • verificar STOP status,
  • utilities,
  • claim/drain,
  • locks.

Sysprog:

  • investigar subsystem,
  • storage,
  • I/O,
  • coupling facility.

⚠️ SQLCODE -803

Duplicate key

Programador tentou inserir chave já existente.

Programador:

  • validar lógica,
  • tratar concorrência,
  • revisar sequence/identity.

DBA:

  • verificar índice,
  • constraints,
  • integridade.

⚠️ SQLCODE -805

Package não encontrado

Clássico inferno de deploy.

DBA:

  • verificar BIND,
  • PLAN/PACKAGE,
  • consistency token.

Sysprog:

  • SDSNLOAD,
  • STEPLIB,
  • DBRM libraries.

Programador:

  • garantir promote correto.

⚠️ 00C90084

Log full

Aqui o DBA começa a envelhecer rapidamente.

O active log lotou.

Possíveis causas:

  • UOW gigante,
  • commit inexistente,
  • archive parado.

DBA:

  • verificar ARCHIVE process,
  • aumentar logs,
  • cancelar job problemático.

Programador:

  • COMMIT frequente,
  • evitar transação monstruosa.

☕ COMO FUNCIONA O RECOVERY?

Aqui mora a mágica do Db2.


🔥 FORWARD RECOVERY

Db2:

  1. restaura image copy,
  2. reaplica logs.

Resultado:
✅ banco volta até ponto desejado.


🔥 BACKOUT / ROLLBACK

Db2 usa:

  • before images,
  • undo records.

E desfaz alterações.


🔥 RESTART RECOVERY

Após crash do subsystem:

Db2:

  • lê logs,
  • identifica UOW incompletas,
  • faz undo/redo automático.

Muitas vezes o usuário nem percebe.


☕ O PAPEL DO DBA

O DBA é o “cirurgião do banco”.

Ele:

  • monitora logs,
  • executa RECOVER,
  • controla utilities,
  • administra image copies,
  • resolve locking,
  • acompanha catalog,
  • analisa performance.

Ferramentas clássicas:

  • DSN1LOGP,
  • RECOVER,
  • COPY,
  • REORG,
  • DISPLAY DATABASE,
  • DISPLAY LOG.

☕ O PAPEL DO SYSPROG

O Sysprog atua na infraestrutura pesada.

Ele cuida:

  • do subsystem Db2,
  • IRLM,
  • z/OS,
  • JES,
  • storage,
  • coupling facility,
  • datasets de log,
  • BSDS,
  • bootstrap datasets.

Se o DBA é cirurgião…
o Sysprog é engenheiro nuclear.


☕ O QUE O PROGRAMADOR COBOL PRECISA ENTENDER?

Muito mais do que imaginam.

Porque SQL ruim gera:

  • lock,
  • timeout,
  • log storm,
  • escalation,
  • crash recovery lento.

🔥 Um bom programador Db2:

✅ faz commit racional
✅ evita cursor infinito
✅ reduz scans
✅ trata SQLCODE corretamente
✅ entende UOW
✅ sabe impacto do rollback
✅ evita transações gigantes


☕ O MAIOR ERRO DOS INICIANTES

Achar que:

COMMIT é só “salvar”.

Não.

COMMIT é:

  • sincronização,
  • liberação de lock,
  • persistência,
  • checkpoint lógico,
  • controle de recovery.

É o coração do Db2 transacional.


🔥 CONCLUSÃO

O log do Db2 é praticamente:

🔥 a memória do banco.

Sem ele:

  • não existe rollback,
  • recovery,
  • integridade,
  • restart,
  • consistência.

Quando você entende:

  • active log,
  • archive log,
  • WAL,
  • UOW,
  • rollback,
  • recovery,

você deixa de ser apenas “quem escreve SELECT”.

E começa a pensar como:

  • DBA,
  • sysprog,
  • arquiteto transacional.

E no universo mainframe…

isso muda tudo. ☕🔥

sexta-feira, 31 de outubro de 2025

☕💣 “ACHAVA QUE REXX ERA SÓ SCRIPT?” — 10 COISAS QUE TODO PROGRAMADOR COBOL JUNIOR PADAWAN DESCOBRE TARDE DEMAIS NO MAINFRAME IBM Z 💣☕

 

Bellacosa Mainframe apresenta dicas sobre REXX Mainframe que todo padawan deve dominar

☕💣 “ACHAVA QUE REXX ERA SÓ SCRIPT?” — 10 COISAS QUE TODO PROGRAMADOR COBOL JUNIOR PADAWAN DESCOBRE TARDE DEMAIS NO MAINFRAME IBM Z 💣☕

Bellacosa Mainframe apresenta 10 coisas que um dev padawan deve saber e dominar


☕💣 PARA ENCERRAR UMA JORNADA DE REXX — COISAS QUE UM PROGRAMADOR COBOL JUNIOR PADAWAN DEVE SABER 💣☕

Depois de brincar com variáveis, loops, PARSE, EXECIO, ISPF, SDSF e automações mágicas do z/OS… chega o momento em que o jovem Padawan COBOL percebe uma verdade brutal do Mainframe:

👉 REXX não é “só uma linguagem de script”.
REXX é praticamente o “canivete suíço espiritual” do ambiente IBM Z.

É aquela ferramenta que o sysprog usa às 3h da manhã.
É o remendo elegante que salva um batch.
É o automóvel improvisado do operador.
É o cola-tudo universal do TSO/ISPF.

E quando você aprende REXX… você deixa de ser apenas alguém que “programa COBOL”.

Você começa a conversar com o sistema operacional. ☕


🔥 1. O COBOL PROCESSA NEGÓCIO. O REXX CONTROLA O UNIVERSO AO REDOR.

COBOL:

  • calcula folha

  • processa contas

  • fecha banco

  • gera extrato

REXX:

  • automatiza deploy

  • chama utilitários

  • cria menus ISPF

  • lê datasets

  • manipula spool

  • dispara comandos

  • conversa com DB2

  • conversa com CICS

  • conversa com SDSF

  • conversa com JES2

O COBOL é o motor da empresa.

O REXX é o técnico escondido atrás do painel elétrico. ☕


🔥 2. TODO MAINFRAMEIRO SÊNIOR SABE REXX

Isso é quase lei não escrita do IBM Z.

Você pode encontrar:

  • especialista em CICS

  • DBA DB2

  • operador

  • sysprog

  • storage admin

  • automação

  • segurança RACF

Todos usando REXX em algum momento.

Porque chega uma hora em que:
👉 fazer manualmente vira sofrimento.

E o REXX resolve.


🔥 3. O VERDADEIRO PODER ESTÁ NA INTEGRAÇÃO

O Padawan normalmente pensa:

“REXX é linguagem.”

O veterano pensa:

“REXX é integração.”

REXX conversa com:

  • ISPF

  • SDSF

  • TSO

  • JES2

  • DB2

  • CICS

  • USS

  • MQ

  • arquivos

  • datasets

  • comandos do sistema

É por isso que ele continua vivo há décadas.


🔥 4. O REXX ENSINA VOCÊ A ENTENDER O z/OS

Muita gente aprende COBOL sem entender:

  • alocação

  • datasets

  • spool

  • comandos

  • ISPF

  • utilities

  • catalog

  • LPAR

  • JES

Mas quando começa a automatizar com REXX…

☠️ você é obrigado a entender como o ambiente REAL funciona.

E isso acelera absurdamente sua evolução.


🔥 5. REXX É O “PYTHON DO MAINFRAME” ANTES DO PYTHON EXISTIR

Muito antes da moda DevOps…

o mainframe já tinha:

  • automação

  • scripts

  • parsing

  • manipulação textual

  • integração

  • produtividade

E o nome disso era:
☕ REXX.

Inclusive muita ideia moderna já existia ali:

  • scripting rápido

  • administração automatizada

  • wrappers

  • glue language

  • interfaces operacionais


🔥 6. O PROGRAMADOR JÚNIOR DESCOBRE O TRAUMA DO EXECIO

Todo mundo passa por isso.

Primeiro contato:

"EXECIO * DISKR ARQ (STEM DADOS."

Depois:

  • RC estranho

  • dataset vazio

  • stem quebrado

  • linha truncada

  • allocation faltando

E então nasce o verdadeiro mainframeiro.

Porque EXECIO não ensina apenas I/O.

EXECIO ensina humildade. ☕💀


🔥 7. PARSE É UMA DAS COISAS MAIS GENIAIS DO REXX

Quando o Padawan entende:

PARSE VAR LINHA NOME 1 SOBRENOME

a mente explode.

Porque o REXX foi criado para:

  • texto

  • comandos

  • produtividade

  • interpretação dinâmica

O PARSE parece simples…
mas é uma arma absurdamente poderosa.


🔥 8. REXX MOSTRA QUE O MAINFRAME NÃO É “ENGESSADO”

Muita gente de fora imagina:

“Mainframe é rígido.”

Aí o cara vê:

  • menus ISPF customizados

  • automações

  • painéis

  • ferramentas internas

  • monitoramentos

  • integrações

Tudo feito em REXX.

E percebe:
☕ o IBM Z é MUITO mais flexível do que parece.


🔥 9. TODO AMBIENTE TEM “O REXX LENDÁRIO”

Sempre existe.

Aquele EXEC antigo:

  • sem documentação

  • cheio de LABEL

  • cheio de PARSE

  • com 9 mil linhas

  • ninguém sabe quem criou

  • resolve tudo

  • ninguém tem coragem de apagar

O famoso:

“Se mexer nisso o banco para.”

☠️ patrimônio histórico do datacenter.


🔥 10. APRENDER REXX MUDA SUA VISÃO DE CARREIRA

O júnior COBOL pensa em:

  • programa

  • compile

  • JCL

  • output

O cara que aprende REXX começa a enxergar:

  • automação

  • produtividade

  • operação

  • observabilidade

  • tooling

  • administração

  • integração corporativa

E isso aproxima você:

  • do sysprog

  • do operador

  • do DBA

  • da infraestrutura

  • da arquitetura

Você deixa de ver só o programa.

Você começa a enxergar o ecossistema inteiro.


☕ A GRANDE VERDADE FINAL DO MAINFRAME

O REXX ensina algo muito importante:

👉 Mainframe não é só linguagem.
👉 Mainframe é ambiente.
👉 É integração.
👉 É operação.
👉 É automação.
👉 É disciplina.
👉 É convivência com sistemas gigantescos.

E quando o Padawan entende isso…

ele deixa de ser apenas “programador COBOL”.

☕💣 Ele começa lentamente a virar um verdadeiro Mainframeiro. 💣☕