☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

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

quinta-feira, 28 de maio de 2026

☕🔥💣 LABORATÓRIO IMS DL/I: CRIANDO UM BANCO HIERÁRQUICO NA PRÁTICA

 

Bellacosa Mainframe lahoratorio pratico de ims dl/i crie seu banco de dados hierarquico

☕🔥💣 LABORATÓRIO IMS DL/I: CRIANDO UM BANCO HIERÁRQUICO NA PRÁTICA

Como construir um banco IMS para CURSOS, ALUNOS e NOTAS — passo a passo para programadores COBOL iniciantes

Se você veio do mundo:

  • DB2

  • Oracle

  • SQL Server

  • MySQL

prepare-se.

Porque no IMS o mundo funciona de maneira MUITO diferente. 😄

Aqui não existem:

❌ tabelas tradicionais
❌ SELECT com JOIN
❌ modelagem relacional clássica

No IMS nós pensamos em:

🌳 HIERARQUIA

E quando você entende isso…

o “dinossauro” começa a fazer sentido.


🚀 Objetivo do Laboratório

Vamos criar um banco IMS para armazenar:

  • cursos

  • alunos

  • notas

Nossa estrutura será:

CURSO
 └── ALUNO
      └── NOTA

Exemplo:

COBOL
 └── JOAO
      └── 9.5

🌳 Entendendo a Hierarquia

No IMS existe:

TipoFunção
ROOTtopo da árvore
CHILDfilho
DEPENDENTdependente

No nosso caso:

SegmentoTipo
CURSOROOT
ALUNOCHILD
NOTACHILD do ALUNO

💾 Estrutura Física Mental

Fisicamente o IMS gravará algo parecido com:

CURSO
   ↓ ponteiro
ALUNO
   ↓ ponteiro
NOTA

O IMS literalmente conecta segmentos usando ponteiros físicos.


☕ Etapa 1 — Criando o DBD

O:

DBD

(Database Description)

define a estrutura do banco.


📦 DBD Básico

DBD   NAME=ESCOLA,ACCESS=HIDAM

DATASET DD1=ESCOLADB

SEGM  NAME=CURSO,BYTES=50,PARENT=0
FIELD NAME=(CODCURSO,SEQ,U),BYTES=5,START=1

SEGM  NAME=ALUNO,BYTES=80,PARENT=CURSO
FIELD NAME=(MATRIC,SEQ,U),BYTES=6,START=1

SEGM  NAME=NOTA,BYTES=20,PARENT=ALUNO
FIELD NAME=(IDNOTA,SEQ,U),BYTES=4,START=1

DBDGEN
FINISH
END

🧠 O Que Está Acontecendo?


🌳 CURSO

Segmento ROOT.

Topo da árvore.


👨‍🎓 ALUNO

Filho de CURSO.


📊 NOTA

Filho de ALUNO.


🚀 ACCESS=HIDAM

Define tipo do banco.

HIDAM:

✅ rápido
✅ indexado
✅ muito usado em IMS clássico


☕ Etapa 2 — Gerando o DBD

Agora precisamos gerar o banco.

Usamos JCL.


📜 JCL DBDGEN

//DBDGEN EXEC PGM=ASMA90
//SYSIN DD *
  DBD ...
