Translate

Mostrar mensagens com a etiqueta dbrm. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta dbrm. 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. ☕🔥


quarta-feira, 4 de novembro de 2009

🐉 DB2 Compilação, DBRM, BIND, PACKAGE e PLAN

Bellacosa Mainframe apresenta compilaçao COBOL com DB2 plan e package

🐉 DB2 + COBOL no Mainframe

Compilação, DBRM, BIND, PACKAGE e PLAN

Ao estilo Bellacosa Mainframe – do big bang ao SELECT


☕ Introdução (pegue seu café)

Todo padawan que entra no mundo do IBM Mainframe + COBOL + DB2 escuta termos quase místicos:

DBRM, BIND, PACKAGE, PLAN

No começo parecem nomes de monstros de RPG 🧙‍♂️, mas na prática eles formam o coração da integração entre COBOL e DB2.

Este artigo explica de onde isso veio, por que existe, como funciona, como compilar, como errar (e sobreviver) e como pensar como um Jedi do Mainframe.


🕰️ Origem e História (por que tudo isso existe?)

📜 Anos 70–80: quando DB2 nasceu

  • IBM precisava de um banco relacional para rodar junto com aplicações COBOL críticas.

  • COBOL não entende SQL nativamente.

  • Solução: criar um pré-compilador.

👉 Nasce o conceito de SQL EMBUTIDO (EXEC SQL).

Mas…

💥 Problema:

  • O compilador COBOL não sabe o que é SQL.

💡 Solução IBM:

  • Criar um artefato intermediário → DBRM (Database Request Module).


🧩 Visão Geral do Fluxo (o mapa do tesouro)

COBOL + EXEC SQL
        |
        v
DB2 PRECOMPILER
        |
        +--> COBOL PURO
        +--> DBRM
                  |
                  v
               BIND
                  |
                  v
               PACKAGE
                  |
                  v
                PLAN
                  |
                  v
              EXECUÇÃO

👉 Nada aqui é opcional.


📦 O que é DBRM (Database Request Module)?

🎯 Definição

DBRM é o arquivo que contém todas as instruções SQL extraídas do seu programa COBOL.

📌 Características

  • Criado pelo pré-compilador do DB2

  • Contém:

    • SELECT

    • INSERT

    • UPDATE

    • DELETE

    • CURSORS

  • Não contém código COBOL

🧠 Pense assim:

DBRM = “O livro de feitiços SQL do programa”


🧱 O que é PACKAGE?

🎯 Definição

PACKAGE é o DBRM já compilado e otimizado pelo DB2.

📌 Por que PACKAGE existe?

Antigamente:

  • Um PLAN gigante para tudo ❌

Hoje:

  • Um PACKAGE por programa ✔️

  • Melhor performance

  • Melhor controle de versão

🧠 Analogia Bellacosa

PACKAGE = prato pronto na cozinha do DB2 🍝
DBRM = receita


🧠 O que é PLAN?

🎯 Definição

PLAN é o conjunto de PACKAGES que uma aplicação pode executar.

📌 Importante

  • Quem executa é o PLAN

  • O PLAN aponta para vários PACKAGES

  • Normalmente 1 PLAN por aplicação/sistema

🧠 Jedi Tip:

Programa não executa PACKAGE direto. Executa PLAN.


🔨 Passo a Passo para um Padawan

🥋 Passo 1 – Escrever o COBOL com SQL

EXEC SQL
   SELECT NOME
     INTO :WS-NOME
     FROM CLIENTES
    WHERE ID = :WS-ID
END-EXEC.

🥋 Passo 2 – Pré-compilação DB2

  • Remove SQL

  • Gera:

    • COBOL puro

    • DBRM

👉 Executado via DSNHPC


🥋 Passo 3 – Compilação COBOL

  • Compila o código gerado

  • Produz objeto (.OBJ)


🥋 Passo 4 – Linkedição

  • Gera LOAD MODULE


🥋 Passo 5 – BIND PACKAGE

  • Entrada: DBRM

  • Saída: PACKAGE


🥋 Passo 6 – BIND PLAN

  • Associa PACKAGES ao PLAN


🥋 Passo 7 – Executar

🎉 O programa roda feliz no CICS ou Batch.


📜 Exemplo de JCL – BIND PACKAGE

//BINDPKG EXEC PGM=IKJEFT01
//STEPLIB  DD DISP=SHR,DSN=DB2.DSNLOAD
//SYSTSPRT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTSIN  DD *
  DSN SYSTEM(DB2P)
  BIND PACKAGE(MEUSCHEMA.PKGPROG1)
       MEMBER(PROG1)
       ACTION(REPLACE)
       ISOLATION(CS)
       VALIDATE(BIND)
       OWNER(MEUSCHEMA)
/*

🚨 Erros Comuns (e como sobreviver)

❌ -805

DBRM ou PACKAGE não encontrado

✔️ Solução:

  • PACKAGE não está no PLAN

  • PLAN não foi rebindado


❌ -818

Timestamp mismatch

✔️ Solução:

  • Rebind do PACKAGE

  • Código recompilado mas DBRM antigo


❌ -204

Objeto não existe

✔️ Solução:

  • Tabela/view não existe

  • Schema errado


💡 Dicas de Ouro Bellacosa

1 DBRM = 1 PACKAGE

☕ Nunca use PLAN gigante com tudo

☕ Sempre versionar PACKAGE

☕ Nomeie PACKAGE com ambiente:

PKGPROG1_DEV
PKGPROG1_HML
PKGPROG1_PRD

🥚 Easter Eggs (curiosidades)

🥚 DBRM é tão antigo que veio do System R, o avô do DB2

🥚 Muitos ambientes ainda têm PLAN criados nos anos 90 😱

🥚 Rebind pode melhorar performance sem recompilar COBOL

🥚 EXPLAIN do PACKAGE mostra o plano de acesso


🧙 Comentários de Mestre Jedi

Se você entende DBRM, PACKAGE e PLAN…
Você já saiu do nível Padawan.

Quem domina BIND domina o DB2.


📌 Conclusão

DB2 + COBOL não é magia negra.

É:

  • Engenharia

  • História

  • Performance

  • Disciplina

E quando bem feito…

🚀 Roda por décadas sem cair.


Um Café no Bellacosa Mainframe