Translate

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

sábado, 18 de outubro de 2025

☕💣🚀 LABORATÓRIO BELLACOSA MAINFRAME: DATABASE IMS 15.5 / 15.6 NA PRÁTICA

 

Bellacosa Mainframe úm laboratorio pratico ims database

☕💣🚀 LABORATÓRIO BELLACOSA MAINFRAME

IMS 15.5 / 15.6 NA PRÁTICA

Do Zero Até um Banco Hierárquico Funcionando


Objetivo

Construir um banco IMS completo:

CLIENTE
 |
 +-- CONTA
       |
       +-- MOVIMENTO

Aprendendo:

  • DBDGEN

  • PSBGEN

  • Managed ACB

  • DFS3PU00

  • DFSURGU0

  • DFSURGL0

  • DL/I

  • COBOL IMS

  • GU

  • GN

  • GNP

  • ISRT

  • REPL

  • DLET

  • Catalog IMS


Cenário

Banco:

BANKDB

Segmentos:

CLIENTE
CONTA
MOVIMENTO

EXERCÍCIO 1

Criando o DBD

Objetivo:

Definir a estrutura hierárquica.

Fonte DBD:

BANKDB   DBD NAME=BANKDB,ACCESS=HDAM

         DATASET DD1=AREA001

CLIENTE SEGM NAME=CLIENTE,BYTES=100
         FIELD NAME=(CPF,SEQ,U),BYTES=11,START=1

CONTA    SEGM NAME=CONTA,
               PARENT=CLIENTE,
               BYTES=80

         FIELD NAME=(NUMCONTA,SEQ,U),
               BYTES=10,
               START=1

MOVIM    SEGM NAME=MOVIMENTO,
               PARENT=CONTA,
               BYTES=120

         FIELD NAME=(DATA,SEQ),
               BYTES=8,
               START=1

         DBDGEN
         FINISH
         END

Resultado esperado:

BANKDB DBD gerado sem erros

Solução

Executar DBDGEN.


EXERCÍCIO 2

Executando DBDGEN

JCL:

//DBDGEN JOB
//ASM EXEC PGM=ASMA90
//SYSPRINT DD SYSOUT=*
//SYSIN DD DSN=IMS.SOURCE(BANKDB),DISP=SHR

Validar:

RC=0000

Solução

Verificar:

DBDLIB

contendo:

BANKDB

EXERCÍCIO 3

Criando o PSB

Criar acesso para COBOL.

BANKPSB  PSBGEN LANG=COBOL

PCB TYPE=DB,
    DBDNAME=BANKDB,
    PROCOPT=A

END

Solução

Executar:

PSBGEN

Resultado:

PSBLIB

EXERCÍCIO 4

Inserindo no IMS Catalog

IMS 15.5 e 15.6 utilizam:

Managed ACB

Executar:

DFS3PU00

para publicar:

DBD
PSB

no Catalog.


Solução

Comando:

IMPORT DEFN SOURCE(CATALOG)

Validação:

QUERY DB NAME(BANKDB)

EXERCÍCIO 5

Alocando a Base Física

Criar DBDS.

//ALLOC EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
 DEFINE CLUSTER -
 (NAME(IMS.BANKDB.AREA001) -
 CYLINDERS(10 5))
