Translate

Mostrar mensagens com a etiqueta IMS Catalog. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta IMS Catalog. Mostrar todas as mensagens

domingo, 19 de outubro de 2025

PADAWAN, O IMS NÃO É APENAS DB/DC! ELE POSSUI UM ECOSSISTEMA ESCONDIDO QUE MUITOS PROFISSIONAIS NUNCA EXPLORAM

 

Bellacosa Mainframe aprofundando no mundo do database ims

☕💣🚀 PADAWAN, O IMS NÃO É APENAS DB/DC! ELE POSSUI UM ECOSSISTEMA ESCONDIDO QUE MUITOS PROFISSIONAIS NUNCA EXPLORAM

Quando alguém aprende IMS normalmente enxerga apenas:

  • IMS DB

  • IMS DC

  • DBD

  • PSB

  • MPP

  • BMP

  • Fast Path

Mas o IMS moderno evoluiu enormemente.

Hoje um especialista IMS precisa entender conceitos como:

  • IMS Catalog

  • IMS Managed ACB

  • IMS Directory

  • DDL

  • Dynamic Resource Definition

  • CSL

  • OM

  • RM

  • SCI

  • User Exits

  • Automação via REXX

  • Ferramentas em Assembler

E é justamente aí que está a diferença entre um Programador IMS e um verdadeiro IMS Systems Programmer.


1. IMS Catalog

O que é?

Imagine que durante décadas o IMS viveu baseado em bibliotecas:

DBDLIB
PSBLIB
ACBLIB

Toda definição precisava ser gerada.

DBDGEN
PSBGEN
ACBGEN

O problema?

As definições ficavam espalhadas.

O IMS Catalog surgiu para centralizar os metadados do ambiente. Ele funciona como um "repositório mestre" das definições IMS. (IBM)


Antes do Catalog

DBD Source
   |
DBDGEN
   |
DBDLIB

PSB Source
   |
PSBGEN
   |
PSBLIB

ACBGEN
   |
ACBLIB

Depois do Catalog

DBD
PSB
DDL
  |
IMS Catalog
  |
IMS Runtime

O Catalog passa a armazenar informações sobre:

  • Bancos IMS

  • PSBs

  • ACBs

  • Relacionamentos

  • Estruturas lógicas

e torna-se a referência oficial do ambiente. (IBM)


Analogia Bellacosa

Imagine uma biblioteca.

Antes:

Cada departamento possuía seu próprio fichário.

Depois:

Existe um catálogo central.

O IMS Catalog é esse catálogo central.


Benefícios

Governança

Você sabe exatamente:

  • Qual DBD está ativo

  • Qual versão do PSB está ativa

  • Quem foi carregado


Menos inconsistências

Antigamente era comum:

DBDLIB diferente
PSBLIB diferente
ACBLIB diferente

Resultado:

ABENDs misteriosos

O Catalog reduz bastante esse problema.


2. IMS Managed ACB

O que são ACBs?

ACB significa:

Application Control Block

É o objeto executável criado a partir de:

DBD + PSB

Modelo Tradicional

Durante décadas:

DBDGEN
PSBGEN
ACBGEN

geravam ACBs armazenados em:

IMS.ACBLIB

Problema

Imagine:

5000 PSBs
3000 DBDs

Cada mudança exigia:

Generate
Deploy
Online Change
Recycle

Muita burocracia.


IMS Managed ACB

O IMS passa a gerenciar os ACBs automaticamente. (IBM)

O catálogo torna-se a fonte oficial.

IMS Catalog
      |
IMS Directory
      |
Runtime ACB

A Grande Revolução

Antigamente:

Fonte
 ↓
GEN
 ↓
LIBRARY
 ↓
Deploy

Agora:

Fonte
 ↓
Catalog
 ↓
Directory
 ↓
Runtime

IMS Directory

Muitos confundem.

Catalog e Directory não são a mesma coisa.

Catalog

Guarda metadados.

Directory

Guarda os ACBs ativos gerenciados pelo IMS. (IBM)


Fluxo Moderno

DDL
 ↓
Catalog
 ↓
Directory
 ↓
Online IMS

Utilitários Envolvidos

DFS3PU00

Catalog Populate Utility.

Utilizado para:

  • Carregar Catalog

  • Popular Directory

  • Migrar ambiente tradicional

(IBM)


DFS3UACB

