Translate

Mostrar mensagens com a etiqueta DFSURGU0. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta DFSURGU0. 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. 🚀☕💣