/*

Solução

Dataset criado:

IMS.BANKDB.AREA001

EXERCÍCIO 6

Carga Inicial com DFSURGU0

Arquivo de entrada:

CLIENTE12345678901JOAO SILVA
CONTA0000001001
MOVIMENTO20240101PIX000100
MOVIMENTO20240102TED000200

JCL:

//LOAD EXEC PGM=DFSURGU0
//SYSOUT DD SYSOUT=*
//INPUT DD *
CLIENTE12345678901JOAO SILVA
CONTA0000001001
MOVIMENTO20240101PIX000100
MOVIMENTO20240102TED000200
/*

Solução

Banco carregado.

RC=0000

EXERCÍCIO 7

Extraindo Dados com DFSURGL0

JCL:

//UNLOAD EXEC PGM=DFSURGL0
//SYSOUT DD SYSOUT=*
//SYSUT1 DD SYSOUT=*

Solução

Saída:

CLIENTE
CONTA
MOVIMENTO
MOVIMENTO

EXERCÍCIO 8

Programa COBOL - Leitura GU

Objetivo:

Ler cliente específico.

CALL 'CBLTDLI'
 USING
 'GU  '
 PCB-MASK
 CLIENTE-AREA
 SSA-CLIENTE

SSA:

CLIENTE(CPF =12345678901)

Solução

Status:

SPACE

Registro encontrado.


EXERCÍCIO 9

Programa COBOL - Inserção ISRT

Inserir nova conta.

CALL 'CBLTDLI'
 USING
 'ISRT'
 PCB-MASK
 CONTA-AREA

Solução

Nova ocorrência criada:

CLIENTE
 |
 +-- CONTA

EXERCÍCIO 10

CRUD Completo

Executar:

Consulta

GU
GN
GNP

Atualização

REPL

Exclusão

DLET

Solução

Fluxo:

GU CLIENTE

GN CONTA

REPL CONTA

DLET MOVIMENTO

Programa COBOL Completo

IDENTIFICATION DIVISION.
PROGRAM-ID. BANKIMS.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 DLI-GU PIC X(4) VALUE 'GU  '.

LINKAGE SECTION.

01 PCB-MASK.
   05 STATUS-CODE PIC XX.

PROCEDURE DIVISION.

MAIN.

CALL 'CBLTDLI'
 USING
 DLI-GU
 PCB-MASK
 IO-AREA
 SSA.

IF STATUS-CODE = SPACES
 DISPLAY 'REGISTRO ENCONTRADO'
END-IF.

GOBACK.

Desafio Extra 1

Adicionar segmento:

ENDERECO

abaixo de CLIENTE.


Desafio Extra 2

Adicionar segmento:

CARTAO

abaixo de CONTA.


Desafio Extra 3

Criar programa COBOL para listar toda árvore:

CLIENTE
CONTA
MOVIMENTO

usando:

GU
GNP
GN

Desafio Extra 4

Criar utility REXX para executar:

ADDRESS TSO

"SUBCOM IMS"

"QUERY DB NAME(BANKDB)"

e validar status do banco.


Resultado Final Esperado

Hierarquia criada:

CLIENTE
 CPF=12345678901

   CONTA
   0000001001

      MOVIMENTO
      PIX

      MOVIMENTO
      TED

Conhecimentos adquiridos:

✓ DBDGEN

✓ PSBGEN

✓ IMS Catalog

✓ Managed ACB

✓ DFS3PU00

✓ DFSURGU0

✓ DFSURGL0

✓ DL/I

✓ COBOL IMS

✓ GU

✓ GN

✓ GNP

✓ ISRT

✓ REPL

✓ DLET

✓ Administração IMS 15.5 / 15.6


sexta-feira, 17 de outubro de 2025

☕💣🚀 PADAWAN, ESQUEÇA "TABELAS" NO IMS! CRIANDO DATABASES

 

Bellacosa Mainframe criando database ims mainframe

☕💣🚀 PADAWAN, ESQUEÇA "TABELAS" NO IMS!

Se você vem de DB2, Oracle, SQL Server ou PostgreSQL, o primeiro choque cultural é este:

IMS DB NÃO POSSUI TABELAS.

No IMS Database você trabalha com:

  • Database (DBD)

  • Segmentos (Segments)

  • Campos (Fields)

  • Relacionamentos Pai-Filho

  • Hierarquias

  • PCB (Program Communication Block)

  • PSB (Program Specification Block)

O IMS é um banco de dados hierárquico, criado muito antes dos bancos relacionais.

Imagine uma árvore:

CLIENTE
 |
 +-- CONTA
 |     |
 |     +-- MOVIMENTO
 |
 +-- ENDERECO

No mundo SQL você teria:

CLIENTE
CONTA
MOVIMENTO
ENDERECO

No IMS você tem:

ROOT SEGMENT
    |
    +-- CHILD SEGMENT
            |
            +-- CHILD SEGMENT

Arquitetura de um Banco IMS

1. Definir a Hierarquia

Vamos criar um banco bancário.

CLIENTE
 |
 +-- CONTA
       |
       +-- MOVIMENTO

Cada elemento será um Segment.


Segmento CLIENTE

CLIENTE
--------
CPF
NOME
DATA-NASC

Segmento CONTA

CONTA
------
AGENCIA
CONTA
SALDO

Segmento MOVIMENTO

MOVIMENTO
----------
DATA
TIPO
VALOR

Passo 1 – Criar o DBD

DBD significa:

Data Base Definition

É o equivalente ao:

CREATE DATABASE

dos bancos relacionais.


Exemplo DBD

BANKDB   DBD NAME=BANKDB,ACCESS=HDAM

         SEGM NAME=CLIENTE,BYTES=100
         FIELD NAME=(CPF,SEQ,U),BYTES=11,START=1

         SEGM NAME=CONTA,PARENT=CLIENTE,BYTES=80
         FIELD NAME=(NUMCONTA,SEQ,U),BYTES=10,START=1

         SEGM NAME=MOVIMENTO,PARENT=CONTA,BYTES=120
         FIELD NAME=(DATA,SEQ),BYTES=8,START=1

         DBDGEN
         FINISH
         END

Observe:

CLIENTE
   |
   +-- CONTA
          |
          +-- MOVIMENTO

Foi criado através do parâmetro:

PARENT=

Passo 2 – Gerar o DBD

Executar DBDGEN.

JCL:

//DBDGEN JOB
//ASM     EXEC PGM=ASMA90
//SYSIN   DD *
   DBD SOURCE
/*

Resultado:

DBD LIBRARY

Passo 3 – Criar o PSB

PSB define quem acessa o banco.

Equivale a permissões.

Exemplo:

BANKPSB  PSBGEN LANG=COBOL

         PCB TYPE=DB,
             DBDNAME=BANKDB,
             PROCOPT=G

         END

PROCOPT:

G  = Read
I  = Insert
R  = Replace
D  = Delete
A  = All

Passo 4 – Gerar o PSB

Executar:

PSBGEN

Gerando:

PSBLIB

Passo 5 – Criar o ACB

Tradicional IMS:

DBD + PSB = ACB

Executar:

ACBGEN

No IMS moderno:

Managed ACB

A geração é feita pelo IMS Catalog.


Passo 6 – Definir os Data Sets

Criar o banco físico.

Normalmente:

//ALLOC EXEC PGM=IEFBR14
//DBDS01 DD DSN=IMS.BANKDB.DBDS01,

ou IDCAMS.

Exemplo:

//IDCAMS EXEC PGM=IDCAMS
//SYSIN DD *
 DEFINE CLUSTER -
   (NAME(IMS.BANKDB) -
    CYL(50 10))
/*

Passo 7 – Inicializar o Banco

Utility:

DFSURGL0

ou

DFSURGU0

dependendo do tipo.


Inserindo Dados

Aqui acontece a maior diferença.

Não existe:

INSERT INTO

Existe chamada DL/I.


Inserir Cliente

COBOL

CALL 'CBLTDLI'
 USING
   DLI-ISRT
   PCB
   CLIENTE-AREA

Comando:

ISRT

Inserir Conta

Primeiro posiciona no cliente.

GU CLIENTE

Depois:

ISRT CONTA

Inserir Movimento

Posiciona na conta.

GU CONTA

Depois:

ISRT MOVIMENTO

Hierarquia Final

CLIENTE
 CPF=123

    CONTA
    12345

       MOVIMENTO
       PIX

       MOVIMENTO
       TED

       MOVIMENTO
       SAQUE

Consultando Dados

Equivalente ao SELECT.

Comando:

GU

Get Unique

CALL 'CBLTDLI'
 USING
    DLI-GU
    PCB
    IO-AREA
    SSA

Ler Próximo Registro

GN

Get Next


Ler Filho

GNP

Get Next Within Parent


Atualizar Registro

REPL

Equivalente:

UPDATE

Excluir Registro

DLET

Equivalente:

DELETE

Dá Para Fazer em REXX?

Sim.

Principalmente para:

  • Automação

  • Administração IMS

  • Consultas

  • Operações

  • Catalog

  • Type-2 Commands

Exemplo simplificado:

ADDRESS TSO

"SUBCOM IMS"

"QUERY IMSPLEX"
"QUERY DB NAME(BANKDB)"

Mas o REXX normalmente não cria segmentos diretamente.

A criação estrutural do banco ocorre através de:

DBDGEN
PSBGEN
ACBGEN
IMS Catalog
Utilities IMS

Laboratório Completo Bellacosa Mainframe

Banco Escola

ALUNO
 |
 +-- CURSO
 |
 +-- NOTA

Segmento Root

ALUNO

Campos:

RA
NOME
IDADE

Filho

CURSO

Campos:

CODCURSO
DESCRICAO

Neto

NOTA

Campos:

PROVA
VALOR

Fluxo:

1 Criar DBD
2 Executar DBDGEN
3 Criar PSB
4 Executar PSBGEN
5 Gerar ACB
6 Alocar DBDS
7 Inicializar banco
8 Inserir ALUNO
9 Inserir CURSO
10 Inserir NOTA
11 Consultar via GU/GN
12 Atualizar via REPL
13 Excluir via DLET

Visão Mental Para Nunca Esquecer

Quando alguém perguntar:

"Como criar uma tabela no IMS?"

Pense:

TABELA -> SEGMENTO
REGISTRO -> OCORRÊNCIA DO SEGMENTO
CHAVE PRIMÁRIA -> FIELD SEQ
FOREIGN KEY -> RELAÇÃO PARENT
DATABASE -> DBD
SCHEMA -> DBD + PSB
SELECT -> GU/GN
INSERT -> ISRT
UPDATE -> REPL
DELETE -> DLET

O segredo do IMS é abandonar a mentalidade relacional e enxergar o banco como uma árvore hierárquica navegável, onde o acesso ocorre por caminhos pai-filho, e não por joins SQL. É exatamente por isso que, mesmo após mais de 55 anos, o IMS continua processando bilhões de transações por dia em bancos, seguradoras, companhias aéreas e governos. 🚀☕💣

 


sábado, 3 de abril de 2021

☕💣🚀 PADAWAN, O IMS NÃO É UM BANCO DE DADOS. É UMA CIVILIZAÇÃO DIGITAL QUE SOBREVIVEU A TODAS AS MODAS DA COMPUTAÇÃO!

 

Bellacosa Mainframe e o database ims

☕💣🚀 PADAWAN, O IMS NÃO É UM BANCO DE DADOS. É UMA CIVILIZAÇÃO DIGITAL QUE SOBREVIVEU A TODAS AS MODAS DA COMPUTAÇÃO!

A Anatomia Completa do IMS DB: Como uma Tecnologia Nascida Para Levar o Homem à Lua Continua Movimentando Trilhões de Dólares no Século XXI

Quando alguém escuta a sigla IMS, normalmente imagina um sistema antigo, preso aos anos 1960, escondido em alguma sala refrigerada de um banco.

Mas essa visão está tão errada quanto acreditar que um Boeing 787 voa usando a mesma tecnologia dos irmãos Wright.

O IMS evoluiu.

E evoluiu muito.

O que nasceu em 1966 para ajudar a NASA no Programa Apollo transformou-se em uma das plataformas de gerenciamento de dados mais resilientes da história da computação. Segundo o material estudado, o IMS foi desenvolvido pela IBM em parceria com Rockwell e Caterpillar para apoiar o projeto que levaria o homem à Lua.

Mais de meio século depois, ele continua processando algumas das cargas de trabalho mais críticas do planeta.

E existe uma razão simples para isso:

O IMS não foi construído para ser bonito.

Foi construído para nunca falhar.


O Grande Equívoco dos Novatos

Uma das primeiras armadilhas para quem começa a estudar IMS é tentar compará-lo diretamente com bancos relacionais.

O raciocínio geralmente é:

  • Oracle possui tabelas

  • SQL Server possui tabelas

  • PostgreSQL possui tabelas

  • Então IMS também deve possuir tabelas

Não.

O IMS enxerga o mundo de forma completamente diferente.

Enquanto bancos relacionais organizam informações em linhas e colunas, o IMS organiza informações em árvores hierárquicas.

Imagine uma árvore genealógica.

Existe:

  • um ancestral

  • filhos

  • netos

  • bisnetos

Esse é exatamente o modelo mental utilizado pelo IMS.

A estrutura inteira foi desenhada para representar relacionamentos naturais de dependência.


Por Que a IBM Criou um Banco Hierárquico?

Voltemos para 1966.

Não existiam:

  • bancos relacionais

  • SQL

  • ORM

  • Hibernate

  • Entity Framework

  • MongoDB

  • Kubernetes

A preocupação era outra.

A NASA precisava controlar volumes gigantescos de componentes.

Imagine um foguete Saturn V.

Ele possuía:

  • estágios

  • motores

  • sistemas hidráulicos

  • sistemas elétricos

  • sensores

Cada componente dependia de outro componente.

O modelo hierárquico era extremamente natural para representar essa realidade.

Foi daí que nasceu o IMS.


O Que É um Segmento?

No universo IMS, tudo gira ao redor do conceito de segmento.

O tutorial define segmento como a menor unidade de informação movimentada entre a aplicação e o banco através do DL/I.

Pense nele como um registro lógico.

Exemplo:

CLIENTE
--------
Código
Nome
CPF
Telefone

Esse conjunto de campos forma um segmento.


Campo Não É Segmento

Outro erro comum.

Campo e segmento não são a mesma coisa.

O segmento é o recipiente.

Os campos são os dados armazenados dentro dele.

Exemplo:

CLIENTE
    Código
    Nome
    CPF
    Cidade

CLIENTE = Segmento

Código = Campo

Nome = Campo

CPF = Campo

Cidade = Campo

Parece simples.

Mas essa distinção é fundamental para entender DBDs, PSBs e chamadas DL/I.


O Poder da Hierarquia

Imagine uma seguradora.

Cada cliente possui:

CLIENTE
 ├── APÓLICE
 │     ├── COBERTURA
 │     ├── SINISTRO
 │     └── PAGAMENTO

Perceba algo interessante.

Um sinistro não existe sem uma apólice.

Uma apólice não existe sem um cliente.

Essa dependência natural é exatamente o que o IMS modela de forma brilhante.


O Segmento Root: O Imperador da Galáxia

Toda hierarquia IMS possui um segmento raiz.

O chamado Root Segment.

Ele é o ponto de entrada para todo o restante da estrutura.

Sem ele nada existe.

Na prática:

CLIENTE
 ├── CONTA
 ├── CARTÃO
 └── EMPRÉSTIMO

CLIENTE seria o Root.

Toda navegação começa nele.

Toda recuperação passa por ele.

Toda inserção depende dele.


Parent, Child, Dependents e a Família IMS

Uma das razões pelas quais o IMS é intuitivo é que ele utiliza conceitos familiares.

O material apresenta:

Parent Segment

Segmento que possui filhos abaixo dele.

Child Segment

Segmento que possui um pai acima dele.

Dependent Segment

Qualquer segmento que não seja raiz.

Isso cria uma estrutura extremamente organizada.


Twin Segments: Os Gêmeos do Banco

Uma característica curiosa do IMS é a existência dos Twin Segments.

Imagine:

CLIENTE
 ├── CONTA 001
 ├── CONTA 002
 ├── CONTA 003

Todas são ocorrências do mesmo tipo de segmento.

Logo:

CONTA 001
CONTA 002
CONTA 003

são twins.

Em bancos relacionais isso parece trivial.

No IMS isso influencia diretamente o processamento DL/I.


Database Record: Muito Mais Que Um Registro

Em SQL um registro normalmente significa uma linha.

No IMS não.

Um Database Record é composto pelo Root mais todos os segmentos subordinados.

Exemplo:

CLIENTE
 ├── CONTA
 │    ├── MOVIMENTO
 │    ├── MOVIMENTO
 │    └── MOVIMENTO
 └── CARTÃO

Tudo isso junto forma um único Database Record.

Essa diferença muda completamente a forma de programar.


Database Path: A Estrada Dentro da Árvore

O conceito de Path é outro dos pilares do IMS.

Um Path é o caminho percorrido do Root até um segmento específico.

Exemplo:

CLIENTE
 └── CONTA
      └── MOVIMENTO

O caminho é:

CLIENTE → CONTA → MOVIMENTO

Não é permitido "pular" níveis.

Isso garante consistência estrutural.


DL/I: O Tradutor Universal

Se existe algo que todo programador IMS precisa dominar é o DL/I.

O Data Language Interface é a interface utilizada pelos programas para conversar com o banco.

Pense nele como:

SQL do IMS

Mas muito mais poderoso.

E muito mais perigoso para iniciantes.


Processamento Sequencial: A Filosofia Original

O tutorial mostra que o processamento sequencial segue um padrão fixo:

Primeiro desce.

Depois anda para a direita.

Em outras palavras:

Root
 ↓
Filho
 ↓
Neto
 ↓
Bisneto
 →
Próximo irmão

Isso parece estranho para quem vem de SQL.

Mas oferece uma eficiência impressionante.


Processamento Aleatório: A Arma dos Especialistas

Nem sempre queremos percorrer a árvore inteira.

Às vezes queremos acessar diretamente:

Cliente 999999

Nessa situação usamos Random Processing.

Para isso fornecemos uma chave concatenada.

Exemplo:

BANCO
CLIENTE
CONTA

Essa combinação identifica exatamente o caminho desejado.


Chave Concatenada: A Magia do Desempenho

O tutorial apresenta um conceito frequentemente ignorado pelos novatos:

Concatenated Key.

Ela contém as chaves de todos os segmentos necessários para localizar um ponto específico da árvore.

Exemplo:

AGENCIA = 1234
CLIENTE = 998877
CONTA = 000001

Juntos eles definem um único caminho.

É isso que torna o acesso tão rápido.


Por Que IMS Costuma Ser Mais Rápido Que Bancos Relacionais?

O próprio material destaca que o processamento IMS costuma ser mais rápido que DB2 para determinadas cargas.

O motivo é simples.

Não existe JOIN.

Não existe otimizador tentando adivinhar o melhor plano.

Não existe estatística de tabela.

A estrutura já define previamente o caminho.

O acesso é direto.

Determinístico.

Previsível.


DBD: O DNA do Banco

Chegamos a uma das partes mais importantes.

O DBD.

Database Descriptor.

Se o banco fosse um ser humano, o DBD seria seu DNA.

Ele descreve:

  • segmentos

  • campos

  • relacionamentos

  • método de acesso

  • estrutura física

Nada existe sem o DBD.


DBDGEN: O Ritual Sagrado dos DBAs IMS

O DBD é construído através do DBDGEN.

Quem já trabalhou com IMS sabe:

Criar um DBD não é apenas escrever macros.

É desenhar a forma como os próximos milhões de registros viverão pelos próximos anos.

Um erro de modelagem pode sobreviver décadas.


PSB: A Janela do Programa

O programa COBOL não enxerga o banco inteiro.

Ele enxerga apenas o que o PSB permite.

Imagine um castelo.

O DBD define o castelo.

O PSB define quais portas podem ser abertas.

Isso oferece:

  • segurança

  • isolamento

  • controle


PCB: O Passaporte da Aplicação

Dentro do PSB encontramos os famosos PCBs.

Program Communication Blocks.

Eles informam:

  • qual banco acessar

  • quais segmentos acessar

  • quais operações executar

Sem PCB não existe comunicação.


ACB: A União dos Mundos

O ACB combina:

DBD
+
PSB
=
ACB

O tutorial descreve o ACB como a forma executável do acesso ao banco.

É o elo final entre definição e execução.


DFSRRC00: O Maestro da Orquestra

Uma curiosidade que separa iniciantes de veteranos.

Programas IMS Batch normalmente são executados através do módulo:

DFSRRC00

O material mostra esse papel do módulo de inicialização batch IMS.

Quando um desenvolvedor COBOL executa um programa IMS, frequentemente é esse componente que está coordenando toda a operação.


O Programa COBOL Não Conversa Diretamente Com o Banco

Esse é outro conceito importante.

O fluxo real é:

COBOL
 ↓
DL/I
 ↓
IMS
 ↓
Database

O programa nunca acessa diretamente os dados.

Tudo passa pela camada DL/I.


O Verdadeiro Poder do IMS

Agora chegamos ao ponto que raramente aparece em tutoriais.

O verdadeiro poder do IMS não está em segmentos.

Nem em DBDs.

Nem em PSBs.

Nem mesmo no DL/I.

O verdadeiro poder está na previsibilidade.

Quando um banco movimenta:

  • cartões

  • seguros

  • telecomunicações

  • reservas aéreas

  • operações bancárias

o requisito principal não é inovação.

É sobrevivência.

O IMS foi desenhado para operar continuamente durante décadas.

E conseguiu.


O Que os Desenvolvedores Modernos Podem Aprender com o IMS?

Muita coisa.

Principalmente:

Modelagem importa

O IMS força o arquiteto a pensar antes de criar.

Performance nasce no desenho

Não existe milagre posterior.

Estruturas simples escalam

Uma árvore bem desenhada pode sobreviver cinquenta anos.

Confiabilidade vale mais que moda

Tecnologias modernas aparecem todos os anos.

Pouquíssimas permanecem relevantes por meio século.


Conclusão: O IMS Não Sobreviveu ao Futuro. Ele Ajudou a Construí-lo.

Existe uma frase que gosto de repetir aos alunos:

"O mundo não roda em aplicativos modernos. O mundo roda em sistemas que nunca podem parar."

O IMS é um dos maiores exemplos dessa realidade.

Enquanto gerações de bancos surgiram e desapareceram, o IMS continuou armazenando informações críticas, processando transações e sustentando operações que movimentam parte significativa da economia mundial.

Quando você estuda Root Segments, Paths, DBDGEN, PSBGEN, PCBs e DL/I, não está apenas aprendendo uma tecnologia antiga.

Está estudando uma das arquiteturas mais bem-sucedidas da história da computação corporativa.

E talvez essa seja a maior lição do IMS:

Em tecnologia, longevidade não acontece por acaso. Ela é conquistada através de decisões de arquitetura tão sólidas que continuam funcionando décadas depois que todas as tendências da época desapareceram.


segunda-feira, 1 de fevereiro de 2021

IMS DB e COBOL: Entendendo os Bastidores das Chamadas DL/I, PCB Masks e o Modelo de Acesso que Sobreviveu a Todas as Revoluções da TI

 

Bellacosa Mainframe introdução ao ims db e cobol mainframe

☕💣🚀 PADAWAN, VOCÊ NÃO PROGRAMA IMS COM COBOL. VOCÊ NEGOCIA COM UMA CIVILIZAÇÃO DE 50 ANOS DE EXPERIÊNCIA!

IMS DB e COBOL: Entendendo os Bastidores das Chamadas DL/I, PCB Masks e o Modelo de Acesso que Sobreviveu a Todas as Revoluções da TI

Quando um desenvolvedor moderno abre um programa COBOL com acesso ao IMS pela primeira vez, normalmente a reação é sempre a mesma:

"Cadê o SELECT?"

"Cadê o OPEN?"

"Cadê o CURSOR?"

"Cadê o SQL?"

E então ele encontra algo aparentemente estranho:

ENTRY 'DLITCBL' USING STUDENT-PCB-MASK.

Logo depois:

CALL 'CBLTDLI' USING DLI-GN
                     STUDENT-PCB-MASK
                     SEGMENT-I-O-AREA.

E finalmente:

GOBACK.

Pronto.

Acabou.

Nenhum SELECT.

Nenhum OPEN.

Nenhum FETCH.

Nenhuma conexão.

Nenhum driver JDBC.

Nenhuma string de conexão.

Nenhuma senha.

Nenhum framework.

E mesmo assim...

o programa está acessando um banco de dados capaz de processar milhões de transações por segundo.

É nesse momento que o jovem padawan percebe que IMS não é apenas um banco de dados.

IMS é uma filosofia completamente diferente de acesso a dados.

E entender as instruções apresentadas no material IMS DB COBOL Basics é o primeiro passo para compreender por que milhares de sistemas críticos continuam rodando sobre IMS até hoje.


O Erro Mais Comum: Tentar Enxergar IMS Como Um Banco Relacional

Grande parte dos profissionais atuais nasceu tecnicamente dentro do paradigma SQL.

Eles pensam assim:

SELECT *
FROM CLIENTE
WHERE CPF='12345678900'

No mundo relacional você pergunta:

"Banco, me devolva os dados."

No IMS a lógica é diferente.

Você navega.

Você percorre.

Você se posiciona.

Você caminha pela hierarquia.

O IMS funciona muito mais próximo de um sistema de arquivos inteligente do que de um banco relacional tradicional.

Imagine uma estrutura:

CLIENTE
 |
 +-- CONTA
      |
      +-- MOVIMENTO

Não existe JOIN.

Não existe otimizador SQL.

Não existe plano de acesso dinâmico.

Você navega diretamente pela estrutura.

E é justamente isso que torna o IMS absurdamente rápido.


O Que Acontece Quando o Programa Começa?

O documento mostra a instrução:

ENTRY 'DLITCBL'

que representa a porta de entrada do programa IMS.

Mas vamos muito além da definição formal.

Na prática ocorre o seguinte:

JCL
 |
 +-- IMS Control Region
        |
        +-- DL/I
              |
              +-- Programa COBOL

O COBOL não inicia sozinho.

Quem inicia tudo é o IMS.

O programa COBOL é praticamente um "convidado" dentro do ambiente IMS.

Quando o IMS entrega o controle ao programa:

  • carrega PSB

  • carrega PCB

  • monta buffers

  • monta áreas de comunicação

  • posiciona recursos

e somente então chama:

ENTRY 'DLITCBL'

Nesse instante o COBOL recebe acesso ao universo IMS.


DLITCBL: A Ponte Entre Dois Mundos

O material explica que DLITCBL significa:

DL/I TO COBOL

Mas historicamente isso é muito mais interessante.

Na década de 1970:

  • COBOL não conhecia IMS

  • IMS não conhecia COBOL

Era necessário um mecanismo de integração.

DLITCBL tornou-se esse mecanismo.

É equivalente ao que hoje chamaríamos de:

  • Driver JDBC

  • ORM

  • API Gateway

  • Framework de Persistência

Só que criado décadas antes dessas tecnologias existirem.


PCB: O Conceito Que Confunde Todo Mundo

O documento fala repetidamente sobre PCB Masks.

Esse é um dos conceitos mais importantes do IMS.

PCB significa:

Program Communication Block

Pense nele como um contrato.

O programa não acessa diretamente o banco.

O programa acessa o banco através do PCB.

O PCB informa:

  • qual banco pode acessar

  • quais segmentos pode ler

  • quais permissões possui

  • qual status retornou

É parecido com:

Token de acesso
+
Metadata
+
Controle de navegação

Tudo junto.


PCB Mask: O Espelho Local do PCB

O material mostra:

LINKAGE SECTION.
01 STUDENT-PCB-MASK.

Por que isso existe?

Porque o PCB real não está dentro do programa.

Ele pertence ao IMS.

Logo:

IMS
 |
 +-- PCB Real

Enquanto:

Programa COBOL
 |
 +-- PCB Mask

O PCB Mask é simplesmente uma representação local.

Uma espécie de ponte entre o programa e o PCB verdadeiro.


O Campo Mais Importante do PCB

Observe no exemplo:

05 STD-STATUS-CODE PIC XX.

Este campo vale ouro.

Porque toda chamada DL/I retorna um status.

Sem exceção.

É equivalente a:

SQLException

ou

RETURN CODE

ou

Exception

Mas muito mais eficiente.

Após cada chamada:

CALL 'CBLTDLI'

o IMS atualiza:

STD-STATUS-CODE

indicando sucesso ou erro.


O Que Realmente É o CBLTDLI?

O documento explica:

CBLTDLI = COBOL TO DL/I

Esta é a interface oficial entre COBOL e IMS.

Toda operação passa por ela.

Imagine:

COBOL
  |
CBLTDLI
  |
DL/I
  |
IMS DB

Ela funciona como uma API.

Décadas antes da palavra API virar moda.


A Grande Sacada: O CALL Sempre Tem a Mesma Estrutura

O material apresenta:

CALL 'CBLTDLI' USING

seguido de parâmetros.

O mais interessante é que a estrutura básica quase nunca muda.

Você altera apenas o Function Code.

Por exemplo:

GU

Get Unique

GN

Get Next

GHU

Get Hold Unique

REPL

Replace

ISRT

Insert

DLET

Delete

Todos utilizam o mesmo mecanismo.


GU: A Consulta Direta

Imagine:

CLIENTE
CPF=123

Você quer exatamente esse cliente.

Então:

CALL 'CBLTDLI'
USING DLI-GU

O IMS procura diretamente pela chave.

Resultado:

Leitura extremamente rápida

Sem scan.

Sem cursor.

Sem otimização dinâmica.


GN: O Cursor Original dos Anos 70

O exemplo do documento utiliza:

DLI-GN

GN significa:

Get Next

Ele busca o próximo segmento.

Na prática:

Registro 1
Registro 2
Registro 3
Registro 4

Cada chamada:

GN

avança um registro.

Muito parecido com:

FETCH NEXT

Só que décadas mais antigo.


GHU: O Início de Uma Atualização

Ler é simples.

Atualizar é diferente.

O IMS precisa garantir integridade.

Por isso existe:

GHU

Get Hold Unique.

Você não apenas lê.

Você bloqueia.

É semelhante a:

SELECT FOR UPDATE

REPL: A Atualização de Verdade

Após o GHU:

REPL

substitui o segmento.

Fluxo clássico:

GHU
 |
ALTERA DADOS
 |
REPL

Essa sequência existe em praticamente todos os sistemas IMS do planeta.


ISRT: Inserindo Dados

O documento mostra:

DLI-ISRT

Essa instrução cria novos segmentos.

Exemplo:

CLIENTE
 |
 +-- NOVA CONTA

O IMS posiciona automaticamente o segmento dentro da hierarquia.


DLET: O Botão Vermelho

DLET

Remove um segmento.

Mas atenção.

Em IMS isso pode significar remover uma árvore inteira.

Exemplo:

CLIENTE
 |
 +-- CONTA
 |
 +-- MOVIMENTO

Dependendo da estrutura:

DLET CLIENTE

pode eliminar tudo abaixo.

Por isso é uma operação tratada com extremo cuidado.


Segment I/O Area: A Caixa de Transporte

O documento mostra:

01 SEGMENT-I-O-AREA PIC X(150).

Ela funciona como uma área de troca.

Na leitura:

IMS -> I/O AREA

Na gravação:

I/O AREA -> IMS

É o equivalente aos buffers modernos.


SSA: O GPS do IMS

O documento menciona Segment Search Arguments (SSA).

SSA é o mecanismo de pesquisa.

Exemplo:

CLIENTE(CPF=123)

Traduzido para SSA.

Ele informa ao IMS exatamente onde procurar.

É o ancestral dos predicados SQL.


Por Que Não Existe OPEN e CLOSE?

Essa pergunta aparece em todos os treinamentos.

O material menciona que:

No SELECT
No ASSIGN
No OPEN
No CLOSE

para IMS.

O motivo é simples.

Quem administra o banco é o próprio IMS.

Não o programa.

O programa apenas solicita serviços.

Essa arquitetura reduz erros e aumenta estabilidade.


A Importância do GOBACK

O documento alerta para algo crítico:

GOBACK

deve ser utilizado.

Não:

STOP RUN

Isso parece detalhe.

Mas não é.

Quando você executa:

GOBACK

o controle retorna ao IMS.

Então o IMS pode:

  • liberar locks

  • atualizar logs

  • sincronizar buffers

  • finalizar recursos

Com:

STOP RUN

você devolve controle ao sistema operacional.

O IMS perde a chance de executar essas tarefas.

Resultado?

Abends.

Locks presos.

Recursos inconsistentes.

Dor de cabeça para a produção.


O Que os Desenvolvedores Modernos Não Percebem

Muitos olham para IMS e enxergam uma tecnologia antiga.

Mas observem:

Década de 1970:

API de acesso
Controle transacional
Checkpoint
Recovery
Locking
Alta disponibilidade
Navegação otimizada

Tudo isso já existia.

Décadas antes de:

  • Hibernate

  • Spring

  • REST

  • Kubernetes

  • Microservices


A Verdadeira Lição do IMS

O material apresenta apenas os fundamentos:

  • ENTRY DLITCBL

  • PCB Mask

  • CALL CBLTDLI

  • Segment I/O Area

  • SSA

  • GOBACK

Mas por trás dessas poucas instruções existe uma das arquiteturas mais bem-sucedidas da história da computação.

Enquanto dezenas de tecnologias nasceram, cresceram e desapareceram, o IMS continuou processando:

  • bancos

  • seguradoras

  • governos

  • companhias aéreas

  • cartões de crédito

  • sistemas financeiros globais

O motivo não é nostalgia.

Não é resistência à mudança.

Não é conservadorismo.

É porque a arquitetura foi construída para resolver problemas reais de desempenho, disponibilidade e integridade de dados.

E aqui está a maior lição para o jovem padawan:

Um programa COBOL com IMS não faz consultas.

Ele conversa com uma infraestrutura que foi refinada ao longo de mais de meio século.

Cada CALL 'CBLTDLI' representa décadas de engenharia, otimização e experiência operacional acumuladas desde os primórdios do processamento transacional corporativo.

Entender essas chamadas não é apenas aprender IMS.

É compreender uma das fundações sobre as quais a computação empresarial moderna foi construída. ☕💣🚀

Fonte analisada: IMS DB - COBOL Basics (TutorialsPoint), abordando ENTRY DLITCBL, PCB Masks, CALL CBLTDLI, códigos de função DL/I e uso de GOBACK em programas COBOL que acessam IMS DB.