ACB Generation and Populate Utility.

Responsável por:

  • Gerar ACBs

  • Atualizar Catalog

  • Atualizar Directory

(IBM)


3. User Exits IMS

O que são?

São pontos de extensão.

Permitem alterar o comportamento do IMS sem modificar o produto.

Pense como:

Exit = Plug-in do IMS

Onde encontramos Exits?

Logon

Validação de usuários.

Segurança

Integração RACF.

Scheduling

Controle de programas.

Mensagens

Interceptação de transações.

Logging

Auditoria.


Exemplo Conceitual

Cliente envia transação:

TRN1

Antes de executar:

Exit de validação

decide:

Permite
ou
Bloqueia

Exemplo em Assembler

DFSUSER  CSECT

         STM   14,12,12(13)

         CLI   TRANCODE,C'T'
         BE    ALLOW

DENY     MVC   RETCODE,=F'8'
         B     RETURN

ALLOW    MVC   RETCODE,=F'0'

RETURN   LM    14,12,12(13)
         BR    14

Onde o Assembler domina?

Quase todos os exits clássicos.

Porque:

  • Alta performance

  • Controle total de memória

  • Interface nativa IMS


4. IMS em Assembler

Por que ainda existe?

Porque o núcleo do IMS é escrito em:

Assembler

Grande parte dos componentes internos:

  • Scheduling

  • Buffer Management

  • Logging

  • Recovery

  • Dispatching

dependem de rotinas Assembler.


Casos Reais

Exit de Segurança

DFSCSGN0

Exit de Log

DFSFLGX0

Exit de Scheduler

DFSSGNX0

O que um Sysprog IMS faz?

Muitas vezes:

Dump
↓
IPCS
↓
Assembler Listing
↓
RCA

Sem entender Assembler é difícil chegar na causa raiz.


5. IMS em REXX

O lado desconhecido

Muitos profissionais não imaginam que REXX é extremamente usado em IMS.

Principalmente para:

  • Automação

  • Operação

  • Administração


Exemplo

Consultar status de bancos:

ADDRESS TSO

"QUERY IMS DB ALL"

Exemplo de Automação

Verificar:

DB STOPPED

e executar:

/START DB

automaticamente.


Monitoramento

REXX pode:

  • Ler logs

  • Consultar DBRC

  • Verificar RECON

  • Auditar PSBs

  • Comparar DBDs


Exemplo Bellacosa

Imagine um ambiente com:

3000 bancos IMS

Manual?

Impossível.

REXX vira o braço direito do Sysprog.


6. Utilities IMS em JCL

O verdadeiro coração operacional

Um ambiente IMS sobrevive graças às utilities.


DFSURGL0

Unload

//STEP1 EXEC PGM=DFSURGL0

Extrai dados.


DFSURGU0

Reload

//STEP1 EXEC PGM=DFSURGU0

Recarrega banco.


DFSUICP0

Image Copy

//STEP1 EXEC PGM=DFSUICP0

Backup.


DFSUDMP0

Dump

Diagnóstico.


DFSURDB0

Reorganização.


DFS3PU00

Catalog Populate.


DFS3UACB

Managed ACB.


Exemplo de Utility Real

//IC EXEC PGM=DFSUICP0
//STEPLIB DD DSN=IMS.SDFSRESL,DISP=SHR
//DFSRESLB DD DSN=IMS.RESLIB,DISP=SHR
//DBDLIB DD DSN=IMS.DBDLIB,DISP=SHR
//SYSUT1 DD DSN=IMS.IC1,DISP=NEW

O Que o Mercado Procura em 2026?

O profissional IMS mais valorizado hoje não é apenas aquele que conhece:

DBD
PSB
PCB
GU
GN
ISRT
REPL

Mas aquele que domina:

✅ IMS Catalog

✅ IMS Managed ACB

✅ IMS Directory

✅ CSL

✅ OM

✅ RM

✅ SCI

✅ User Exits

✅ Assembler

✅ REXX

✅ Utilities

✅ Automação

✅ Troubleshooting

✅ RCA

✅ Dump Analysis

Essa é a fronteira moderna do IMS. O IMS deixou de ser apenas um banco hierárquico e um monitor transacional. Ele tornou-se uma plataforma completa de metadados, automação, governança e disponibilidade contínua para ambientes corporativos de missão crítica.


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. 🚀☕💣