| 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. 🚀☕💣
Sem comentários:
Enviar um comentário