/*

Depois fazemos:

DBDGEN

para criar o módulo do banco.


🚀 Etapa 3 — Criando o PSB

O:

PSB

(Program Specification Block)

define como programas acessam o banco.


📦 Exemplo PSB

PSBGEN  PSBNAME=PSBESC

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

SENSEG  NAME=CURSO
SENSEG  NAME=ALUNO,PARENT=CURSO
SENSEG  NAME=NOTA,PARENT=ALUNO

END

🧠 PROCOPT=G

Permite:

GET

Somente leitura.

Depois podemos usar:

PROCOPTFunção
Gread
Aall
Iinsert
Ddelete

☕ Etapa 4 — ACBGEN

Depois geramos:

ACB

O famoso:

Application Control Block

📜 JCL ACBGEN

//ACBGEN EXEC PGM=DFSRRC00

🚀 Etapa 5 — Inicializando Banco

Criamos datasets IMS.

Normalmente usando:

  • IDCAMS

  • VSAM

  • utilities IMS


📦 Exemplo IDCAMS

//IDCAMS EXEC PGM=IDCAMS

 DEFINE CLUSTER -
 (NAME(ESCOLADB))

☕ Etapa 6 — Inserindo Dados

Agora vem a parte divertida. 😄


👨‍💻 Programa COBOL IMS

CALL 'CBLTDLI'
     USING 'ISRT'
           DB-PCB
           CURSO-AREA

🌳 ISRT

Significa:

INSERT SEGMENT


📦 Inserindo CURSO

CURSO = COBOL

👨‍🎓 Inserindo ALUNO

Depois navegamos:

CURSO → ALUNO

📊 Inserindo NOTA

Depois:

ALUNO → NOTA

🚀 Estrutura Final

COBOL
 └── JOAO
      └── 9.5

COBOL
 └── MARIA
      └── 8.7

☕ Etapa 7 — Consultando Dados

Agora usamos:

GU

(Get Unique)


📦 Exemplo

CALL 'CBLTDLI'
     USING 'GU  '
           DB-PCB
           AREA
           SSA.

🔑 SSA

Segment Search Argument.

Exemplo:

CURSO(CODCURSO=COBOL)

🚀 Navegando Pela Árvore

Agora usamos:

ComandoFunção
GUbusca específica
GNpróximo
GNPpróximo filho

🌳 Exemplo Navegação

GU CURSO
GN ALUNO
GNP NOTA

☕ Etapa 8 — Atualizando Nota

Usamos:

REPL

(Replace)


📦 Fluxo

1️⃣ GU NOTA
2️⃣ altera AREA
3️⃣ REPL

☕ Etapa 9 — Deletando Registro

Usamos:

DLET


📦 Exemplo

CALL 'CBLTDLI'
     USING 'DLET'
           DB-PCB

🚀 O Que o Programador Junior Precisa Entender

No IMS:

⚡ você NÃO pensa em tabela.

Você pensa em:

✅ árvore
✅ caminho
✅ navegação
✅ pai-filho
✅ segmentos


⚔️ Diferença Mental DB2 vs IMS


🟦 DB2

Você pergunta:

SELECT *

🌳 IMS

Você navega:

ROOT → CHILD → CHILD

☕ Curiosidade Bellacosa Mainframe

O IMS nasceu em:

🚀 1968

para ajudar a NASA no projeto Apollo.

Décadas depois…

a mesma lógica hierárquica ainda processa:

💳 cartões
🏦 bancos
📱 mobile banking
✈️ companhias aéreas
📡 telecom

O “dinossauro” continua vivo.

E absurdamente rápido.


sábado, 6 de abril de 2019

📚 LUCA PACIOLI E O LIVRO-RAZÃO DO MAINFRAME

Bellacosa Mainframe e o banco de dados IMS no Mundo Mainframe

 

☕ Um Café no Bellacosa Mainframe

📚 LUCA PACIOLI E O LIVRO-RAZÃO DO MAINFRAME

IMS DB, IMS TM, DL/I, COBOL, segmentos, DBD, PSB, PCB, SSA, GU, GN, GNP, commit, rollback, CICS e Db2 — e o dia em que o pai da contabilidade descobriu que um ABEND também precisa fechar as contas.






🎬 PRÓLOGO — O monge encontrou um lançamento que não fechava

Imagine que Luca Pacioli, matemático e frade franciscano associado à sistematização e divulgação da contabilidade por partidas dobradas no Renascimento, atravessasse alguns séculos e aparecesse diante de um IBM mainframe.

Nosso jovem programador COBOL estaria sentado diante de uma tela verde.

Na tela:

GU
GN
GNP
GHU
ISRT
REPL
DLET

Pacioli observaria aquilo por alguns segundos.

— Filho, onde estão seus livros?

O programador apontaria para o terminal.

— Aqui.

— Onde estão os lançamentos?

— No IMS.

— E onde está o razão?

— Bem... depende. Pode estar no IMS DB ou no Db2.

Pacioli provavelmente franziria a testa.

— Então explique desde o começo.

Excelente ideia.

Porque IMS é justamente uma daquelas tecnologias que assustam quando aprendemos pelas siglas e ficam muito mais interessantes quando entendemos o problema que cada peça resolve.

Pegue seu café.

Hoje nosso mestre será Luca Pacioli.

E nossa primeira lição será simples:

antes de lançar qualquer coisa, precisamos entender em qual livro estamos escrevendo.



📜 CAPÍTULO 1 — IMS NÃO É APENAS UM BANCO DE DADOS

Um dos primeiros erros do Padawan mainframe é ouvir IMS e imediatamente concluir:

IMS é um banco de dados.

Não exatamente.

IMS significa Information Management System e possui dois grandes mundos que precisamos separar mentalmente:

                     IMS
                      │
             ┌────────┴────────┐
             │                 │
          IMS DB             IMS TM
             │                 │
          DADOS            TRANSAÇÕES

O IMS DB é a parte relacionada ao gerenciamento de bancos de dados hierárquicos.

O IMS TM, Transaction Manager, é a parte relacionada ao processamento de transações e mensagens.

Essa distinção é importantíssima porque permite compreender uma arquitetura como:

Usuário
   │
   ▼
IMS TM
   │
   ▼
Programa COBOL
   │
   ├────────► IMS DB
   │
   └────────► Db2

Observe algo interessante.

O programa executado pelo IMS TM não precisa necessariamente utilizar IMS DB.

Ele pode acessar Db2 e outros recursos.

Da mesma maneira, um database IMS pode ser utilizado por processamento batch.

Portanto:

IMS TM ≠ IMS DB

Eles pertencem à mesma família tecnológica, trabalham muito bem juntos, mas resolvem problemas diferentes.

Pacioli aprovaria a separação.

Na contabilidade, misturar caixa, razão, diário e balanço sem compreender a função de cada um seria receita para desastre.

No mainframe também.



🌳 CAPÍTULO 2 — PACIOLI DESCOBRE QUE O BANCO É UMA ÁRVORE

O programador moderno normalmente começa aprendendo banco relacional.

Ele imagina:

CLIENTE
CONTA
MOVIMENTO

como tabelas.

Por exemplo:

CLIENTE
+------+----------+
| ID   | NOME     |
+------+----------+
| 1001 | PACIOLI  |
+------+----------+

Depois:

CONTA
+-------+------------+
| CONTA | CLIENTE_ID |
+-------+------------+
| 12345 | 1001       |
+-------+------------+

No IMS DB precisamos mudar a cabeça.

O modelo fundamental é hierárquico.

Imagine:

                     CLIENTE
                        │
              ┌─────────┴─────────┐
              │                   │
            CONTA               CONTA
              │
        ┌─────┴─────┐
        │           │
    MOVIMENTO   MOVIMENTO

Temos uma árvore.

Os registros dessa árvore são chamados de segmentos.

Ou, na terminologia IMS:

segments.

Assim:

CLIENTE      ← segmento

CONTA        ← segmento

MOVIMENTO    ← segmento

Mas existe uma relação explícita entre eles.

CLIENTE pode ser o:

root segment.

CONTA pode ser:

child de CLIENTE.

CLIENTE será:

parent de CONTA.

MOVIMENTO poderá ser child de CONTA.

Começamos então a falar a língua do IMS:

ROOT
PARENT
CHILD
TWIN
PATH
HIERARCHY

Pacioli provavelmente desenharia imediatamente a árvore em seu caderno.

Porque antes de registrar uma operação precisamos saber onde ela pertence.



🧬 CAPÍTULO 3 — SEGMENT NÃO É SIMPLESMENTE UMA ROW

Para facilitar o aprendizado, podemos inicialmente fazer:

IMS Segment ≈ Db2 Row

Mas coloque um enorme asterisco nessa comparação.

É uma analogia didática.

No Db2, pensamos em tabelas e relações.

No IMS, pensamos muito em ocorrências de segmentos dentro de uma hierarquia.

No relacional poderíamos perguntar:

SELECT *
FROM CLIENTE
WHERE ID = 1001;

No IMS estamos frequentemente pensando:

encontre determinada ocorrência do segmento CLIENTE e depois navegue pela estrutura subordinada a ela.

Essa palavra — navegue — é importantíssima.

SQL normalmente incentiva uma visão orientada a conjuntos.

IMS tradicionalmente exige que o programador compreenda muito claramente o caminho através dos dados.



🗺️ CAPÍTULO 4 — DBD: O MAPA DO LIVRO

Pacioli pergunta:

— Quem define a estrutura dessa árvore?

Entra em cena o:

DBD — Database Description.

O DBD descreve um database IMS.

Conceitualmente:

DATABASE CLIENTDB

CLIENTE
   │
   └── CONTA
          │
          └── MOVIMENTO

Ele contém informações sobre a estrutura do database, segmentos, campos, chaves e características de acesso.

Uma ponte mental simplificada seria:

Db2                         IMS
---------------------------------------------
TABLE                       SEGMENT
ROW                         SEGMENT OCCURRENCE
COLUMN                      FIELD
PRIMARY KEY                 SEQUENCE FIELD
definição estrutural        DBD

Não memorize isso como equivalência perfeita.

Use apenas para atravessar a ponte entre o paradigma relacional e o hierárquico.

Depois destrua a ponte.

Você já estará do outro lado.


👓 CAPÍTULO 5 — PSB: NEM TODO ESCRITURÁRIO PODE VER TODO O LIVRO

Agora Pacioli faz uma pergunta muito boa:

— Todo programa pode enxergar tudo?

Não.

Aqui encontramos o:

PSB — Program Specification Block.

O PSB descreve a visão de recursos IMS disponível para determinado programa.

Imagine que o database possua:

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

Um programa talvez precise apenas de:

CLIENTE
   │
   └── CONTA

Outro pode trabalhar com:

CLIENTE
   │
   └── CARTÃO

Isso começa a demonstrar algo profundamente mainframe:

um programa não precisa receber acesso indiscriminado a tudo simplesmente porque os dados existem.

Dentro desse universo aparecem os PCBs.


🔌 CAPÍTULO 6 — PCB: O CANAL DE COMUNICAÇÃO

PCB significa:

Program Communication Block.

Ele funciona como uma importante estrutura de comunicação entre o programa e recursos IMS.

Podemos imaginar:

                  PSB
                   │
          ┌────────┼────────┐
          │        │        │
        PCB      PCB      PCB
          │        │        │
          ▼        ▼        ▼
       CLIENTDB ACCOUNTDB MESSAGE

E aqui encontramos uma regra que todo programador COBOL deveria aprender cedo:

não basta chamar o IMS. É necessário verificar o que aconteceu.

O PCB fornece informações importantes sobre o resultado das operações, incluindo status.

Se você trabalha com Db2, pense imediatamente em sua disciplina de verificar SQLCODE ou SQLSTATE.

No IMS também existe vida depois da chamada.

E ignorá-la pode custar algumas horas de sono.

Voltaremos a isso às 03:17.


📞 CAPÍTULO 7 — DL/I: O IDIOMA DO CONTADOR

DL/I significa:

Data Language/I.

É uma interface fundamental através da qual programas solicitam serviços IMS.

No COBOL tradicional você pode encontrar chamadas envolvendo:

CALL 'CBLTDLI' USING ...

E então surgem aqueles hieróglifos que assustaram nosso Padawan:

GU
GN
GNP
GHU
GHN
GHNP
ISRT
REPL
DLET

Eles não são magia.

São operações.

Vamos abrir o livro de Pacioli.


🎯 CAPÍTULO 8 — GU: ENCONTRE O LANÇAMENTO

GU — Get Unique.

Imagine que queremos encontrar determinado cliente:

CLIENTE
ID = 1001

Conceitualmente:

GU CLIENTE 1001

No Db2 sua cabeça provavelmente produziria:

SELECT *
FROM CLIENTE
WHERE ID = 1001;

Novamente: não são comandos equivalentes.

Mas a intenção didática ajuda:

encontre uma ocorrência específica.

GU é uma das primeiras operações que um estudante IMS deve compreender.


➡️ CAPÍTULO 9 — GN: CONTINUE LENDO O LIVRO

GN — Get Next.

Agora aparece um dos conceitos mais importantes do IMS:

posicionamento.

Imagine:

CLIENTE
   │
   ├── CONTA 001
   ├── CONTA 002
   └── CONTA 003

Encontramos algo.

Agora queremos continuar navegando.

GN significa essencialmente:

obtenha o próximo segmento aplicável à navegação.

O detalhe importante não é simplesmente decorar "Get Next".

É perceber que existe um contexto de navegação.

Você estava em algum lugar.

Agora quer continuar.

IMS não é simplesmente:

procure coisas aleatoriamente.

Existe uma topologia.

Existe uma posição.

Existe um caminho.


👨‍👧 CAPÍTULO 10 — GNP: NÃO SAIA DA FAMÍLIA

GNP — Get Next within Parent.

Imagine:

CLIENTE PACIOLI
      │
      ├── CONTA A
      ├── CONTA B
      └── CONTA C

Queremos navegar pelos segmentos subordinados mantendo determinado contexto parental.

O conceito de parent torna-se fundamental.

Pacioli provavelmente resumiria:

"Continue o livro, mas não vá parar na conta do vizinho."

É uma excelente maneira de lembrar GNP.


✋ CAPÍTULO 11 — O H SIGNIFICA HOLD

Agora aparecem:

GHU
GHN
GHNP

O H significa:

Hold.

São operações relacionadas à recuperação mantendo o segmento para posterior atualização.

Por exemplo, conceitualmente:

GHU
 │
 ▼
encontrar segmento
 │
 ▼
alterar dados
 │
 ▼
REPL

Isso é importante porque atualização em ambiente transacional não pode ser tratada como:

achei, mexi, boa sorte.

Há concorrência.

Outro programa pode estar interessado naquele dado.

Existe integridade.

Existe uma Unit of Work.

Existem regras de locking e recuperação.


➕ CAPÍTULO 12 — ISRT: NOVO LANÇAMENTO

ISRT — Insert.

É utilizado para inserir uma nova ocorrência.

Imagine:

CLIENTE
   │
   └── CONTA NOVA

O paralelo mental seria um:

INSERT

do mundo SQL.

Mas no IMS a hierarquia importa.

Uma CONTA subordinada a CLIENTE não é simplesmente um registro flutuando no espaço.

Ela ocupa uma posição estrutural.

Essa diferença parece pequena no treinamento.

Em produção, ela muda a maneira de pensar.


✏️ CAPÍTULO 13 — REPL: CORRIGINDO O LIVRO

REPL — Replace.

É utilizado para substituir/atualizar dados de um segmento recuperado adequadamente para alteração.

Mentalmente:

GHU
 ↓
SEGMENTO
 ↓
alteração
 ↓
REPL

No Db2 poderíamos associar a intenção a:

UPDATE

Mas não tente converter mecanicamente DL/I em SQL.

O importante é compreender o modelo operacional de cada tecnologia.


🗑️ CAPÍTULO 14 — DLET: NEM TODO REGISTRO É ETERNO

Finalmente:

DLET — Delete.

Remove determinada ocorrência.

Mas Pacioli levantaria imediatamente a mão:

— E os filhos?

Exatamente.

Em uma estrutura hierárquica, relacionamentos importam profundamente.

Excluir dados exige compreender sua posição e suas dependências.

Essa é uma excelente lição para o programador iniciante:

antes de alterar ou excluir qualquer segmento IMS, desenhe a hierarquia.

Papel e lápis ainda são ferramentas extraordinárias de debugging.


🔎 CAPÍTULO 15 — SSA: O DETETIVE DA ÁRVORE

Chegamos ao:

SSA — Segment Search Argument.

Ele ajuda a especificar segmentos e critérios utilizados nas operações DL/I.

Para um programador SQL, existe uma tentação irresistível:

SSA = WHERE

Segure essa tentação.

Podemos dizer:

SSA lembra parcialmente um critério de seleção

mas IMS e SQL trabalham com modelos diferentes.

Você encontrará:

unqualified SSA
qualified SSA

Um SSA pode simplesmente identificar um tipo de segmento ou adicionar condições de busca.

Agora podemos imaginar:

Programa COBOL
      │
      │ GU
      │ + SSA
      ▼
     DL/I
      │
      ▼
    IMS DB
      │
      ▼
segmento desejado

A operação diz o que queremos fazer.

O SSA ajuda a dizer sobre qual segmento/ocorrência queremos fazer aquilo.


🧠 CAPÍTULO 16 — SQL PENSA EM CONJUNTOS; IMS CONHECE CAMINHOS

Essa talvez seja a grande mudança mental.

Considere:

SELECT M.*
FROM CLIENTE C
JOIN CONTA A
  ON A.CLIENTE_ID = C.ID
JOIN MOVIMENTO M
  ON M.CONTA_ID = A.ID
WHERE C.ID = 1001;

Nossa intenção é declarada através do SQL.

O optimizer do Db2 possui enorme responsabilidade na determinação do access path.

Agora observe a árvore:

CLIENTE 1001
     │
     ▼
   CONTA
     │
     ▼
 MOVIMENTO

No IMS, compreender a hierarquia e o padrão de navegação é fundamental.

Essa característica ajuda a explicar tanto uma das grandes forças quanto uma das limitações do modelo.

Quando o caminho natural da aplicação combina muito bem com a estrutura hierárquica, podemos ter processamento extremamente eficiente.

Quando desejamos explorar os dados através de relações completamente diferentes e consultas ad hoc, o modelo relacional frequentemente oferece uma flexibilidade muito mais natural.

Portanto jamais ensine:

IMS é melhor que Db2.

Ou:

Db2 substitui IMS porque é mais moderno.

Pergunte:

Qual é o workload?

Essa é pergunta de arquiteto.


⚡ CAPÍTULO 17 — IMS TM: AGORA PACIOLI ABRE O CAIXA

Mudamos de livro.

IMS TM significa:

IMS Transaction Manager.

Agora estamos falando principalmente de processamento transacional orientado a mensagens.

Imagine:

Terminal
   │
   │ solicitação
   ▼
 IMS TM
   │
   ▼
TRANSAÇÃO
   │
   ▼
Programa COBOL
   │
   ├────► IMS DB
   └────► Db2

Depois:

Programa
   │
   ▼
IMS TM
   │
   ▼
Resposta

Esse modelo foi e continua sendo extremamente poderoso para workloads transacionais.

Uma mensagem chega.

O IMS identifica o processamento apropriado.

O programa é executado.

Dados são consultados ou modificados.

Uma resposta pode ser produzida.

Pacioli reconheceria imediatamente o princípio:

entrada → processamento → registro → resultado.


🏭 CAPÍTULO 18 — MPP: O ESCRITURÁRIO TRANSACIONAL

No IMS TM encontramos o conceito de:

MPP — Message Processing Program.

É um programa que processa mensagens sob o controle do IMS TM.

Podemos visualizar:

                   IMS TM
                     │
           ┌─────────┼─────────┐
           │         │         │
          MPP       MPP       MPP
           │         │         │
         COBOL     COBOL     COBOL

Essa arquitetura permite processamento de grande quantidade de transações.

E agora surge uma pergunta inevitável:

Mas isso não é aquilo que CICS faz?

Estamos chegando ao duelo.


⚔️ CAPÍTULO 19 — IMS TM × CICS

CICS e IMS TM ocupam territórios parcialmente comparáveis porque ambos participam do mundo de processamento transacional.

Mas não são clones.

Didaticamente:

            TRANSACTION PROCESSING
                     │
           ┌─────────┴─────────┐
           │                   │
         CICS                IMS TM

CICS tornou-se um enorme transaction/application server no ecossistema IBM Z.

IMS TM possui uma arquitetura fortemente relacionada a processamento transacional orientado a mensagens e ao ecossistema IMS.

Ambos podem executar aplicações COBOL.

Ambos podem participar de sistemas críticos.

Ambos podem acessar Db2.

E IMS TM naturalmente possui profunda integração com IMS DB.

Portanto o erro seria perguntar:

Qual deles é o banco?

Nenhum deles nessa comparação.

Estamos comparando principalmente componentes de processamento transacional.


🗄️ CAPÍTULO 20 — IMS DB × Db2

Agora temos uma comparação conceitualmente mais direta.

IMS DB                       Db2
  │                           │
  ▼                           ▼
Hierárquico                Relacional

IMS:

CLIENTE
   │
   ├── CONTA
   │      │
   │      ├── MOVIMENTO
   │      └── MOVIMENTO
   │
   └── CONTA

Db2:

CLIENTE
   ID

CONTA
   ID
   CLIENTE_ID

MOVIMENTO
   ID
   CONTA_ID

No Db2, relações são expressas através do modelo relacional, chaves e SQL.

No IMS DB, a hierarquia faz parte fundamental da organização dos dados.

Nenhum desenho sozinho diz qual tecnologia será mais rápida.

Performance depende de fatores como:

  • organização dos dados;

  • access path;

  • volume;

  • padrão de acesso;

  • concorrência;

  • buffering;

  • índices;

  • desenho da aplicação;

  • distribuição dos dados;

  • configuração;

  • infraestrutura.

Desconfie de qualquer comparação tecnológica resumida em:

X sempre é mais rápido que Y.

Em mainframe, quase sempre falta completar:

fazendo o quê?


🧩 CAPÍTULO 21 — O MAPA DEFINITIVO DO PADAWAN

Pacioli finalmente desenha tudo no quadro:

                 APLICAÇÃO MAINFRAME
                         │
                       COBOL
                         │
          ┌──────────────┼──────────────┐
          │              │              │
        CICS           IMS TM         BATCH
          │              │              │
          └──────────────┼──────────────┘
                         │
              ┌──────────┴──────────┐
              │                     │
             SQL                   DL/I
              │                     │
              ▼                     ▼
             Db2                  IMS DB

Agora ficou muito mais fácil.

CICS e IMS TM aparecem principalmente na camada de processamento transacional.

Db2 e IMS DB aparecem principalmente na camada de gerenciamento de dados.

SQL é uma interface fundamental para Db2.

DL/I é uma interface fundamental para IMS.

E COBOL pode estar no meio de praticamente tudo.


💰 CAPÍTULO 22 — PACIOLI DESCOBRE O COMMIT

Agora nosso mestre finalmente encontra algo familiar.

Imagine uma transferência:

CONTA A       -500
CONTA B       +500

Pacioli imediatamente entende o problema.

Não podemos terminar com:

CONTA A       -500
CONTA B          0

porque o programa sofreu um ABEND entre as operações.

É aqui que conceitos transacionais deixam de parecer burocracia:

UNIT OF WORK
COMMIT
ROLLBACK
LOG
RECOVERY
CHECKPOINT
RESTART

Imagine:

BEGIN UOW

DEBITA A
   │
   ▼
CREDITA B
   │
   ▼
COMMIT

Se algo der errado antes da conclusão:

DEBITA A
   │
   ▼
💥 ABEND
   │
   ▼
ROLLBACK / RECOVERY

A arquitetura precisa preservar a consistência.

Pacioli sorriria.

Séculos se passaram.

Mudamos pena por COBOL.

Livro-caixa por database.

Escriturário por programa.

Mas a pergunta fundamental continua a mesma:

As contas fecham?


🚨 CAPÍTULO 23 — O INCIDENTE DAS 03:17

Chegamos ao easter egg.

03:17.

Telefone toca.

Produção está apresentando resultados estranhos.

War Room aberta.

SDSF.

Logs.

Dump.

JES.

Programa COBOL.

DBD.

PSB.

PCB.

SSA.

Todos procurando um monstro tecnológico.

Até que um velho programador pergunta:

— Depois daquele CALL, vocês verificam o status?

Silêncio.

O jovem abre o fonte.

CALL 'CBLTDLI' USING ...

E depois...

continua o processamento como se nada pudesse dar errado.

Pacioli fecha lentamente seu livro.

— Meu jovem... até um contador do século XV conferia se o lançamento havia sido realizado.

Moral:

Nunca trate uma chamada de banco ou serviço como ato de fé.

Verifique retorno.

Sempre.

No Db2:

SQLCODE
SQLSTATE

No IMS:

PCB STATUS

Em MQ:

Completion Code
Reason Code

Em APIs:

HTTP status
payload

O programador de produção aprende cedo:

sucesso precisa ser comprovado.


🌙 CAPÍTULO 24 — IMS TAMBÉM TRABALHA QUANDO VOCÊ ESTÁ DORMINDO

Outro erro comum:

IMS é coisa de terminal online.

Não.

IMS DB também participa de processamento batch.

Imagine:

                    IMS DB
                       ▲
              ┌────────┴────────┐
              │                 │
           ONLINE             BATCH
              │                 │
           IMS TM            COBOL
                                │
                               JCL

E então aparecem questões muito mais interessantes:

concorrência
locking
checkpoint
restart
recovery
disponibilidade
janela batch
utilities
reorganização
performance

Agora você percebe por que profissionais IMS experientes possuem conhecimento tão valioso.

Eles não aprenderam simplesmente dez comandos DL/I.

Aprenderam a manter um ecossistema transacional funcionando.


🔬 CAPÍTULO 25 — A PORTA SECRETA DO IMS

Quando você dominar os conceitos básicos, abra outra porta.

Atrás dela encontrará:

HDAM
HIDAM
HALDB
DEDB
Fast Path
BMP
MPP
IFP
GSAM
secondary indexes
logical relationships
IMS Connect
OTMA
logging
recovery
checkpoint
restart
buffering
database utilities
reorganization

Aí começa o IMS de verdade.

Especialmente estudar:

HDAM × HIDAM × HALDB × DEDB

ajuda a compreender que dizer simplesmente "IMS é hierárquico" é apenas a primeira página de um livro enorme.

O modo como dados são organizados e acessados influencia profundamente performance e operação.


🌐 CAPÍTULO 26 — IMS NÃO PAROU EM 1970

Talvez esse seja o ponto mais importante para um profissional começando no mainframe atual.

Encontrar uma tecnologia criada décadas atrás não significa encontrar uma arquitetura congelada naquela década.

Hoje podemos encontrar ambientes conceitualmente parecidos com:

Mobile
   │
Web
   │
Cloud
   │
API
   │
Integration
   │
   ├───────────────┐
   ▼               ▼
 CICS            IMS
   │               │
   ▼               ▼
 Db2             IMS DB

Podemos adicionar:

MQ
APIs
eventos
observabilidade
automação
Git
CI/CD
Java
containers
IA

ao ecossistema.

Modernizar não significa obrigatoriamente arrancar o coração de um sistema que funciona.

Às vezes significa construir artérias novas.


🏛️ CAPÍTULO 27 — NÃO DEMOLIRE A CATEDRAL PARA INSTALAR WI-FI

Essa é uma das grandes lições do mainframe.

Imagine uma catedral construída durante cinquenta anos.

Alguém chega e diz:

— Precisamos instalar Wi-Fi.

Ninguém sensato responde:

— Derrube a catedral.

Modernização inteligente pergunta:

Onde estão os pontos de integração?

Quais componentes realmente precisam mudar?

Onde está o acoplamento?

Qual é o risco?

Quais dados continuam críticos?

Como expomos funcionalidades existentes de forma segura?

IMS, CICS e Db2 podem continuar no coração enquanto novas camadas surgem ao redor.

O legado não precisa ser tratado como inimigo.

Dívida técnica precisa ser combatida. Idade, sozinha, não é dívida técnica.


🧭 CAPÍTULO 28 — O PASSO A PASSO PARA APRENDER IMS

Se Pacioli fosse montar nosso plano de estudos, eu imagino algo assim:

IMS OVERVIEW
     │
     ▼
IMS DB × IMS TM
     │
     ▼
MODELO HIERÁRQUICO
     │
     ▼
SEGMENT / ROOT / PARENT / CHILD
     │
     ▼
DBD
     │
     ▼
PSB
     │
     ▼
PCB
     │
     ▼
DL/I
     │
     ▼
SSA
     │
     ▼
GU / GN / GNP
     │
     ▼
GHU / GHN / GHNP
     │
     ▼
ISRT / REPL / DLET
     │
     ▼
STATUS CODES
     │
     ▼
IMS TM
     │
     ▼
MPP
     │
     ▼
COMMIT / ROLLBACK
     │
     ▼
CHECKPOINT / RESTART
     │
     ▼
BATCH
     │
     ▼
PERFORMANCE
     │
     ▼
RECOVERY
     │
     ▼
IMS CONNECT / INTEGRAÇÃO

Não tente decorar tudo no primeiro dia.

Desenhe.

Simule.

Leia programas.

Procure as chamadas DL/I.

Identifique o PSB.

Localize PCBs.

Observe SSAs.

Veja quais operações aparecem.

Depois desenhe a árvore correspondente.

Faça isso repetidamente.

Em algumas semanas, aquele COBOL cheio de siglas começará a parecer uma história.


🎓 CAPÍTULO 29 — EXERCÍCIO DO PADAWAN

Pegue este cenário:

CLIENTE
   │
   ├── CONTA
   │      │
   │      ├── MOVIMENTO
   │      └── MOVIMENTO
   │
   └── CONTA
          │
          └── MOVIMENTO

Agora responda sem programar:

  1. Qual poderia ser o root?

CLIENTE.

  1. Qual é parent de MOVIMENTO?

CONTA.

  1. Qual é child de CLIENTE?

CONTA.

  1. Quero localizar um CLIENTE específico.

Pense em GU.

  1. Quero navegar.

Pense em GN.

  1. Quero continuar dentro de determinado parent.

Pense em GNP.

  1. Quero recuperar para alteração.

Comece a pensar nas versões GHx.

  1. Quero inserir.

ISRT.

  1. Quero atualizar.

REPL.

  1. Quero remover.

DLET.

Quando você consegue explicar isso sem decorar frases de apostila, começou a entender IMS.


☕ EPÍLOGO — O BALANÇO FECHOU

No final da aula, Luca Pacioli olha novamente para o terminal.

Agora aquelas siglas não parecem tão misteriosas.

Ele escreve:

IMS
 │
 ├── IMS DB
 │      ├── hierarquia
 │      ├── segmentos
 │      ├── DBD
 │      ├── PSB
 │      ├── PCB
 │      ├── SSA
 │      └── DL/I
 │
 └── IMS TM
        ├── mensagens
        ├── transações
        └── programas

Ao lado:

CICS ─────► processamento transacional

IMS TM ───► processamento transacional

Db2 ──────► dados relacionais

IMS DB ───► dados hierárquicos

SQL ──────► interface relacional

DL/I ─────► interface IMS

E finalmente escreve uma última frase:

Integridade não é uma funcionalidade. É um compromisso.

Talvez seja essa a ponte mais bonita entre Luca Pacioli e o mainframe.

A contabilidade por partidas dobradas não nasceu porque alguém achou divertido duplicar lançamentos.

Ela nasceu da necessidade de controle, rastreabilidade e consistência.

Mainframes também não possuem logs, commits, rollback, recovery, checkpoints e códigos de retorno porque engenheiros gostam de complicar sistemas.

Esses mecanismos existem porque, quando estamos movimentando dinheiro, reservas, apólices, pagamentos ou milhões de registros corporativos, precisamos conseguir responder:

O que aconteceu?

Quando aconteceu?

Foi concluído?

Se falhou, o que ficou gravado?

É possível recuperar?

Os dados continuam consistentes?

É por isso que estudar IMS ensina muito mais do que IMS.

Ensina a mentalidade de sistemas de missão crítica.

O programador iniciante olha para:

GU
GN
GNP
ISRT
REPL
DLET

e pergunta:

"Qual comando lê o registro?"

O profissional começa a perguntar:

"Qual é a hierarquia?"

"Qual é meu parent?"

"Onde estou posicionado?"

"Qual SSA foi utilizado?"

"Qual PCB?"

"Qual status voltou?"

"Qual é a Unit of Work?"

"Quando ocorre o commit?"

"Se houver um ABEND neste exato ponto, o que acontece?"

E o arquiteto acrescenta:

"Por que esse workload está no IMS?"

"Qual é seu padrão de acesso?"

"Onde CICS entra?"

"Onde Db2 entra?"

"Como isso conversa com sistemas modernos?"

Quando você chega a esse ponto, não está mais simplesmente decorando comandos DL/I.

Está começando a compreender por que o mainframe foi construído da maneira como foi construído.

Pacioli fecha o livro.

O Padawan fecha a sessão ISPF.

O relógio marca 03:17.

Nenhum telefone toca.

Desta vez o status code foi verificado.

O balanço fechou.

E finalmente podemos tomar aquele café enquanto ainda está quente.

Bem-vindo ao IMS.

Aqui até um ABEND precisa prestar contas. ☕

segunda-feira, 19 de fevereiro de 2007

O que é Database IMS em Mainframe?

 

Bellacosa Mainframe o que é database IMS

O que é IMS em Mainframe?

IMS significa:

Information Management System

É um dos softwares mais importantes da história da IBM e um dos pilares do ambiente Mainframe.

Criado em 1968 para apoiar o programa Apollo da NASA, o IMS continua em produção em milhares de empresas ao redor do mundo.


Definição Simples

O IMS é uma plataforma que fornece:

✅ Banco de Dados (IMS DB)

✅ Processamento de Transações (IMS TM)

Em outras palavras:

IMS = Banco de Dados + Monitor Transacional

História Curiosa

A IBM desenvolveu o IMS para ajudar a NASA a controlar milhões de componentes do foguete Saturno V usado nas missões Apollo.

Por isso, o IMS é frequentemente chamado de:

O banco de dados que ajudou a levar o homem à Lua


Componentes Principais

IMS DB

Banco de dados hierárquico.


IMS TM

Transaction Manager.

Responsável pelo processamento online.


Arquitetura Simplificada

Usuário
    ↓
IMS TM
    ↓
Programa COBOL
    ↓
IMS DB
    ↓
Resposta

O que é IMS DB?

É um banco de dados hierárquico.

Diferente do DB2, que é relacional.


Exemplo DB2

Tabela CLIENTES

IDNOME
1JOÃO
2MARIA

Exemplo IMS

EMPRESA
   │
   ├── CLIENTE
   │      │
   │      ├── CONTA
   │      │      │
   │      │      ├── MOVIMENTO
   │      │      ├── MOVIMENTO
   │
   └── CLIENTE

Conceito de Segmento

No IMS os registros são chamados de:

Segmentos


Exemplo

CLIENTE

Segmento Pai


CONTA

Segmento Filho


MOVIMENTO

Segmento Neto


Estrutura Hierárquica

CLIENTE
   ↓
CONTA
   ↓
MOVIMENTO

O que é DL/I?

Data Language I.

É a linguagem utilizada para acessar bancos IMS.

Equivale ao SQL do DB2.


Comandos DL/I

GU

Get Unique

Busca um segmento específico.


GN

Get Next

Busca próximo segmento.


GNP

Get Next Within Parent

Busca próximo filho.


ISRT

Insert

Inclui segmento.


REPL

Replace

Atualiza segmento.


DLET

Delete

Remove segmento.


Exemplo DL/I

CALL 'CBLTDLI'

USING
      GU
      PCB
      AREA
      SSA.

O que é PCB?

Program Communication Block.

Define como o programa acessa o banco.


O que é PSB?

Program Specification Block.

Define:

  • bancos acessados;

  • permissões;

  • PCBs.


O que é DBD?

Database Description.

Descreve:

  • segmentos;

  • relacionamentos;

  • estrutura física.


Estrutura IMS DB

DBD
 ↓
PSB
 ↓
PCB
 ↓
Programa COBOL

O que é IMS TM?

Transaction Manager.

Funciona de forma semelhante ao CICS.


Responsabilidades

  • receber transações;

  • controlar usuários;

  • chamar programas;

  • gerenciar filas;

  • garantir integridade.


Fluxo Online

Terminal
   ↓
IMS TM
   ↓
Programa COBOL
   ↓
IMS DB
   ↓
Resposta

Exemplo de Transação

Usuário digita:

CONS

IMS executa:

CONS
  ↓
Programa COBOL
  ↓
Consulta IMS
  ↓
Resposta

IMS x CICS

IMS TMCICS
IBMIBM
TransacionalTransacional
Muito usado em bancosMuito usado em bancos
Integração IMS DBIntegração DB2
Altíssimo desempenhoAltíssimo desempenho

IMS x DB2

IMS

Hierárquico

CLIENTE
 ↓
CONTA
 ↓
MOVIMENTO

DB2

Relacional

CLIENTES
CONTAS
MOVIMENTOS

Relacionadas por chaves.


Linguagens Utilizadas

  • COBOL

  • PL/I

  • Assembler

  • Java


IMS e COBOL

Combinação clássica.


Exemplo

CALL 'CBLTDLI'

Praticamente todo programa IMS utiliza esse comando.


Vantagens do IMS

✅ Altíssima performance

✅ Excelente escalabilidade

✅ Segurança

✅ Baixo consumo de recursos

✅ Confiabilidade extrema


Onde é Utilizado?

  • Bancos

  • Cartões

  • Seguradoras

  • Governo

  • Telecomunicações

  • Companhias aéreas


Curiosidades

1. O IMS foi criado para o Projeto Apollo

2. Continua sendo utilizado mais de 50 anos depois

3. Alguns dos maiores bancos do mundo usam IMS

4. Processa bilhões de transações diariamente

5. É considerado um dos sistemas mais confiáveis já criados


Principais Objetos IMS

ObjetoFunção
DBDDescrição do Banco
PSBEspecificação Programa
PCBComunicação Programa
SegmentoRegistro IMS
SSACritério Pesquisa
DL/ILinguagem de acesso
IMS DBBanco Hierárquico
IMS TMGerenciador Transacional

Resumo Rápido

IMS
 │
 ├── IMS DB
 │      ↓
 │ Banco Hierárquico
 │
 └── IMS TM
        ↓
     Transações Online

Conclusão

O IMS (Information Management System) é uma plataforma da IBM composta por um poderoso banco de dados hierárquico (IMS DB) e um monitor transacional (IMS TM). Presente em grandes bancos, seguradoras e órgãos governamentais, ele continua sendo uma das tecnologias mais robustas e confiáveis do ecossistema Mainframe IBM Z, processando milhões de transações críticas todos os dias.


segunda-feira, 1 de agosto de 2005

PADAWAN, O IMS NÃO É UM BANCO DE DADOS. É UMA FORMA DIFERENTE DE ENXERGAR O UNIVERSO DOS DADOS! Entendendo IMS DB, DBD, PSB, PCB, DL/I e a Arquitetura que Continua Sustentando Bancos, Operadoras e Governos Quase 60 Anos Depois

Bellacosa Mainframe e o ims db



☕💣🚀 PADAWAN, O IMS NÃO É UM BANCO DE DADOS. É UMA FORMA DIFERENTE DE ENXERGAR O UNIVERSO DOS DADOS!

Entendendo IMS DB, DBD, PSB, PCB, DL/I e a Arquitetura que Continua Sustentando Bancos, Operadoras e Governos Quase 60 Anos Depois

Se você vem do mundo SQL, provavelmente acredita que um banco de dados é composto por tabelas.

Clientes.

Pedidos.

Produtos.

Movimentos.

Tudo ligado por chaves primárias e estrangeiras.

Mas existe um detalhe curioso.

Quando os engenheiros da IBM começaram a desenvolver o IMS para atender aos requisitos do Projeto Apollo da NASA, eles não pensavam em tabelas.

Pensavam em relacionamentos naturais.

Pensavam em hierarquias.

Pensavam em estruturas onde um elemento pertence a outro elemento, que pertence a outro elemento, formando uma árvore de informações.

E é exatamente aí que nasce uma das maiores diferenças filosóficas entre o IMS e praticamente todos os bancos relacionais modernos.

No IMS, os dados não vivem em tabelas.

Eles vivem em famílias.


Antes de Entender IMS, Esqueça o SQL

Esse é provavelmente o conselho mais importante para qualquer desenvolvedor iniciando no IMS.

Enquanto no SQL você pergunta:

SELECT *
FROM CLIENTE
WHERE CPF='12345678900'

No IMS você não faz perguntas.

Você navega.

Essa diferença parece pequena.

Mas muda completamente a forma de pensar.

Imagine uma estrutura bancária simplificada:

CLIENTE
 |
 +-- CONTA
 |     |
 |     +-- MOVIMENTO
 |
 +-- CARTAO

Essa árvore não representa apenas um desenho.

Ela representa a forma física como os dados estão organizados.

O IMS sabe que uma conta pertence a um cliente.

Sabe que um movimento pertence a uma conta.

Sabe que um cartão pertence a um cliente.

Ele não precisa descobrir isso durante a execução.

Ele já nasceu sabendo.

É por isso que, mesmo décadas depois de sua criação, continua entregando níveis de desempenho impressionantes.


O Mundo Segundo o IMS

O IMS enxerga qualquer banco de dados através de alguns conceitos fundamentais.

Root

Todo banco IMS possui um ponto de partida.

Chamamos esse segmento de Root.

Em um banco de clientes:

CLIENTE

poderia ser o segmento raiz.

Tudo começa nele.


Parent

O pai.

O segmento imediatamente acima.

CLIENTE
 |
CONTA

CLIENTE é pai de CONTA.


Child

O filho.

O segmento imediatamente abaixo.

CLIENTE
 |
CONTA

CONTA é filho de CLIENTE.


Twins

Aqui aparece um conceito clássico do IMS.

Imagine:

CLIENTE
 |
 +-- CONTA 001
 |
 +-- CONTA 002
 |
 +-- CONTA 003

As três contas pertencem ao mesmo pai.

Elas são chamadas de Twins.

Ou gêmeos.

Compreender esse conceito é fundamental porque várias operações do DL/I trabalham justamente percorrendo esses irmãos dentro da hierarquia.


DBD: O DNA do Banco

Nenhum banco IMS nasce sem uma DBD.

Data Base Description.

Se você fosse construir um prédio, precisaria de uma planta.

No IMS acontece exatamente a mesma coisa.

A DBD é a planta arquitetônica do banco.

Nela definimos:

  • Segmentos

  • Hierarquia

  • Campos-chave

  • Tamanhos

  • Métodos de acesso

  • Estruturas físicas

Sem DBD não existe banco.

É ela que informa ao IMS como os dados serão armazenados e como se relacionam.

Por isso muitos administradores IMS dizem:

"Se você entender a DBD, entenderá o banco inteiro."


O Segredo Que Faz o IMS Ser Tão Rápido

Muitos profissionais acreditam que o desempenho do IMS está relacionado apenas ao hardware do mainframe.

Isso é apenas parte da história.

O verdadeiro segredo está na previsibilidade.

Quando um banco relacional recebe uma consulta, ele precisa decidir:

  • Qual índice utilizar

  • Qual caminho seguir

  • Qual plano gerar

O IMS não faz isso.

O caminho já está definido.

Você entra pelo Root.

Percorre os filhos.

Chega ao destino.

Sem surpresas.

Sem otimizadores.

Sem replanejamento.

Sem milhões de possibilidades.

É uma filosofia muito próxima de uma estrada ferroviária.

O trem sabe exatamente por onde vai passar.


PSB: O Contrato de Acesso

Uma dúvida muito comum entre iniciantes é:

"Se a DBD define o banco, por que existe a PSB?"

Porque nem todo programa deve enxergar tudo.

Imagine um banco de dados contendo:

CLIENTE
 |
 +-- DADOS FINANCEIROS
 |
 +-- CARTÕES
 |
 +-- LIMITE DE CRÉDITO
 |
 +-- ENDEREÇOS

O sistema de cobrança talvez precise acessar apenas:

CLIENTE
 |
 +-- DADOS FINANCEIROS

Já o sistema de cartões pode precisar de outra visão.

É exatamente isso que a PSB resolve.

Ela define a visão do programa sobre o banco.


PCB: Os Óculos do Programa

A PCB funciona como um conjunto de lentes.

O banco continua sendo o mesmo.

Mas cada programa enxerga apenas aquilo que lhe foi permitido.

Essa abordagem parece extremamente moderna.

E de certa forma é.

Hoje falamos muito sobre:

  • Least Privilege

  • Zero Trust

  • Segurança por contexto

O IMS implementava conceitos semelhantes décadas atrás.


DL/I: O Porteiro do Banco de Dados

Nenhum programa conversa diretamente com o banco.

Quem faz essa intermediação é o DL/I.

Data Language One.

Pense nele como um porteiro extremamente rigoroso.

O programa faz um pedido.

O DL/I verifica se ele possui autorização.

Se possuir, executa.

Caso contrário, devolve erro.

Esse modelo garante integridade e evita que aplicações corrompam estruturas críticas.


Os Comandos Que Todo Programador IMS Precisa Conhecer

Se existe um momento em que o desenvolvedor COBOL percebe que entrou definitivamente no universo IMS, esse momento acontece quando ele escreve seu primeiro:

CALL 'CBLTDLI'

A partir daí, tudo muda.

Em um banco relacional você escreve comandos SQL.

No IMS você conversa com o DL/I.

Cada solicitação ao banco é feita através de uma função específica.

Essas funções foram criadas há décadas, mas continuam extremamente elegantes.

Na prática, quase todo sistema IMS utiliza um conjunto relativamente pequeno de comandos.

Domine esses comandos e você compreenderá boa parte do funcionamento do banco.


GU — GET UNIQUE

O GU é normalmente o primeiro comando aprendido por qualquer programador IMS.

Sua função é localizar um segmento específico.

Imagine um banco contendo clientes.

Você conhece o CPF ou a chave do cliente.

O GU será utilizado para localizar exatamente aquela ocorrência.

Exemplo conceitual:

CLIENTE
   CPF = 12345678900

O programa envia uma SSA qualificada contendo a chave desejada.

O DL/I procura o segmento.

Se encontrar:

STATUS = BRANCO

Sucesso.

Se não encontrar:

STATUS = GE

Segmento inexistente.


Analogia do Mundo Real

Imagine uma biblioteca.

Você possui o número exato do livro.

Vai diretamente até ele.

Isso é um GU.

Não existe pesquisa sequencial.

Não existe navegação.

Você sabe exatamente o que procura.


GN — GET NEXT

Agora imagine uma situação diferente.

Você não quer um cliente específico.

Quer percorrer todos os clientes.

Nesse caso usamos:

GN

Get Next.

O GN realiza leitura sequencial.

Cada chamada retorna o próximo segmento da hierarquia.

Exemplo:

CLIENTE 001
CLIENTE 002
CLIENTE 003
CLIENTE 004

Primeiro GN:

CLIENTE 001

Segundo GN:

CLIENTE 002

Terceiro GN:

CLIENTE 003

E assim sucessivamente.


O GN é o Cursor Original

Muito antes dos cursores SQL se popularizarem, o IMS já trabalhava dessa forma.

Você se posiciona.

Vai pedindo o próximo registro.

E continua navegando.


GNP — GET NEXT WITHIN PARENT

Esse comando costuma causar confusão no início.

Mas depois se torna um dos favoritos dos desenvolvedores IMS.

O GNP significa:

GET NEXT WITHIN PARENT

Ou seja:

"Traga o próximo filho dentro do mesmo pai."

Imagine:

CLIENTE
 |
 +-- CONTA 001
 |
 +-- CONTA 002
 |
 +-- CONTA 003

Após localizar o CLIENTE, podemos percorrer apenas suas contas.

Primeiro GNP:

CONTA 001

Segundo:

CONTA 002

Terceiro:

CONTA 003

Observe a diferença.

O GN percorre toda a hierarquia.

O GNP permanece dentro do mesmo pai.


O Poder da Paternidade

Aqui aparece um conceito clássico do IMS.

Chamado:

PARENTAGE

Ou simplesmente:

PATERNIDADE

Quando um GU ou GN encontra um segmento, o IMS estabelece um contexto.

Esse contexto define quem é o pai atual.

O GNP utiliza exatamente esse contexto.

Por isso ele só funciona adequadamente após um posicionamento anterior.


GHU — GET HOLD UNIQUE

Até agora vimos apenas leitura.

Mas o que acontece quando queremos alterar um segmento?

Entramos no território do HOLD.

O GHU funciona exatamente como o GU.

A diferença é que ele trava o segmento.

GET HOLD UNIQUE

É como reservar uma vaga de estacionamento.

Você não apenas localiza.

Você impede que outro programa altere aquele registro simultaneamente.


Exemplo Bancário

Imagine duas aplicações alterando o mesmo saldo.

Sem controle:

Programa A -> Saldo = 100
Programa B -> Saldo = 100

A altera para:

150

B altera para:

120

Qual valor deve permanecer?

Problema clássico.

O HOLD existe justamente para evitar esse tipo de situação.


GHN — GET HOLD NEXT

Agora misturamos:

GN

com

HOLD

Resultado:

GHN

Leitura sequencial com bloqueio.

Muito utilizado em processos batch de atualização.


GHNP — GET HOLD NEXT WITHIN PARENT

É o equivalente ao:

GNP

porém mantendo lock nos segmentos retornados.

Extremamente comum em rotinas que precisam atualizar diversos filhos do mesmo pai.


ISRT — INSERT

Chegamos ao comando responsável por criar novos segmentos.

ISRT

Insert.

Imagine um novo cliente.

Antes:

CLIENTE
 |
 +-- JOÃO
 |
 +-- MARIA

Após o ISRT:

CLIENTE
 |
 +-- JOÃO
 |
 +-- MARIA
 |
 +-- CARLOS

O segmento passa a existir fisicamente no banco.


O Erro Clássico do ISRT

Todo iniciante já viu isso.

Status:

II

Segmento já existe.

Normalmente significa:

  • Chave duplicada

  • Inserção repetida

  • Violação de regra de unicidade


REPL — REPLACE

O REPL altera um segmento existente.

Mas existe uma regra extremamente importante.

Antes do REPL deve existir um HOLD.

Exemplo:

GHU

seguido de:

REPL

Sem HOLD:

DJ

Erro.

Um dos status mais famosos do IMS.


Por Que Essa Regra Existe?

Porque o IMS precisa garantir que ninguém modificou o segmento entre a leitura e a atualização.

É um mecanismo de integridade extremamente robusto.


DLET — DELETE

Responsável pela remoção de segmentos.

Assim como o REPL, exige HOLD.

Fluxo correto:

GHU

ou

GHN

seguido por:

DLET

O Efeito Cascata do DLET

Aqui existe uma característica muito interessante.

Imagine:

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

Se você apagar o ROOT:

CLIENTE

Todos os dependentes desaparecem.

Automaticamente.

O IMS entende que não pode existir um filho sem pai.

Essa regra faz parte da própria filosofia hierárquica do banco.


O Ciclo Completo de Atualização

Em sistemas IMS, a sequência clássica de alteração costuma ser:

1. GHU
2. Verificar STATUS
3. Alterar IO-AREA
4. REPL
5. Verificar STATUS

Exemplo conceitual:

CALL 'CBLTDLI' USING GHU
                     PCB
                     IOAREA
                     SSA.

IF STATUS = SPACES
   MOVE NOVO-VALOR TO CAMPO
   CALL 'CBLTDLI' USING REPL
                        PCB
                        IOAREA
END-IF.

Esse padrão aparece em milhares de programas IMS ao redor do mundo.


O Verdadeiro Segredo dos Comandos DL/I

Quando observamos GU, GN, GNP, GHU, GHN, GHNP, ISRT, REPL e DLET, podemos ter a impressão de que são apenas comandos antigos.

Mas existe uma elegância escondida.

Cada função foi projetada para trabalhar naturalmente com estruturas hierárquicas.

Enquanto bancos relacionais precisam descobrir relacionamentos durante a execução, o IMS simplesmente navega pela árvore.

Por isso um programador IMS experiente raramente pensa em registros isolados.

Ele pensa em:

  • Raiz

  • Pai

  • Filho

  • Gêmeos

  • Caminho de navegação

  • Posicionamento

E é exatamente essa mudança de mentalidade que transforma um desenvolvedor COBOL comum em um verdadeiro especialista em IMS DB.

Porque no final das contas, Padawan, programar IMS não é apenas acessar dados.

É aprender a navegar por uma civilização hierárquica construída para sobreviver às décadas. ☕💣🚀


O Que Todo Desenvolvedor COBOL Precisa Entender Sobre IMS

Se você chegou até aqui, provavelmente percebeu que programar IMS não significa apenas aprender alguns comandos como GU, GN ou ISRT.

Na verdade, o desafio é muito mais profundo.

O IMS exige uma mudança de mentalidade.

Durante décadas, milhares de programadores aprenderam a pensar em tabelas, linhas, colunas e relacionamentos criados dinamicamente durante a execução.

O IMS segue uma filosofia diferente.

Primeiro definimos a estrutura.

Depois definimos quem pode enxergá-la.

Depois definimos como navegar nela.

Somente então escrevemos o programa.

Essa ordem aparentemente simples explica boa parte da estabilidade histórica do ambiente.


O Fluxo Completo de Uma Aplicação IMS

Quando observamos o funcionamento de uma aplicação IMS, percebemos que existe uma sequência extremamente organizada.

Tudo começa com a modelagem.

Etapa 1 — DBD

Primeiro é criada a estrutura física.

A DBD define:

  • Segmentos

  • Campos-chave

  • Hierarquia

  • Método de acesso

Em outras palavras:

A DBD responde à pergunta:

Como os dados existem?


Etapa 2 — PSB

Depois vem a PSB.

A PSB responde:

O que o programa poderá enxergar?

Ela define:

  • Bancos acessados

  • Segmentos sensíveis

  • Permissões


Etapa 3 — PCB

Dentro da PSB encontramos as PCB's.

Cada PCB representa uma visão específica do banco.

Uma mesma aplicação pode possuir várias PCB's.

Inclusive para o mesmo banco.


Etapa 4 — ACBGEN

Após as definições serem geradas e validadas, o IMS produz os blocos de controle internos.

Isso reduz trabalho durante a execução.


Etapa 5 — Programa COBOL

Somente agora o desenvolvedor entra em cena.

O programa recebe:

PCB
+
DL/I
+
IO AREA
+
SSA

e passa a navegar pelos dados.

Observe como a aplicação nunca toca diretamente no banco.

Toda comunicação passa pelo DL/I.


O Erro Mais Comum de Quem Está Começando

Quase todo iniciante tenta tratar IMS como se fosse SQL.

Algo parecido com:

"Quero localizar esse registro."

Mas o IMS pensa diferente.

A pergunta correta seria:

"Por qual caminho vou chegar até esse registro?"

Esse detalhe muda tudo.

O sucesso em IMS depende muito mais da compreensão da hierarquia do que da sintaxe dos comandos.


Por Que Bancos Ainda Utilizam IMS em 2026?

Essa é uma pergunta recorrente.

A resposta é simples.

Porque ele continua funcionando extraordinariamente bem.

Imagine uma instituição financeira com:

  • Centenas de milhões de clientes

  • Bilhões de registros

  • Milhares de transações por segundo

  • Disponibilidade próxima de 100%

Substituir uma plataforma desse porte não é uma decisão tecnológica.

É uma decisão empresarial.

E quando a plataforma continua entregando:

  • Confiabilidade

  • Escalabilidade

  • Segurança

  • Performance

a motivação para substituí-la simplesmente desaparece.


O Que Mudou no IMS Moderno

Existe um mito muito difundido.

Muita gente imagina que IMS ficou parado no tempo.

Nada poderia estar mais distante da realidade.

O IMS atual possui integração com:

  • APIs REST

  • Java

  • JDBC

  • SQL

  • z/OS Connect

  • Web Services

  • Cloud híbrida

  • DevOps

  • Git

  • Pipelines CI/CD

A hierarquia continua existindo.

Mas o acesso tornou-se muito mais moderno.

Hoje um aplicativo mobile pode consumir informações armazenadas em um banco IMS sem que o usuário tenha qualquer ideia disso.


O Paradoxo do IMS

Talvez a característica mais fascinante do IMS seja seu paradoxo.

Ele é simultaneamente:

  • Antigo e moderno.

  • Conservador e inovador.

  • Simples e extremamente sofisticado.

Por fora, vemos comandos criados há décadas.

Por dentro, encontramos algumas das soluções mais eficientes já construídas para processamento transacional em larga escala.


Lições Que o IMS Ensina aos Arquitetos Modernos

Mesmo que você nunca programe uma linha de código IMS, existem ensinamentos valiosos.

1. Modelagem importa

Antes de discutir frameworks, defina a estrutura.


2. Performance nasce da arquitetura

Não existe milagre.

Quando a modelagem é correta, a performance surge naturalmente.


3. Segurança deve nascer no projeto

PSB, PCB e Sensibilidade demonstram isso há décadas.


4. Nem todo problema precisa de SQL

Alguns cenários se beneficiam enormemente de modelos hierárquicos.


5. Simplicidade operacional vale ouro

Quanto menos componentes, menos pontos de falha.


A Verdadeira Filosofia do IMS

Após estudar DBD, PSB, PCB, SSA, DL/I, Status Codes e navegação hierárquica, muitos profissionais chegam à mesma conclusão.

O IMS nunca foi apenas um banco de dados.

Ele é uma filosofia de engenharia.

Uma filosofia construída sobre quatro pilares:

  • Integridade

  • Desempenho

  • Previsibilidade

  • Confiabilidade

Enquanto grande parte do mercado busca reinventar a computação a cada cinco anos, o IMS segue fazendo algo muito mais difícil:

Continuar funcionando.


Considerações Finais

Padawan, quando alguém disser que IMS é apenas uma tecnologia antiga, lembre-se de uma coisa.

Tecnologias realmente antigas costumam desaparecer.

O IMS não desapareceu.

Ele sobreviveu ao surgimento do PC.

Sobreviveu à internet.

Sobreviveu ao client/server.

Sobreviveu à web.

Sobreviveu à virtualização.

Sobreviveu à nuvem.

E continua executando algumas das cargas de trabalho mais críticas do planeta.

Isso acontece porque o IMS foi construído para resolver problemas reais de negócio e não para seguir tendências.

Por trás de cada GU, GN, GNP, PCB, PSB e DBD existe quase seis décadas de experiência acumulada em ambientes onde falhar nunca foi uma opção.

E talvez essa seja a maior lição que um profissional de tecnologia pode aprender:

As melhores arquiteturas não são aquelas que chamam mais atenção. São aquelas que continuam funcionando quando todas as outras já viraram apenas uma lembrança em algum manual esquecido da computação. 🚀☕💣


Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...