☕ 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 IBM Db2. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta IBM Db2. Mostrar todas as mensagens

quinta-feira, 25 de junho de 2026

Hybrid Search no Db2: Quando SQL Encontra Inteligência Artificial (e o Banco de Dados Aprende a Entender Pessoas)

 

Bellacosa Mainframe e o hybrid search no db2

☕ Um Café no Bellacosa Mainframe

Hybrid Search no Db2: Quando SQL Encontra Inteligência Artificial (e o Banco de Dados Aprende a Entender Pessoas)

Como o Db2 12.1.5 transformou o banco relacional em uma plataforma de IA para busca semântica, RAG e aplicações inteligentes.

"Durante décadas perguntávamos ao banco de dados 'onde está este registro?'. Agora começamos a perguntar 'o que você sabe sobre este assunto?'. Essa pequena mudança muda absolutamente tudo."


Introdução

Se você programa em COBOL, trabalha com Db2, escreve SQL diariamente ou administra ambientes IBM, talvez tenha ouvido alguém dizer recentemente:

"O Db2 agora suporta Hybrid Search."

E a primeira reação costuma ser:

"Legal... mas o que exatamente isso significa?"

Se você pensou isso, prepare seu café.

Porque essa novidade representa uma das maiores mudanças conceituais do Db2 desde a chegada do suporte nativo a JSON, XML e às tecnologias modernas de integração.

Não estamos falando de mais um índice.

Nem de um novo tipo de tabela.

Estamos falando de ensinar um banco de dados a procurar significados, e não apenas palavras.


Uma pequena viagem no tempo

Durante praticamente cinquenta anos, bancos de dados responderam perguntas muito simples.

Você perguntava:

SELECT *
FROM CLIENTES
WHERE CPF='12345678900';

O banco respondia imediatamente.

Perfeito.

Depois surgiram buscas textuais.

Por exemplo:

SQLCODE -904

ou

CICS RESP 16

O banco localizava exatamente aquelas palavras.

Ainda perfeito.

Mas então chegou a IA.

E os usuários começaram a perguntar coisas como:

"Por que meu batch fica preso durante a madrugada?"

Ou:

"Existe algum programa parecido com este COBOL?"

Ou ainda:

"Onde existe documentação sobre autenticação?"

Nenhuma dessas perguntas possui uma resposta baseada apenas em igualdade de caracteres.

É aí que nasce a busca vetorial.


O problema da busca tradicional

Imagine uma documentação contendo:

Resource unavailable

Deadlock

Timeout

IRLM contention

Agora imagine que alguém pesquisa:

Meu programa trava esperando recursos.

Nenhuma palavra coincide.

Resultado?

0 documentos encontrados

Mas qualquer analista experiente sabe que provavelmente o problema é exatamente um deadlock ou contenção.

O computador não sabia.

A IA sabe.


Keyword Search

Na figura apresentada pelo autor vemos dois blocos.

O primeiro é:

Keyword Search

Essa é a busca clássica.

Ela utiliza motores especializados como:

  • OpenSearch

  • Elasticsearch

Esses motores trabalham com índices invertidos.

Em vez de procurar documento por documento, eles mantêm enormes catálogos de palavras.

Por exemplo:

SQLCODE

↓

Documento 14

Documento 39

Documento 122

ou

COBOL

↓

Documento 2

Documento 98

Documento 430

É extremamente rápido.

E extremamente preciso.


Onde ela é excelente?

Quando você procura:

  • CPF

  • CNPJ

  • Número de pedido

  • Código do produto

  • SQLCODE

  • Nome de programa

  • VSAM KSDS

  • DSNUTILB

  • IKJEFT01

Ela é praticamente imbatível.


Mas existe um limite...

Ela não entende contexto.

Para ela,

erro de conexão

é completamente diferente de

falha de comunicação

Mesmo que um ser humano saiba que são praticamente a mesma coisa.


A revolução dos Embeddings

Agora chegamos ao conceito mais importante.

Quando falamos em IA Generativa existe uma palavra que aparece o tempo inteiro:

Embedding.


Imagine duas frases.

Cliente perdeu acesso.

e

Usuário não consegue entrar.

São palavras diferentes.

Mas possuem praticamente o mesmo significado.

Como um computador entende isso?

Transformando texto em matemática.

Cada documento vira um enorme vetor.

Algo parecido com:

[0.27,
0.81,
-0.19,
...
768 números]

Ou até

1536 dimensões

dependendo do modelo utilizado.

Esses números representam o significado do texto.


Curiosidade

Quando falamos "vetor", muita gente imagina apenas três dimensões.

Como:

X

Y

Z

Na IA isso não existe.

Os vetores normalmente possuem:

  • 384 dimensões

  • 768 dimensões

  • 1024 dimensões

  • 1536 dimensões

  • 3072 dimensões

Cada dimensão captura alguma característica semântica aprendida pelo modelo.

Nenhum ser humano consegue visualizar isso.

Mas algoritmos conseguem calcular a distância entre dois vetores em microssegundos.


Db2 12.1.2: o primeiro passo

A IBM deu um passo importante com o Db2 12.1.2, quando introduziu armazenamento nativo de vetores (Vector Data Type) e busca por similaridade.

Isso permitiu guardar embeddings diretamente nas tabelas do Db2 e realizar consultas de vizinhos mais próximos (Nearest Neighbor Search), sem depender obrigatoriamente de um banco vetorial dedicado.

Na prática, o Db2 passou a ser capaz de responder perguntas como:

"Quais documentos possuem significado semelhante a este?"

Era metade do caminho para aplicações de IA.


Db2 12.1.5: nasce o Hybrid Search

A verdadeira virada acontece com o Db2 12.1.5, disponibilizado pela IBM em 2025, quando foi anunciada a integração entre o mecanismo vetorial do Db2 e motores de busca como OpenSearch e Elasticsearch.

Agora temos duas pesquisas acontecendo simultaneamente:

Keyword Search
Vector Search

E ambas convergem para um único ranking.

Esse conceito recebe o nome de:

Hybrid Search.


Unified Ranking

Talvez este seja o recurso mais inteligente de toda a arquitetura.

Imagine uma pergunta:

Como resolver SQLCODE -904?

A busca por palavras encontra:

SQLCODE -904

Já a busca vetorial localiza documentos que mencionam:

  • Resource unavailable

  • Tablespace offline

  • Dataset indisponível

  • Problemas de I/O

  • Lock de recurso

Mesmo sem citar literalmente o código.

Agora imagine que os resultados sejam combinados.

Em vez de duas listas diferentes, temos apenas uma:

1 Documento A

2 Documento B

3 Documento C

4 Documento D

Todos classificados pela relevância.

É isso que o Unified Ranking faz.


Como essa arquitetura funciona?

                 Pergunta

                     │

                     ▼

      "Como resolver timeout?"

                     │

      ┌──────────────┴──────────────┐

      ▼                             ▼

Keyword Search               Vector Search

(OpenSearch)                 (Db2 Native)

      ▼                             ▼

         Unified Ranking

                 ▼

      Documentos Relevantes

                 ▼

         Large Language Model

                 ▼

          Resposta Final

Perceba algo interessante.

O LLM não pesquisa diretamente.

Quem faz a pesquisa continua sendo o banco.

A IA apenas utiliza os documentos encontrados.

Esse é exatamente o princípio do RAG (Retrieval-Augmented Generation).


E onde entra o SQL?

A primeira coisa que muitos desenvolvedores COBOL perguntam é:

"Vou parar de usar SQL?"

A resposta é:

Não.

Na verdade, você usará ainda mais SQL.

O que muda é que agora existirão novas funções relacionadas a vetores, similaridade e integração com índices textuais.

O SQL continua sendo o coração da solução.


Exemplo prático para quem trabalha com COBOL

Imagine um repositório com:

  • 18.000 programas COBOL

  • 12.000 Copybooks

  • 4.000 Jobs JCL

  • 8.000 documentos técnicos

  • 30 anos de documentação

Um programador novo pergunta:

"Existe alguma rotina semelhante ao cálculo de juros compostos?"

Nenhum programa chama exatamente:

JUROS_COMPOSTOS

Mas diversos possuem comentários como:

Interest calculation

Financial accrual

Capitalization

A busca vetorial encontra todos eles.

A busca lexical encontra aqueles que realmente possuem a palavra "juros".

O Hybrid Search combina tudo.


Outro exemplo

Imagine pesquisar:

Problemas de autenticação RACF

Keyword encontra:

RACF

Vector encontra:

Security

Authorization

Login

Access denied

SAF

ACEE

Muito mais inteligente.


Por que OpenSearch?

Muita gente pergunta:

"Se o Db2 já possui vetor, por que usar OpenSearch?"

Porque são especialidades diferentes.

O OpenSearch continua sendo excelente para:

  • Full Text Search

  • BM25

  • Índices invertidos

  • Autocomplete

  • Facetas

  • Ranking lexical

Enquanto o Db2 faz muito bem:

  • SQL

  • Dados relacionais

  • Vetores

  • Similaridade

Cada um faz aquilo em que é especialista.


Curiosidade

O OpenSearch nasceu quando a Amazon criou um fork aberto do Elasticsearch após mudanças no licenciamento da Elastic.

Hoje ambos continuam extremamente populares.

O Db2 consegue integrar com os dois.


Easter Egg nº 1

Se você já assistiu Star Wars, pense assim.

Keyword Search é como procurar um Jedi pelo nome.

Luke Skywalker

Vector Search é usar a Força.

Você sente que alguém está ali mesmo sem saber exatamente quem é.

Hybrid Search?

É usar os dois ao mesmo tempo.


Easter Egg nº 2

Quem cresceu usando Google provavelmente nunca percebeu.

Quando você pesquisa:

carro vermelho

O Google não procura apenas essas duas palavras.

Ele tenta entender intenção.

Hybrid Search leva essa mesma filosofia para dentro do banco de dados corporativo.


Easter Egg nº 3

O famoso comando do TSO:

FIND

procura caracteres.

O Hybrid Search procura conhecimento.

É uma evolução conceitual parecida com sair de um índice telefônico para um assistente inteligente.


Onde veremos isso nos próximos anos?

Praticamente em todos os sistemas corporativos.

Imagine:

✔ Assistente para COBOL.

✔ Pesquisa inteligente em JCL.

✔ Busca em documentação CICS.

✔ Pesquisa em milhares de Stored Procedures.

✔ Localização automática de código semelhante.

✔ Descoberta de APIs relacionadas.

✔ Pesquisa em incidentes históricos.

✔ Chatbots internos.

✔ Copilotos para desenvolvedores.


O impacto para quem trabalha com Mainframe

Durante muito tempo existiu o mito de que IA e Mainframe eram mundos separados.

Hoje isso não faz mais sentido.

O Mainframe continua sendo responsável pelas informações mais críticas das empresas.

A IA precisa exatamente dessas informações.

E o Db2 está se tornando uma ponte entre esses dois universos.

Em vez de exportar tudo para outra plataforma, é possível realizar boa parte da recuperação inteligente diretamente onde os dados já estão, mantendo segurança, governança e consistência.


Dicas para o programador júnior

  • Continue estudando SQL. Ele continua sendo indispensável.

  • Aprenda conceitos de IA, mas não abandone fundamentos de banco de dados.

  • Entenda o que são embeddings, similaridade e RAG.

  • Familiarize-se com OpenSearch e Elasticsearch.

  • Estude como modelos de linguagem utilizam bases corporativas.

  • Explore as novidades do Db2 12.1.x e acompanhe os anúncios da IBM sobre recursos de IA.


Conclusão

Durante décadas, a missão do Db2 foi responder perguntas objetivas sobre dados estruturados. Com a chegada do suporte a vetores no Db2 12.1.2 e da integração com OpenSearch e Elasticsearch no Db2 12.1.5, o banco passa a participar de uma nova geração de aplicações capazes de compreender contexto e significado.

Essa evolução não substitui SQL nem elimina a importância dos índices tradicionais. Pelo contrário: combina o melhor dos dois mundos. A busca lexical continua sendo excelente para códigos, identificadores e termos exatos, enquanto a busca vetorial amplia a capacidade de encontrar conceitos relacionados, mesmo quando as palavras utilizadas pelo usuário são diferentes daquelas presentes nos documentos.

Para quem desenvolve em COBOL, administra ambientes IBM ou trabalha com arquitetura de sistemas, entender Hybrid Search significa compreender como serão construídos os copilotos, os assistentes técnicos e as soluções RAG que deverão fazer parte do ecossistema corporativo nos próximos anos.

A tecnologia muda. Os princípios permanecem. E talvez a maior lição seja esta: o Db2 continua sendo um banco de dados extraordinário, mas agora ele também começa a compreender o significado das perguntas que fazemos. Isso representa uma mudança de paradigma tão importante quanto a adoção do SQL décadas atrás e coloca o ecossistema IBM em uma posição estratégica para a era da Inteligência Artificial.


sexta-feira, 3 de abril de 2026

💀 Seu COBOL ainda manda no mundo — e o IBM Db2 é o cérebro invisível por trás de bilhões de transações

 

Bellacosa Mainframe introduz o DB2

💀 “Seu COBOL ainda manda no mundo — e o IBM Db2 é o cérebro invisível por trás de bilhões de transações”

Se você acha que banco de dados é só “guardar informação”… prepare-se: no mundo corporativo pesado — bancos, seguradoras, governos — quem reina é a dupla COBOL + Db2.
E não, isso não é legado morto. Isso é infraestrutura crítica global.


🧬 Origem: quando dados viraram ciência

Antes do Db2, existia caos.

  • arquivos flat
  • duplicação
  • dificuldade de acesso

Então surge o modelo relacional, criado por Edgar F. Codd na IBM.

👉 Resultado:

  • tabelas
  • chaves
  • SQL

E nos anos 80 nasce o Db2, trazendo isso para o mundo enterprise.


🏛️ Db2 no Mainframe: onde o jogo é sério

O Db2 roda no z/OS, lado a lado com:

  • COBOL
  • CICS
  • IMS

💀 Tradução:

Isso aqui processa dinheiro de verdade


☕ O Dev COBOL Sênior (vida real)

Imagine um sistema bancário:

Cliente faz transferência → COBOL → Db2 → commit

💡 Exemplo COBOL + Db2

EXEC SQL
UPDATE CONTA
SET SALDO = SALDO - 100
WHERE ID = :ORIGEM
END-EXEC.

EXEC SQL
UPDATE CONTA
SET SALDO = SALDO + 100
WHERE ID = :DESTINO
END-EXEC.

EXEC SQL
COMMIT
END-EXEC.

👉 Simples? Sim.
👉 Crítico? ABSURDAMENTE.


🔄 Transações: o coração do sistema

Você viu isso no módulo — aqui é onde ganha vida:

START → UPDATE → COMMIT

Se falhar:

ROLLBACK

💀 Isso evita:

  • dinheiro sumir
  • inconsistência

📜 Logging: a caixa preta do banco

Db2 registra TUDO:

  • INSERT
  • UPDATE
  • DELETE

👉 Isso permite:

  • auditoria
  • recovery
  • rastreamento

💡 Insight

Sem log… você está cego
Com log… você reconstrói o passado


🔄 Recovery: sobrevivência do sistema

Cenário:

  • backup às 6:00
  • falha às 11:00

👉 solução:

Backup + Logs = estado correto

💾 Backup no mundo real

❄️ Cold

  • banco parado

🌡️ Warm

  • leitura apenas

🔥 Hot

  • banco online (produção)

💀 No banco:

parar sistema não é opção → usa hot backup


🔒 Locking: guerra silenciosa

3 programas acessando o mesmo registro:

App1 → lock
App2 → espera
App3 → leitura controlada

👉 Locks evitam corrupção


💡 Regra de ouro

Lock só é liberado no COMMIT


⚡ Performance: onde o DBA brilha

📦 Buffers

  • memória → rápido

📚 Index

  • busca instantânea

⚙️ Optimizer

  • escolhe melhor plano

👉 Exemplo:

Sem índice:

SELECT * FROM CLIENTE WHERE NOME='JOÃO';

Com índice:

CREATE INDEX IDX_NOME ON CLIENTE(NOME);

⚡ diferença absurda


🌐 Integração moderna (sim, Db2 evoluiu)

Hoje Db2 conversa com:

  • APIs
  • Java (JDBC)
  • ODBC
  • microservices

👉 Não é mais só terminal verde 😄


🧠 Stored Procedures: lógica dentro do banco

CREATE PROCEDURE TRANSFERIR(...)

👉 roda dentro do Db2
👉 menos rede
👉 mais performance


🧬 Easter Eggs & Curiosidades

💡 Db2 nasceu dentro da IBM Research
💡 COBOL ainda processa ~70% das transações financeiras mundiais
💡 Muitos sistemas críticos têm décadas sem downtime significativo


💀 Easter Egg raiz:

“If it ain’t broken, don’t migrate it”
(tradução: se está rodando há 30 anos… NÃO mexe 😄)


🔥 Insight nível Bellacosa

Mainframe não é legado…
é infraestrutura estável, segura e absurda em escala


🧠 Visão final (arquitetura)

Usuário → Aplicação (COBOL) → Db2 → Dados

Logs / Backup / Recovery

🚀 Conclusão

Você começou aprendendo:

  • o que é banco
  • modelos
  • DBMS
  • transações
  • logs
  • backup
  • performance

👉 E chegou aqui:

💀 Entendendo como o mundo financeiro roda


💥 Frase final

Enquanto todo mundo fala de cloud…
o dinheiro do mundo continua passando por COBOL + Db2

 

quarta-feira, 28 de agosto de 2024

IBM Z Resiliência : 30 Laboratórios Práticos Do "Meu Primeiro Sysplex" até "Meu Datacenter Nunca Para"

Bellacosa Mainframe e o laboratorio pratico em IBM Z Resiliencia




☕ O Holocron da Resiliência IBM Z

30 Laboratórios Práticos

Do "Meu Primeiro Sysplex" até "Meu Datacenter Nunca Para"

A Resiliência no IBM Z vai muito além de conhecer siglas como HA, DR, Parallel Sysplex ou GDPS. Ela representa uma filosofia de engenharia construída ao longo de décadas para garantir que aplicações críticas permaneçam disponíveis mesmo diante de falhas de hardware, software, rede ou até desastres naturais. O objetivo deste guia é conduzir o Programador COBOL, Analista de Sistemas ou futuro Sysprog por uma jornada progressiva, mostrando como cada componente da plataforma contribui para a continuidade do negócio e como todos trabalham em conjunto para entregar disponibilidade praticamente ininterrupta.

A melhor forma de aprender é evoluir em etapas. Comece dominando os conceitos fundamentais de SLA, RPO, RTO, RAS e Single Point of Failure. Em seguida, compreenda a arquitetura do IBM Z, estudando CPC, LPARs, HMC e o papel do LIC. Depois avance para Parallel Sysplex, Coupling Facility, WLM e GDPS, entendendo como múltiplos sistemas operam como um único ambiente resiliente. Na sequência, aprofunde-se em DFSMS, Storage, CICS, Db2, IMS, MQ e estratégias de recuperação e continuidade dos negócios.

Procure sempre relacionar teoria com prática. Analise mensagens do sistema, consulte o SDSF, estude relatórios RMF e SMF, desenhe arquiteturas, simule cenários de falha e questione como sua aplicação reagiria a cada situação. O profissional que compreende Resiliência deixa de enxergar apenas programas COBOL e passa a entender todo o ecossistema que mantém milhões de transações funcionando com segurança, desempenho e confiabilidade. Esse é o caminho para evoluir de Padawan a Mestre no universo IBM Z.



🟢 NÍVEL 1 — PADAWAN (Labs 1–10)

Lab 1 – Descobrindo a Arquitetura IBM Z

Objetivo

Identificar todos os componentes físicos do ambiente.

Atividades

  • Localizar CPC

  • Identificar LPARs

  • Ver HMC

  • Identificar Storage

Solução

O aluno deve desenhar a arquitetura mostrando como todos os componentes se conectam.


Lab 2 – Identificando SPOFs

Objetivo

Encontrar Single Points of Failure.

Atividades

Analisar:

  • Rede

  • Storage

  • CICS

  • MQ

  • Db2

Solução

Criar uma tabela

ComponenteExiste redundância?
StorageSim
SwitchNão
Servidor DNSNão

Lab 3 – Calculando SLA

Dado:

99,5%

99,9%

99,99%

99,999%

Calcule:

  • indisponibilidade anual

  • mensal

  • diária

Solução

Utilizar tabela oficial de SLA.


Lab 4 – Descobrindo o RPO

Uma empresa aceita perder:

  • nenhuma transação

  • cinco minutos

  • uma hora

Classifique o RPO.

Solução

Relacionar cada cenário ao objetivo de recuperação.


Lab 5 – Descobrindo o RTO

Mesmo exercício.

Agora considerando tempo de recuperação.


Lab 6 – CFIA

Escolha um ambiente.

Analise:

"O que acontece se..."

  • Storage parar

  • CPU parar

  • Switch parar

Solução

Construir matriz de impacto.


Lab 7 – Conhecendo o WLM

No SDSF identificar:

  • Service Classes

  • Importance

  • Velocity

Solução

Explicar porque um Job Batch ficou esperando.


Lab 8 – Explorando RMF

Consultar:

CPU

I/O

Paging

Storage

Solução

Gerar relatório resumido.


Lab 9 – Health Checker

Executar

F HZSPROC

Interpretar avisos.


Lab 10 – Runtime Diagnostics

Executar Runtime Diagnostics.

Interpretar:

  • Loop

  • Espera

  • Deadlock


🟡 NÍVEL 2 — JEDI (Labs 11–20)


Lab 11 – Criando um Sysplex

Desenhar:

2 LPARs

1 Coupling Facility

Storage compartilhado

Solução

Apresentar diagrama.


Lab 12 – Entendendo a Coupling Facility

Identificar:

  • Lock Structure

  • Cache Structure

  • List Structure

Explicar função de cada uma.


Lab 13 – Simulando Falha de um Membro

Desligar uma LPAR (ambiente de laboratório).

Observar:

  • usuários continuam?

  • aplicações continuam?


Lab 14 – ARM

Parar uma região CICS.

Verificar reinício automático.


Lab 15 – DVIPA

Mover uma aplicação entre membros.

Confirmar:

IP continua igual.


Lab 16 – Sysplex Distributor

Monitorar distribuição de sessões.

Verificar balanceamento.


Lab 17 – LBA

Analisar recomendações do Load Balancing Advisor.


Lab 18 – Capacity on Demand

Criar cenário:

Black Friday.

Qual recurso ativar?

CBU?

CUoD?

OOCoD?

Justifique.


Lab 19 – DFSMS

Criar:

Storage Group

Management Class

Storage Class

Data Class

Associar Dataset.


Lab 20 – DFSMShsm

Migrar um dataset.

Recuperá-lo.

Verificar tempo.


🔴 NÍVEL 3 — MESTRE (Labs 21–30)


Lab 21 – CICSplex

Desenhar:

TOR

AOR

FOR

DOR

Fluxo completo.


Lab 22 – MQ

Criar:

Queue

Sender

Receiver

Enviar mensagens.

Simular parada do receptor.

Confirmar persistência.


Lab 23 – Db2

Executar:

RUNSTATS

REORG

Comparar Access Path.


Lab 24 – IMS

Criar fluxo:

Terminal

TM

Programa

IMS DB

Resposta.


Lab 25 – Metro Mirror

Desenhar:

Site A

Site B

Replicação síncrona.

Explicar RPO.


Lab 26 – Global Mirror

Mesmo exercício.

Agora com longa distância.

Explicar diferenças.


Lab 27 – Business Continuity

Escreva um BCP contendo:

  • responsáveis

  • comunicação

  • ordem de recuperação

  • testes


Lab 28 – Simulação Completa

O cenário:

🔥 Incêndio no Data Center Principal.

O aluno deve decidir:

  • ativa GDPS?

  • ativa CBU?

  • usa Metro Mirror?

  • muda DNS?

  • inicia ARM?

Justificar todas as decisões.


Lab 29 – Projeto de Arquitetura

Receba:

Banco Digital

20 milhões de clientes

PIX

Cartão

Internet Banking

Desenhe:

  • Hardware

  • Sysplex

  • CICSplex

  • MQ

  • Db2

  • Storage

  • DR


Lab 30 – O Desafio Final do Mestre

A empresa deseja atingir:

  • 99,999% de disponibilidade

  • RPO = Zero

  • RTO = Menor que 5 minutos

  • Dois datacenters ativos

  • 50 milhões de transações por dia

  • Atualizações sem parada

  • Crescimento de capacidade sem desligamento

Missão

Projetar toda a arquitetura IBM Z.

O projeto deve incluir:

  • IBM Z (CPCs e LPARs)

  • Parallel Sysplex

  • Coupling Facility

  • WLM

  • SFM

  • ARM

  • CICSplex (TOR, AOR, FOR e DOR)

  • IBM MQ

  • Db2 for z/OS

  • IMS (quando aplicável)

  • DFSMS

  • IBM Copy Services Manager

  • Metro Mirror ou Global Mirror

  • GDPS

  • Business Continuity Plan

  • Capacity on Demand (CBU, CUoD ou OOCoD)

Solução esperada

O aluno entrega um documento de arquitetura contendo:

  • diagrama completo da solução;

  • justificativa técnica para cada componente;

  • estratégia de alta disponibilidade;

  • estratégia de recuperação de desastres;

  • cálculo de SLA, RPO e RTO;

  • análise de Single Points of Failure e respectivas eliminações;

  • plano de testes de contingência;

  • plano de crescimento para os próximos cinco anos.


🏆 Certificação Bellacosa Mainframe

Ao concluir os 30 laboratórios, o aluno terá praticado os principais conceitos de resiliência do IBM Z, passando da compreensão dos fundamentos até o desenho de arquiteturas corporativas. Essa sequência é adequada tanto para um Programador COBOL Júnior que deseja entender a plataforma onde suas aplicações executam quanto para profissionais que pretendem evoluir para funções de Analista de Infraestrutura IBM Z, Sysprog, Especialista em Alta Disponibilidade ou Arquiteto Mainframe. Ela também pode servir como base para um curso completo de aproximadamente 40 horas, com exercícios, estudos de caso e desafios progressivos. 

segunda-feira, 27 de maio de 2024

Resiliência IBM Z – O Coração das Aplicações Resilientes: Como CICS, Db2, MQ e IMS - Parte V

 

Bellacosa Mainframe e a resiliencia ibm z parte v

☕ Um Café no Bellacosa Mainframe

O Holocron da Resiliência IBM Z

Parte V – O Coração das Aplicações Resilientes: Como CICS, Db2, MQ e IMS Mantêm Milhões de Transações Sempre Disponíveis

"Hardware poderoso impressiona. Mas são as aplicações que entregam valor ao negócio. O verdadeiro desafio é garantir que elas continuem funcionando mesmo quando tudo ao redor muda."

Até aqui nossa jornada mostrou que a Resiliência no IBM Z não depende apenas de computadores robustos.

Conhecemos conceitos como RAS, SLA e Disaster Recovery.

Descobrimos como o hardware foi projetado para detectar falhas antes mesmo que elas aconteçam.

Vimos como o Parallel Sysplex permite que vários mainframes trabalhem como um único sistema.

Também aprendemos que o armazenamento IBM Z é inteligente, automatizado e capaz de crescer sem interromper o negócio.

Mas falta responder uma pergunta.

Quem realmente atende o cliente?

Quem responde uma consulta bancária?

Quem realiza uma transferência PIX?

Quem grava um pagamento?

Quem consulta uma apólice de seguro?

Quem processa uma compra no cartão de crédito?

A resposta está no conjunto de tecnologias conhecido como middleware.

São elas que transformam toda aquela infraestrutura invisível em serviços utilizados diariamente por milhões de pessoas.

Os conceitos desta parte abrangem IBM MQ, IBM Db2 for z/OS, CICS, CICS Transaction Server (CICS TS), z/OS Workload Manager Health API, Automatic Restart Manager (ARM), CICSplex, TOR, AOR, DOR, FOR, IMS, IMS DB, Transaction Manager, HALDB, Fast Database Recovery (FDBR) e IMS Database Recovery Control (DBRC). Esses componentes aparecem na seção final do glossário IBM Z Resiliency.


O Que é Middleware?

Imagine uma cidade.

Existe energia elétrica.

Existe abastecimento de água.

Existe internet.

Existe transporte.

Tudo isso representa a infraestrutura.

Mas quem realmente atende o cidadão?

Os hospitais.

Os bancos.

Os supermercados.

As escolas.

No IBM Z acontece exatamente a mesma coisa.

Hardware, Storage e Sysplex representam a infraestrutura.

CICS, Db2, MQ e IMS representam os serviços utilizados pelo negócio.

É ali que mora a aplicação COBOL.


CICS – O Grande Atendente do Mainframe

Poucas tecnologias marcaram tanto a história da computação quanto o Customer Information Control System, mais conhecido como CICS.

Imagine uma agência bancária.

Cada cliente chega ao caixa.

Faz uma solicitação.

Recebe uma resposta.

Sai.

O próximo cliente é atendido.

O CICS faz exatamente isso.

Milhares de usuários enviam requisições simultaneamente.

O CICS organiza tudo.

Distribui recursos.

Executa programas COBOL.

Gerencia transações.

Controla segurança.

Coordena acesso aos dados.

Sem ele, grande parte das aplicações online simplesmente não existiria.


CICS Transaction Server

O CICS TS representa a evolução moderna do CICS.

Hoje ele suporta:

  • APIs REST;

  • JSON;

  • Web Services;

  • Java;

  • Eventos;

  • Integração com Cloud;

  • Containers e Channels;

  • Threadsafe;

  • OpenTelemetry;

  • Segurança moderna.

Muita gente imagina que o CICS ficou preso aos terminais verdes.

Na realidade ele conversa diariamente com aplicativos Android, iPhones, internet banking, caixas eletrônicos e sistemas distribuídos.

O COBOL continua executando.

A tecnologia ao redor evoluiu.


Db2 for z/OS – O Guardião dos Dados

Toda empresa possui seu patrimônio.

No banco...

São as contas.

Na seguradora...

São as apólices.

Na companhia aérea...

São as reservas.

Quem protege essas informações?

O Db2.

Ele garante:

  • consistência;

  • concorrência;

  • recuperação;

  • integridade;

  • desempenho.

Quando dois milhões de pessoas consultam saldo simultaneamente, o Db2 coordena milhares de operações concorrentes sem comprometer a integridade dos dados.


IBM MQ – O Carteiro que Nunca Dorme

Imagine uma empresa gigantesca.

Nem todos os departamentos trabalham no mesmo horário.

Mesmo assim as mensagens precisam chegar.

O IBM MQ resolve exatamente esse problema.

Ele entrega mensagens com segurança.

Mesmo que o destinatário esteja temporariamente indisponível.

Isso desacopla aplicações.

Aumenta a disponibilidade.

Facilita integrações.

É por isso que tantas arquiteturas modernas utilizam filas.


Quando Tudo Acontece ao Mesmo Tempo

Imagine um PIX.

Em poucos segundos acontecem dezenas de operações.

O aplicativo envia a solicitação.

O CICS recebe a transação.

O COBOL valida regras de negócio.

O Db2 consulta contas.

O MQ envia notificações.

Outro sistema recebe a mensagem.

Tudo precisa acontecer praticamente em tempo real.

Se qualquer componente falhar...

Toda a experiência do cliente será afetada.

É por isso que a Resiliência é tão importante.


CICSplex – Um CICS Nunca Vem Sozinho

Assim como existe o Parallel Sysplex...

Também existe o CICSplex.

Ele reúne diversos ambientes CICS trabalhando em conjunto.

Para o usuário...

Existe apenas um sistema.

Na realidade podem existir dezenas de regiões distribuindo carga automaticamente.


TOR – Terminal Owning Region

Imagine a recepção de um grande hospital.

Ela recebe os pacientes.

Mas não realiza cirurgias.

O TOR funciona assim.

Ele recebe as conexões dos usuários.

Depois encaminha cada solicitação para outra região responsável pelo processamento.


AOR – Application Owning Region

Agora chegamos ao verdadeiro coração da aplicação.

É na AOR que executam os programas COBOL.

Toda lógica de negócio vive aqui.

Quanto mais regiões AOR existirem...

Maior poderá ser a capacidade de processamento.


FOR – File Owning Region

Algumas aplicações acessam milhares de arquivos VSAM.

Em vez de cada região abrir esses arquivos individualmente...

Existe a FOR.

Ela centraliza esse acesso.

Reduz conflitos.

Melhora desempenho.

Simplifica administração.


DOR – Data Owning Region

A DOR segue filosofia semelhante.

Ela concentra determinados recursos de dados compartilhados entre diversas aplicações.

Essa separação facilita manutenção e escalabilidade.


WLM Health API

Lembra do Workload Manager?

Agora imagine que o próprio middleware possa informar ao WLM seu estado de saúde.

É exatamente essa a função da Health API.

O WLM deixa de observar apenas consumo de CPU.

Ele passa a considerar também a qualidade do serviço entregue pelas aplicações.


Automatic Restart Manager

Na Parte III conhecemos o ARM.

Agora podemos entender seu impacto real.

Se uma região CICS terminar inesperadamente...

O ARM pode reiniciá-la automaticamente.

Sem operadores.

Sem intervenção humana.

Sem perda significativa de disponibilidade.


IMS – O Veterano Que Continua Jovem

Muito antes da internet existir...

O IMS já processava milhões de transações.

Hoje continua fazendo exatamente isso.

O Information Management System permanece como um dos ambientes transacionais mais rápidos do mundo.

Muitas aplicações financeiras ainda dependem dele diariamente.


IMS DB

O banco de dados IMS possui características próprias.

Sua organização hierárquica oferece desempenho extremamente elevado para determinadas cargas de trabalho.

Quando corretamente modelado, consegue responder consultas com velocidade impressionante.


Transaction Manager

O IMS TM coordena o processamento online.

Recebe requisições.

Controla filas.

Executa programas.

Gerencia recuperação.

Mantém a integridade das transações.

É o equivalente, dentro do universo IMS, ao papel desempenhado pelo CICS em inúmeras aplicações.


HALDB – Crescendo Sem Limites

Com o passar dos anos, algumas bases IMS tornaram-se gigantescas.

O High Availability Large Database foi criado para resolver esse desafio.

Ele divide grandes bancos de dados em partições.

Assim é possível:

  • aumentar capacidade;

  • reduzir tempo de manutenção;

  • melhorar disponibilidade;

  • facilitar reorganizações.

Tudo isso mantendo o sistema online.


Fast Database Recovery

Imagine um acidente.

Quanto mais rápido a recuperação...

Menor o impacto.

O FDBR acelera a recuperação das bases IMS após falhas.

Isso reduz significativamente o RTO.


IMS Database Recovery Control

Toda recuperação precisa ser coordenada.

O DBRC registra informações fundamentais sobre backups, logs e processos de recuperação.

Ele garante que as bases sejam restauradas corretamente.

Sem perda de consistência.


O Que um Programador COBOL Deve Aprender?

Muitos iniciantes acreditam que basta dominar a linguagem COBOL.

Na prática...

O código representa apenas uma parte da aplicação.

Um profissional IBM Z moderno precisa compreender:

  • como o CICS gerencia transações;

  • como o Db2 protege dados;

  • como o MQ integra sistemas;

  • como o IMS processa grandes volumes;

  • como a infraestrutura garante disponibilidade.

Quanto maior essa visão...

Maior será sua capacidade de construir aplicações resilientes.


O Legado do IBM Z

Existe um motivo pelo qual bancos processam bilhões de transações utilizando tecnologias criadas há décadas.

Elas nunca pararam de evoluir.

O CICS conversa com APIs REST.

O Db2 trabalha com analytics e inteligência artificial.

O MQ conecta aplicações distribuídas.

O IMS continua ampliando desempenho e disponibilidade.

Nada permaneceu parado no tempo.

O legado do IBM Z não é tecnologia antiga.

É tecnologia que amadureceu continuamente sem abandonar aquilo que sempre fez melhor: processar transações críticas com confiabilidade, desempenho e resiliência.

No próximo capítulo do Holocron da Resiliência IBM Z, concluiremos nossa jornada explorando IBM Copy Services Manager (CSM), Metro Mirror, Global Mirror, XRC, Zero Data Loss (ZDL), Coupling Data Sets (CDS), Business Continuity Plan (BCP) e as estratégias que permitem proteger informações mesmo diante de desastres de grande escala, fechando o ciclo completo da Resiliência no IBM Z.


domingo, 23 de janeiro de 2022

SPUFI sem Mistérios: do Primeiro SELECT ao Dataset de Saída no Db2 for z/OS

 

Bellacosa Mainframe e o spufi sem misterios

☕ Um Café no Bellacosa Mainframe

SPUFI sem Mistérios: do Primeiro SELECT ao Dataset de Saída no Db2 for z/OS

O guia do programador COBOL Padawan para entender SQL, datasets, isolamento, CCSID, commit, JCL e tudo o que acontece por trás da tela verde

Imagine a cena.

Você acabou de entrar no TSO, abriu o ISPF, navegou até o DB2I e escolheu a opção SPUFI. Diante de você aparece aquela clássica tela preta, com letras verdes e azuis, campos numerados e algumas opções que parecem inocentes:

EDIT INPUT  . . . . ===> YES
EXECUTE . . . . . . ===> YES
AUTOCOMMIT . . . . . ===> YES
BROWSE OUTPUT  . . . ===> YES

O programador COBOL Padawan olha para aquilo e pensa:

“Eu só queria executar um SELECT. Por que preciso informar dataset, volume, senha, isolamento, formato, espaço primário, espaço secundário, LRECL, BLKSIZE e CCSID?”

Essa pergunta é perfeita.

Ela revela uma diferença fundamental entre o mundo distribuído e o universo IBM Mainframe.

Em muitas ferramentas modernas, você abre uma janela, digita SQL e recebe o resultado em uma grade gráfica. No z/OS, entretanto, cada etapa foi construída para ser explícita, controlável, auditável e reutilizável. O SPUFI não trabalha apenas com uma “caixa de texto”. Ele trabalha com datasets reais, parâmetros de execução, formatos de registro, controle transacional e integração direta com o subsistema Db2.

O SPUFI é simples na aparência, mas por trás daquela tela existe uma pequena cadeia de processamento digna de uma aplicação batch.

Prepare o café, abra o caderno de anotações e ajuste os óculos de programador Jedi. Vamos desmontar o SPUFI peça por peça.


Bellacosa Mainframe o que é o Spufi?

1. O que é SPUFI?

SPUFI significa:

SQL Processor Using File Input

Em uma tradução livre:

Processador SQL usando um arquivo como entrada.

Esse nome descreve exatamente o que a ferramenta faz.

O SPUFI:

  1. lê comandos SQL de um dataset;

  2. envia esses comandos ao Db2;

  3. recebe o resultado;

  4. grava as mensagens e linhas retornadas em outro dataset;

  5. opcionalmente abre o resultado para consulta.

Seu fluxo básico é:

Programador
    |
    v
Dataset com SQL
    |
    v
SPUFI
    |
    v
Plano/Pacote do DB2I
    |
    v
Subsistema Db2
    |
    v
Parser + Otimizador + Executor
    |
    v
Dataset de saída

Perceba um detalhe importante: o SPUFI não é o banco de dados, nem o otimizador e nem o mecanismo responsável por acessar as tabelas.

Ele é uma interface.

Quem realmente valida, otimiza e executa o SQL é o Db2.


2. Por que o SPUFI continua importante?

Mesmo existindo ferramentas gráficas, IDEs, plugins para VS Code, interfaces web e utilitários distribuídos, o SPUFI continua extremamente útil porque:

  • executa SQL diretamente dentro do ambiente z/OS;

  • usa a autenticação do usuário TSO;

  • acessa o subsistema Db2 local;

  • não depende de configuração ODBC ou JDBC externa;

  • grava a entrada e a saída em datasets;

  • facilita auditoria e repetição dos testes;

  • funciona bem em ambientes restritos;

  • é familiar para DBAs, sysprogs e desenvolvedores veteranos.

Além disso, o SPUFI é uma excelente escola.

Quem aprende SPUFI acaba aprendendo, mesmo sem perceber:

  • PDS e membros;

  • datasets sequenciais;

  • atributos DCB;

  • alocação em DASD;

  • CCSID;

  • terminadores SQL;

  • níveis de isolamento;

  • commits;

  • planos e pacotes;

  • códigos SQL;

  • organização de scripts.

Portanto, o SPUFI não é apenas uma ferramenta antiga. Ele é uma ponte entre SQL e a cultura operacional do mainframe.


3. A primeira tela: o painel principal do SPUFI

Na tela mostrada, temos algo semelhante a:

SPUFI                                         SSID: DB9G

Enter the input data set name:
 1 DATA SET NAME ... ===> 'IBMUSER.WORKBOOK.SQL(SELCOPA)'
 2 VOLUME SERIAL .... ===>
 3 DATA SET PASSWORD  ===>

Enter the output data set name:
 4 DATA SET NAME ... ===> 'INEFE00.OUTPUT.SAIDA'

Specify processing options:
 5 CHANGE DEFAULTS .. ===> YES
 6 EDIT INPUT ....... ===> YES
 7 EXECUTE .......... ===> YES
 8 AUTOCOMMIT ....... ===> YES
 9 BROWSE OUTPUT .... ===> YES

For remote SQL processing:
10 CONNECT LOCATION . ===>

No canto superior direito aparece:

SSID: DB9G

SSID significa Subsystem Identifier.

É o identificador do subsistema Db2 ao qual o DB2I está conectado.

Em uma instalação, podem existir vários subsistemas:

DB2D   Desenvolvimento
DB2T   Testes
DB2H   Homologação
DB2P   Produção
DB9G   Laboratório ou ambiente específico

O nome não possui significado universal. Cada empresa define sua convenção.

Um Padawan deve sempre observar o SSID antes de executar qualquer comando destrutivo.

Um DELETE no ambiente errado pode transformar uma aula tranquila em uma reunião extraordinária com DBA, gestor, auditoria, segurança e provavelmente alguém perguntando por que não havia WHERE.


4. Campo 1 — DATA SET NAME de entrada

No exemplo:

'IBMUSER.WORKBOOK.SQL(SELCOPA)'

Esse nome possui duas partes:

IBMUSER.WORKBOOK.SQL

É o dataset.

SELCOPA

É o membro.

Isso indica que o dataset provavelmente é um PDS ou PDSE.

Podemos visualizá-lo como uma pasta:

IBMUSER.WORKBOOK.SQL
   |
   +-- SELCOPA
   +-- SELCLIENT
   +-- UPDTEST
   +-- CREATE01
   +-- JOIN001

Cada membro contém um ou mais comandos SQL.

Por exemplo, o membro SELCOPA pode conter:

SELECT EMPNO,
       FIRSTNME,
       LASTNAME,
       WORKDEPT
  FROM DSN8C10.EMP
 WHERE WORKDEPT = 'A00'
 ORDER BY LASTNAME;

Por que usar um PDS ou PDSE?

Porque ele permite organizar vários scripts dentro do mesmo dataset.

Uma estrutura interessante seria:

IBMUSER.DB2.SQL
   |
   +-- SEL001
   +-- SEL002
   +-- INS001
   +-- UPD001
   +-- DEL001
   +-- DDL001
   +-- EXPLAIN
   +-- CATALOG

É como possuir uma biblioteca de scripts SQL, só que usando a estrutura tradicional do z/OS.

PDS ou PDSE?

Os dois funcionam, mas o PDSE costuma ser preferível em ambientes modernos porque:

  • não exige compressão;

  • reutiliza espaço interno de forma mais eficiente;

  • possui melhor gerenciamento de diretório;

  • reduz alguns problemas clássicos de fragmentação.


5. Criando o dataset de entrada

Você pode criar o dataset pelo ISPF 3.2 ou por JCL.

Exemplo:

//CRIASQL  JOB (ACCT),'CRIA PDS SQL',
//             CLASS=A,
//             MSGCLASS=X,
//             NOTIFY=&SYSUID
//*
//ALLOC    EXEC PGM=IEFBR14
//SQLLIB   DD  DSN=IBMUSER.WORKBOOK.SQL,
//             DISP=(NEW,CATLG,DELETE),
//             UNIT=SYSDA,
//             SPACE=(TRK,(2,2,20)),
//             DCB=(DSORG=PO,RECFM=FB,LRECL=80,BLKSIZE=0)
//

Agora vamos explicar cada linha.

JOB

//CRIASQL  JOB (ACCT),'CRIA PDS SQL',

Define o início do job.

  • CRIASQL é o nome do job;

  • (ACCT) é a informação contábil;

  • 'CRIA PDS SQL' é uma descrição.

CLASS

//             CLASS=A,

Indica a classe de execução.

A classe controla aspectos como:

  • fila;

  • prioridade;

  • recursos;

  • regras locais de execução.

MSGCLASS

//             MSGCLASS=X,

Indica a classe de saída das mensagens JES.

NOTIFY

//             NOTIFY=&SYSUID

Solicita que o usuário que submeteu o job seja notificado quando ele terminar.

EXEC PGM=IEFBR14

//ALLOC    EXEC PGM=IEFBR14

IEFBR14 é um programa praticamente vazio, tradicionalmente usado para permitir que o sistema processe instruções DD.

Ele não “cria” o dataset diretamente. Quem faz a alocação é o gerenciamento de datasets do z/OS ao interpretar a DD com DISP=NEW.

Esse é um dos grandes easter eggs do mainframe: um programa que praticamente não faz nada tornou-se uma das peças mais famosas do JCL.

DSN

//SQLLIB   DD  DSN=IBMUSER.WORKBOOK.SQL,

Define o nome do dataset.

DISP

//             DISP=(NEW,CATLG,DELETE),

Significa:

  • NEW: o dataset será criado;

  • CATLG: se o step terminar normalmente, será catalogado;

  • DELETE: se houver falha, será excluído.

UNIT

//             UNIT=SYSDA,

Solicita uma unidade DASD genérica.

SPACE

//             SPACE=(TRK,(2,2,20)),

Significa:

  • unidade de alocação: tracks;

  • espaço primário: 2 tracks;

  • espaço secundário: 2 tracks;

  • diretório: 20 blocos.

O terceiro valor é relevante porque o dataset é particionado.

DCB

//             DCB=(DSORG=PO,RECFM=FB,LRECL=80,BLKSIZE=0)
  • DSORG=PO: organização particionada;

  • RECFM=FB: registros fixos blocados;

  • LRECL=80: cada registro possui 80 bytes;

  • BLKSIZE=0: o sistema escolhe um tamanho de bloco adequado.

O formato FB 80 é clássico para código-fonte, JCL e scripts SQL.


6. Campo 2 — VOLUME SERIAL

VOLUME SERIAL ===>

Esse campo normalmente fica em branco quando o dataset está catalogado.

O catálogo do z/OS já informa em qual volume ele reside.

Você só precisa preencher o VOLSER quando trabalha com um dataset não catalogado ou quando há uma razão operacional específica.

Exemplo:

VOLUME SERIAL ===> VOL001

Na maioria dos ambientes modernos, deixar em branco é correto.


7. Campo 3 — DATA SET PASSWORD

DATA SET PASSWORD ===>

Esse campo remete a mecanismos antigos de proteção por senha de dataset.

Atualmente, o acesso normalmente é controlado por um produto de segurança como:

  • RACF;

  • ACF2;

  • Top Secret.

Em ambientes modernos, esse campo quase sempre permanece vazio.

É quase uma peça arqueológica viva: continua presente porque o mainframe preserva compatibilidade com décadas de história.


8. Campo 4 — dataset de saída

No exemplo:

'INEFE00.OUTPUT.SAIDA'

A tela informa:

Must be a sequential data set

Isso significa que o dataset de saída deve ser sequencial.

O SPUFI grava:

  • o SQL executado;

  • mensagens do Db2;

  • SQLCODE;

  • SQLSTATE;

  • linhas retornadas;

  • quantidade de registros;

  • informações de commit;

  • eventuais erros.

Exemplo de saída:

---------+---------+---------+---------+---------+---------

SELECT EMPNO, FIRSTNME, LASTNAME
FROM DSN8C10.EMP
WHERE WORKDEPT = 'A00';

EMPNO  FIRSTNME     LASTNAME
------ ------------ ---------------
000010 CHRISTINE    HAAS
000110 VINCENZO     LUCCHESSI
000120 SEAN         O'CONNELL

DSNE610I NUMBER OF ROWS DISPLAYED IS 3
DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 0

Criando o dataset de saída

//CRIAOUT  JOB (ACCT),'CRIA SAIDA SPUFI',
//             CLASS=A,
//             MSGCLASS=X,
//             NOTIFY=&SYSUID
//*
//ALLOC    EXEC PGM=IEFBR14
//OUTPUT   DD  DSN=IBMUSER.OUTPUT.SPUFI,
//             DISP=(NEW,CATLG,DELETE),
//             UNIT=SYSDA,
//             SPACE=(TRK,(5,5)),
//             DCB=(DSORG=PS,RECFM=VB,LRECL=4092,BLKSIZE=0)
//

Aqui temos:

DSORG=PS

Physical Sequential, ou seja, sequencial.

RECFM=VB

Registros variáveis e blocados.

LRECL=4092

Permite linhas grandes de saída.

BLKSIZE=0

O sistema calcula um valor apropriado.


9. Campo 5 — CHANGE DEFAULTS

CHANGE DEFAULTS ===> YES

Com YES, o SPUFI abre a tela de parâmetros padrão.

Com NO, utiliza os valores já salvos no perfil do usuário ou na configuração da instalação.

Essa opção é útil quando você precisa alterar:

  • nível de isolamento;

  • número máximo de linhas;

  • terminador SQL;

  • atributos do dataset de saída;

  • largura das colunas;

  • formato dos cabeçalhos.

Para uma consulta simples, você pode usar NO.

Para aprender ou ajustar comportamento, use YES.


10. Campo 6 — EDIT INPUT

EDIT INPUT ===> YES

Com YES, o SPUFI abre o membro de entrada no editor ISPF antes da execução.

O fluxo será:

SPUFI
  |
  +--> abre ISPF Edit
  |
  +--> você grava o SQL
  |
  +--> pressiona PF3
  |
  +--> SPUFI executa

Com NO, ele executa diretamente o conteúdo atual do dataset.

Isso é útil quando o script já está pronto e não precisa ser revisado.

Exemplo de SQL para iniciantes

SELECT CURRENT DATE,
       CURRENT TIME,
       CURRENT TIMESTAMP
  FROM SYSIBM.SYSDUMMY1;

A tabela SYSIBM.SYSDUMMY1 é uma tabela especial com uma única linha, muito usada para testar expressões.

É o equivalente Db2 de uma pequena bancada de laboratório.


11. Campo 7 — EXECUTE

EXECUTE ===> YES

Com YES, o SQL será enviado ao Db2.

Com NO, o SPUFI pode permitir que você apenas edite o input sem executar.

Parece inútil, mas é interessante quando o SPUFI está sendo usado apenas como uma forma rápida de localizar e modificar um membro SQL.


12. Campo 8 — AUTOCOMMIT

AUTOCOMMIT ===> YES

Esse é um dos campos mais perigosos da tela.

Com YES, o SPUFI confirma automaticamente uma unidade de trabalho bem-sucedida.

Exemplo:

UPDATE CORP.CLIENTE
   SET STATUS = 'I'
 WHERE CLIENTE_ID = 100;

Se o comando funcionar e AUTOCOMMIT=YES, a alteração será confirmada.

Um ROLLBACK posterior não desfará essa atualização.

Para SELECT

Em consultas, o risco é pequeno.

Para INSERT, UPDATE e DELETE

Atenção máxima.

Durante testes, uma prática mais segura é:

AUTOCOMMIT ===> NO

E incluir comandos explícitos:

UPDATE CORP.CLIENTE
   SET STATUS = 'I'
 WHERE CLIENTE_ID = 100;

SELECT CLIENTE_ID,
       STATUS
  FROM CORP.CLIENTE
 WHERE CLIENTE_ID = 100;

ROLLBACK;

Assim você verifica o resultado e depois desfaz.

Quando estiver absolutamente certo:

UPDATE CORP.CLIENTE
   SET STATUS = 'I'
 WHERE CLIENTE_ID = 100;

COMMIT;

Cuidado especial com DELETE

Nunca execute casualmente:

DELETE FROM CORP.CLIENTE;

Sem WHERE, todas as linhas elegíveis podem ser removidas.

Antes de executar um DELETE, transforme-o em SELECT:

SELECT *
  FROM CORP.CLIENTE
 WHERE STATUS = 'I';

Confira a quantidade.

Depois:

DELETE
  FROM CORP.CLIENTE
 WHERE STATUS = 'I';

Esse pequeno ritual salva carreiras.


13. Campo 9 — BROWSE OUTPUT

BROWSE OUTPUT ===> YES

Com YES, o dataset de saída é aberto automaticamente após a execução.

Com NO, o resultado é gravado, mas você precisará abri-lo manualmente.

Por exemplo, usando:

ISPF 3.4

ou um comando:

BROWSE 'IBMUSER.OUTPUT.SPUFI'

Usar YES é conveniente para testes interativos.

Usar NO pode ser útil quando o resultado é muito grande ou quando o processamento será revisado posteriormente.


14. Campo 10 — CONNECT LOCATION

CONNECT LOCATION ===>

Esse campo permite direcionar a execução para uma localização Db2 remota.

Em ambientes distribuídos, o Db2 pode usar DRDA para comunicação entre subsistemas.

Exemplo conceitual:

Db2 local DB2D
     |
     | DRDA
     v
Db2 remoto DB2P

O valor usado depende da configuração de localização no catálogo Db2.

Para consultas locais, deixe em branco.


15. O aviso DSNE345I e a guerra dos CCSIDs

Na segunda tela aparece:

DSNE345I WARNING: DB2 DATA CORRUPTION CAN RESULT
FROM THIS SPUFI SESSION BECAUSE THE
CCSID USED BY THE TERMINAL IS NOT THE
SAME AS THE CCSID USED BY SPUFI

TERMINAL CCSID: 37
SPUFI CCSID   : 1047

Esse não é um simples aviso cosmético.

CCSID significa:

Coded Character Set Identifier

Ele identifica a tabela de codificação de caracteres.

No mundo z/OS, “EBCDIC” não é uma única tabela universal. Existem diferentes variantes.

Entre elas:

  • CCSID 37;

  • CCSID 500;

  • CCSID 1047;

  • CCSID 1140.

O terminal está usando CCSID 37, enquanto o SPUFI espera 1047.

Caracteres alfabéticos simples podem aparecer corretamente, mas símbolos especiais podem ocupar posições diferentes.

Os maiores suspeitos são caracteres como:

[
]
{
}
|
\
^
~

Imagine uma expressão SQL com texto:

INSERT INTO TESTE.TABELA
       (DESCRICAO)
VALUES ('ARQUIVO [TEMP]');

Se houver conversão incorreta, os colchetes podem ser gravados como outros símbolos.

Em um SELECT, você pode apenas ver uma saída estranha.

Em um INSERT ou UPDATE, porém, dados incorretos podem ser persistidos.

O que fazer?

O aviso diz:

NOTIFY THE DB2 SYSTEM ADMINISTRATOR

Isso significa que a solução definitiva normalmente envolve revisar:

  • configuração do emulador 3270;

  • code page da sessão;

  • parâmetros do DB2I;

  • CCSID do subsistema;

  • perfil do usuário;

  • configuração do SPUFI.

No emulador TN3270, procure opções relacionadas a:

  • host code page;

  • EBCDIC code page;

  • character set;

  • CCSID;

  • language;

  • keyboard mapping.

Não altere aleatoriamente em produção. Uma mudança incorreta pode resolver um símbolo e quebrar outro.


16. A tela CURRENT SPUFI DEFAULTS

A terceira tela apresenta os parâmetros internos do SPUFI.

CURRENT SPUFI DEFAULTS

Vamos examinar cada um.


17. SQL TERMINATOR

SQL TERMINATOR ===> ;

O ponto e vírgula indica o fim de cada instrução SQL.

Exemplo:

SELECT COUNT(*)
  FROM SYSIBM.SYSTABLES;

Vários comandos:

SELECT CURRENT DATE
  FROM SYSIBM.SYSDUMMY1;

SELECT CURRENT TIME
  FROM SYSIBM.SYSDUMMY1;

Alterando o terminador

Em alguns scripts, especialmente com rotinas SQL PL, o ponto e vírgula também aparece dentro de blocos.

Pode ser conveniente trocar o terminador externo:

SQL TERMINATOR ===> #

Então:

CREATE PROCEDURE TESTE.PROC1()
LANGUAGE SQL
BEGIN
    INSERT INTO TESTE.LOG
    VALUES (CURRENT TIMESTAMP);

    UPDATE TESTE.CONTROLE
       SET STATUS = 'F';
END
#

O # encerra a instrução completa, enquanto os pontos e vírgulas continuam dentro do bloco.


18. ISOLATION LEVEL

Na tela:

ISOLATION LEVEL ===> CS

Os valores mais comuns são:

UR
CS
RS
RR

UR — Uncommitted Read

É a leitura com menor compromisso de consistência.

Permite ler dados que outra transação modificou, mas ainda não confirmou.

Exemplo:

SELECT *
  FROM CORP.MOVIMENTO
 WITH UR;

Vantagens:

  • poucos locks;

  • boa concorrência;

  • útil para relatórios não críticos.

Riscos:

  • dirty read;

  • dados podem desaparecer após rollback;

  • totais podem não representar um estado confirmado.

Use UR para consultas informativas, nunca como base cega para decisões financeiras ou atualizações dependentes.

CS — Cursor Stability

É o valor mostrado na tela.

O Db2 protege a linha atualmente posicionada pelo cursor e libera locks conforme a navegação, dependendo do plano e da execução.

É um bom equilíbrio entre:

  • consistência;

  • concorrência;

  • desempenho.

É muito comum em aplicações online.

RS — Read Stability

Garante maior estabilidade para as linhas qualificadas já lidas.

Evita que elas sejam modificadas de forma conflitante durante a unidade de trabalho.

Pode manter mais locks.

RR — Repeatable Read

É o nível mais restritivo.

A mesma consulta dentro da unidade de trabalho tende a reencontrar um conjunto estável de linhas, de acordo com as regras do isolamento.

Pode gerar:

  • muitos locks;

  • contenção;

  • timeout;

  • deadlock;

  • escalonamento de locks.

Comparação conceitual

IsolamentoConsistênciaConcorrênciaLocks
URbaixamuito altamínimos
CSequilibradaaltamoderados
RSaltamédiamaiores
RRmuito altamenorelevados

19. MAX SELECT LINES

MAX SELECT LINES ===> 250

Esse parâmetro limita a quantidade de linhas exibidas pelo SPUFI.

Ele funciona como um cinto de segurança.

Imagine:

SELECT *
  FROM SYSIBM.SYSCOLUMNS;

Dependendo do ambiente, isso pode retornar milhares de linhas.

O SPUFI interrompe a exibição ao atingir o limite configurado.

Atenção: isso não significa necessariamente que o Db2 sempre acessará apenas 250 linhas em todas as circunstâncias. O limite controla principalmente o processamento e apresentação do resultado pelo SPUFI.

Para consultas grandes, prefira filtros:

SELECT NAME,
       CREATOR,
       TYPE
  FROM SYSIBM.SYSTABLES
 WHERE CREATOR = 'IBMUSER'
 ORDER BY NAME;

20. ALLOW SQL WARNINGS

ALLOW SQL WARNINGS ===> NO

SQL warnings são avisos que não representam necessariamente falha fatal.

O SQLCA pode trazer:

SQLCODE positivo

Exemplos comuns incluem:

  • truncamento;

  • eliminação de valores nulos em agregações;

  • nenhuma linha em certas operações;

  • condições especiais de processamento.

Com NO, o SPUFI pode interromper ou tratar de maneira mais conservadora.

Com YES, ele pode continuar buscando linhas após avisos.

Para aprendizado, deixar NO ajuda a perceber que algo especial ocorreu.


21. CHANGE PLAN NAMES

CHANGE PLAN NAMES ===> NO

O SPUFI executa sob estruturas Db2 previamente definidas, incluindo planos e pacotes do DB2I.

Essa opção permite trabalhar com nomes alternativos em configurações específicas.

Para o programador iniciante, a recomendação é manter:

NO

Alterar planos exige conhecimento de:

  • BIND;

  • PACKAGE;

  • PLAN;

  • COLLECTION;

  • autorização;

  • compatibilidade do ambiente.


22. SQL FORMAT

SQL FORMAT ===> SQL

Esse campo define o tratamento do conteúdo SQL.

As opções podem variar conforme versão e configuração, mas geralmente distinguem formatos como:

  • SQL convencional;

  • SQL com comentários;

  • SQL PL.

Para consultas normais:

SQL

é suficiente.


23. SPACE UNIT

SPACE UNIT ===> TRK

Define a unidade usada para alocar o dataset de saída.

Valores comuns:

TRK
CYL

TRK significa track.

CYL significa cylinder.

Para resultados pequenos, tracks são suficientes.

Para saídas muito grandes, cylinders podem ser mais apropriados.


24. PRIMARY SPACE e SECONDARY SPACE

PRIMARY SPACE   ===> 6
SECONDARY SPACE ===> 5

O espaço primário é alocado inicialmente.

O secundário é solicitado quando o espaço inicial se esgota.

Neste exemplo:

SPACE=(TRK,(6,5))

Conceitualmente:

  • aloque 6 tracks inicialmente;

  • quando necessário, expanda em blocos de 5 tracks.

Muitas extensões pequenas podem causar fragmentação e atingir limites de extents.

Por outro lado, uma alocação primária exagerada desperdiça espaço.

O tamanho ideal depende do volume esperado.


25. RECORD LENGTH

RECORD LENGTH ===> 4092

É o LRECL do dataset de saída.

Como o resultado pode incluir colunas extensas, o SPUFI usa registros largos.

Um VARCHAR(2000) ou a combinação de várias colunas pode exigir linhas grandes.

Se o LRECL for pequeno demais, a saída pode ser truncada ou a alocação pode falhar, dependendo do cenário.


26. BLOCK SIZE

BLOCK SIZE ===> 4096

O BLKSIZE indica o tamanho dos blocos físicos usados na gravação.

Blocos reduzem a quantidade de operações de I/O.

Em alocações modernas, frequentemente usamos:

BLKSIZE=0

para permitir que o sistema determine um valor eficiente.

Na tela do SPUFI, valores predefinidos podem ser usados conforme a configuração local.


27. RECORD FORMAT

RECORD FORMAT ===> VB

VB significa:

Variable Blocked

Os registros possuem tamanho variável e são agrupados em blocos.

Isso é apropriado para resultados SQL, porque uma linha pode ter 20 bytes e outra 800 bytes.

Outros formatos citados na tela:

F
FB
FBA
V
VB
VBA
  • F: fixo;

  • FB: fixo blocado;

  • FBA: fixo blocado com controle ASA;

  • V: variável;

  • VB: variável blocado;

  • VBA: variável blocado com controle ASA.


28. DEVICE TYPE

DEVICE TYPE ===> SYSDA

SYSDA é um nome genérico de unidade DASD.

O sistema e o SMS determinam o volume apropriado.

Em ambientes gerenciados por SMS, vários parâmetros físicos podem ser escolhidos automaticamente por classes de armazenamento.


29. MAX NUMERIC FIELD

MAX NUMERIC FIELD ===> 33

Define a largura máxima usada para apresentar campos numéricos.

Isso evita que números muito extensos destruam o alinhamento da saída.

Por exemplo:

SELECT DECIMAL(12345678901234567890,20,0)
  FROM SYSIBM.SYSDUMMY1;

A configuração controla quanto espaço poderá ser reservado para exibição.


30. MAX CHAR FIELD

MAX CHAR FIELD ===> 80

Define a largura máxima de apresentação das colunas de caracteres.

Imagine uma coluna:

DESCRICAO VARCHAR(1000)

Sem limite, uma única coluna tornaria a saída enorme.

Com máximo 80, a apresentação fica mais administrável.

Atenção: isso pode significar que você não verá todo o conteúdo visualmente na linha formatada.

Quando precisar analisar o valor integral, selecione a coluna isoladamente ou use funções como:

SELECT LENGTH(DESCRICAO),
       SUBSTR(DESCRICAO,1,200)
  FROM TESTE.PRODUTO;

31. COLUMN HEADING

COLUMN HEADING ===> NAMES

Opções comuns:

NAMES
LABELS
ANY
BOTH

NAMES

Usa o nome técnico da coluna.

CUST_ID
CUST_NAME

LABELS

Usa o label definido no catálogo, se existir.

Código do Cliente
Nome do Cliente

BOTH

Pode mostrar nome e label.

Para desenvolvedores, NAMES costuma ser mais útil porque corresponde ao SQL e ao DCLGEN.

Para relatórios destinados a usuários, labels podem ser mais amigáveis.


32. Primeiro laboratório SPUFI: SELECT simples

Crie um membro chamado TESTE01 com:

SELECT CURRENT SERVER    AS SERVIDOR,
       CURRENT DATE      AS DATA_ATUAL,
       CURRENT TIME      AS HORA_ATUAL,
       CURRENT TIMESTAMP AS TIMESTAMP_ATUAL
  FROM SYSIBM.SYSDUMMY1;

Configure:

EDIT INPUT     YES
EXECUTE        YES
AUTOCOMMIT     YES
BROWSE OUTPUT  YES

Pressione Enter.

O fluxo será:

  1. o SPUFI abre o editor;

  2. você confere o SQL;

  3. pressiona PF3;

  4. o Db2 recebe o comando;

  5. o parser verifica a sintaxe;

  6. o otimizador prepara a execução;

  7. a tabela especial é acessada;

  8. o resultado retorna;

  9. o SPUFI formata a saída;

  10. o dataset de saída é aberto.


33. Segundo laboratório: consultar o catálogo

SELECT CREATOR,
       NAME,
       TYPE
  FROM SYSIBM.SYSTABLES
 WHERE CREATOR = 'IBMUSER'
 ORDER BY NAME;

O catálogo Db2 é um conjunto de tabelas que descreve os objetos do banco.

Ele contém informações sobre:

  • tabelas;

  • colunas;

  • índices;

  • tablespaces;

  • pacotes;

  • planos;

  • privilégios;

  • estatísticas.

Consultar o catálogo é como abrir o mapa interno do reino Db2.


34. Terceiro laboratório: UPDATE seguro com ROLLBACK

SELECT CLIENTE_ID,
       STATUS
  FROM TESTE.CLIENTE
 WHERE CLIENTE_ID = 100;

UPDATE TESTE.CLIENTE
   SET STATUS = 'I'
 WHERE CLIENTE_ID = 100;

SELECT CLIENTE_ID,
       STATUS
  FROM TESTE.CLIENTE
 WHERE CLIENTE_ID = 100;

ROLLBACK;

SELECT CLIENTE_ID,
       STATUS
  FROM TESTE.CLIENTE
 WHERE CLIENTE_ID = 100;

Configure:

AUTOCOMMIT ===> NO

A sequência demonstra:

  1. estado inicial;

  2. alteração;

  3. estado dentro da unidade de trabalho;

  4. rollback;

  5. restauração do valor anterior.

Esse é um excelente laboratório para compreender transações.


35. Executando SQL no Db2 por JCL

O SPUFI é interativo, mas o SQL também pode ser executado em batch usando o utilitário DSNTEP2 ou DSNTEP4, dependendo da instalação.

Exemplo:

//SQLBATCH JOB (ACCT),'EXECUTA SQL',
//             CLASS=A,
//             MSGCLASS=X,
//             NOTIFY=&SYSUID
//*
//STEP01   EXEC PGM=IKJEFT01,DYNAMNBR=20
//STEPLIB  DD  DISP=SHR,DSN=DSN.V13R1M0.SDSNLOAD
//SYSTSPRT DD  SYSOUT=*
//SYSPRINT DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//SYSTSIN  DD  *
  DSN SYSTEM(DB9G)
  RUN PROGRAM(DSNTEP2) PLAN(DSNTEP13) -
      LIB('DSN.V13R1M0.RUNLIB.LOAD')
  END
/*
//SYSIN    DD  *
SELECT CURRENT SERVER,
       CURRENT DATE,
       CURRENT TIME
  FROM SYSIBM.SYSDUMMY1;

SELECT COUNT(*) AS TOTAL_TABELAS
  FROM SYSIBM.SYSTABLES;
/*

IKJEFT01

//STEP01 EXEC PGM=IKJEFT01

IKJEFT01 permite executar comandos TSO em batch.

É como criar uma sessão TSO controlada pelo JCL.

DYNAMNBR

DYNAMNBR=20

Reserva capacidade para alocações dinâmicas.

STEPLIB

//STEPLIB DD DISP=SHR,DSN=DSN.V13R1M0.SDSNLOAD

Aponta para a biblioteca de load modules do Db2.

O nome real varia conforme a instalação.

SYSTSIN

DSN SYSTEM(DB9G)

Inicia o command processor do Db2 e conecta ao subsistema DB9G.

RUN PROGRAM(DSNTEP2)

Executa o programa DSNTEP2.

PLAN(DSNTEP13)

Informa o plano associado.

O nome também varia conforme versão e instalação.

LIB('DSN.V13R1M0.RUNLIB.LOAD')

Informa a biblioteca onde o programa será localizado.

SYSIN

Contém os comandos SQL.

Assim, a lógica lembra o SPUFI:

SPUFI                 DSNTEP2
------                -------
Dataset input         SYSIN
Execução interativa   Execução batch
Dataset output        SYSPRINT
Tela ISPF             JES/SDSF

36. JCL usando SQL em dataset externo

Em vez de escrever SQL dentro do JCL:

//SYSIN DD *
SELECT ...
/*

podemos usar um membro:

//SYSIN DD DISP=SHR,DSN=IBMUSER.WORKBOOK.SQL(SELCOPA)

Job completo:

//SQLBATCH JOB (ACCT),'SQL VIA PDS',
//             CLASS=A,
//             MSGCLASS=X,
//             NOTIFY=&SYSUID
//*
//STEP01   EXEC PGM=IKJEFT01,DYNAMNBR=20
//STEPLIB  DD DISP=SHR,DSN=DSN.V13R1M0.SDSNLOAD
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTSIN  DD *
  DSN SYSTEM(DB9G)
  RUN PROGRAM(DSNTEP2) PLAN(DSNTEP13) -
      LIB('DSN.V13R1M0.RUNLIB.LOAD')
  END
/*
//SYSIN    DD DISP=SHR,DSN=IBMUSER.WORKBOOK.SQL(SELCOPA)
//

Essa estrutura permite usar o mesmo membro:

  • no SPUFI;

  • em batch;

  • em processos automatizados;

  • em pipelines;

  • em testes de implantação.


37. Erros comuns e possíveis soluções

SQLCODE -204

Objeto não encontrado.

Exemplo:

SQLCODE = -204

Possíveis causas:

  • tabela inexistente;

  • schema incorreto;

  • nome não qualificado;

  • ambiente errado.

Solução:

SELECT CREATOR,
       NAME
  FROM SYSIBM.SYSTABLES
 WHERE NAME = 'CLIENTE';

Use o nome qualificado:

SELECT *
  FROM CORP.CLIENTE;

SQLCODE -206

Coluna não encontrada.

Possíveis causas:

  • erro de digitação;

  • coluna pertence a outra tabela;

  • alias incorreto.

Verifique:

SELECT NAME,
       COLNO,
       COLTYPE
  FROM SYSIBM.SYSCOLUMNS
 WHERE TBNAME = 'CLIENTE'
   AND TBCREATOR = 'CORP';

SQLCODE -104

Erro de sintaxe.

Exemplo incorreto:

SELECT NOME
  CLIENTE;

Faltou FROM.

Correto:

SELECT NOME
  FROM CLIENTE;

SQLCODE -551

Usuário sem autorização.

Pode faltar:

  • SELECT;

  • INSERT;

  • UPDATE;

  • DELETE;

  • EXECUTE;

  • uso de package ou plan.

A solução deve ser tratada com o administrador de segurança ou DBA.

SQLCODE -811

Um SELECT INTO retornou mais de uma linha.

No SPUFI isso aparece principalmente em testes de SQL que posteriormente serão usados em COBOL.

A consulta deveria retornar uma linha, mas encontrou várias.

Use filtro mais seletivo ou cursor.

SQLCODE -911

Rollback causado por deadlock ou timeout.

O Db2 desfez a unidade de trabalho.

Possíveis ações:

  • reduzir duração da transação;

  • acessar tabelas em ordem consistente;

  • melhorar índices;

  • revisar isolamento;

  • executar commit mais frequente;

  • investigar concorrência.

SQLCODE -913

Deadlock ou timeout sem rollback automático completo em certos contextos.

Exige análise semelhante ao -911.


38. SPUFI e programas COBOL

O SQL testado no SPUFI pode ser levado para um programa COBOL.

SPUFI:

SELECT FIRSTNME,
       LASTNAME
  FROM DSN8C10.EMP
 WHERE EMPNO = '000010';

COBOL:

       EXEC SQL
            SELECT FIRSTNME,
                   LASTNAME
              INTO :WS-FIRST-NAME,
                   :WS-LAST-NAME
              FROM DSN8C10.EMP
             WHERE EMPNO = :WS-EMPNO
       END-EXEC.

A diferença está nas host variables:

:WS-FIRST-NAME
:WS-LAST-NAME
:WS-EMPNO

O SPUFI ajuda a validar:

  • nomes de tabela;

  • nomes de coluna;

  • joins;

  • filtros;

  • funções;

  • acesso esperado.

Mas ele não substitui os testes dentro do programa COBOL, porque o programa ainda envolve:

  • tipos de dados;

  • variáveis indicadoras;

  • SQLCA;

  • cursores;

  • commit;

  • lógica de tratamento de erro;

  • concorrência;

  • package e bind.


39. Curiosidades e easter eggs

O SPUFI é mais “batch” do que parece

Apesar de ser usado interativamente, sua lógica é baseada em arquivos de entrada e saída.

Ele se parece com uma pequena rotina batch controlada por painéis ISPF.

O dataset é parte da documentação

Como o SQL permanece salvo no PDS, ele pode servir como:

  • evidência de teste;

  • histórico;

  • material de treinamento;

  • script reutilizável;

  • base de automação.

O catálogo é o “Google interno” do Db2

Quando você não sabe se uma tabela existe, qual é a coluna, quem criou um índice ou qual package está ligado, o catálogo geralmente possui a resposta.

IEFBR14 não cria datasets sozinho

O programa é apenas uma moldura. A alocação ocorre pela interpretação do JCL.

Um SELECT também pode causar impacto

Muitos iniciantes acreditam que SELECT é sempre inofensivo.

Não é.

Um SELECT ruim pode:

  • fazer tablespace scan;

  • consumir CPU;

  • ler milhões de páginas;

  • ocupar buffer pools;

  • segurar locks;

  • gerar sort;

  • afetar outros usuários.

Leitura também é trabalho.

WITH UR não é magia de desempenho

Ele reduz locking de leitura, mas não corrige:

  • falta de índice;

  • predicado não indexável;

  • join ruim;

  • cardinalidade incorreta;

  • estatísticas antigas.


40. Checklist do Padawan antes de pressionar Enter

Antes de executar:

1. Estou no SSID correto?
2. O dataset de entrada é o membro correto?
3. O output pode ser sobrescrito?
4. O AUTOCOMMIT está adequado?
5. Existe UPDATE, DELETE ou INSERT?
6. O WHERE foi revisado?
7. Testei o filtro com SELECT?
8. O limite de linhas está razoável?
9. Existe aviso de CCSID?
10. Estou autorizado a executar isso?

Para comandos destrutivos, acrescente:

11. Tenho backup ou possibilidade de rollback?
12. Sei quantas linhas serão afetadas?
13. A unidade de trabalho está controlada?
14. Estou fora do horário crítico?
15. O DBA precisa ser avisado?

Conclusão

O SPUFI é uma das ferramentas mais didáticas do ecossistema Db2 for z/OS.

Na superfície, ele parece apenas uma tela para executar SQL. Em profundidade, porém, ele ensina quase todo o vocabulário operacional do mainframe:

  • datasets de entrada e saída;

  • PDS, PDSE e membros;

  • arquivos sequenciais;

  • DCB;

  • RECFM;

  • LRECL;

  • BLKSIZE;

  • espaço primário e secundário;

  • terminadores SQL;

  • planos;

  • pacotes;

  • isolamento;

  • commit e rollback;

  • CCSID;

  • catálogo;

  • SQLCODE;

  • execução interativa;

  • execução batch por JCL.

Para o programador COBOL Padawan, dominar o SPUFI é aprender a conversar diretamente com o Db2 antes de colocar o SQL dentro de um programa.

É nele que você experimenta.

É nele que você erra com segurança — desde que o AUTOCOMMIT esteja corretamente configurado.

É nele que você descobre que um SQL aparentemente simples pode esconder acesso a milhões de linhas.

E é nele que você começa a enxergar o banco não apenas como um lugar onde os dados vivem, mas como um sistema completo de armazenamento, concorrência, transações, segurança e otimização.

No mundo Bellacosa Mainframe, a tela verde nunca é apenas uma tela verde.

Cada campo é uma porta.

Cada parâmetro conta uma história.

Cada mensagem DSNE é um mestre antigo tentando impedir que o Padawan corrompa caracteres, bloqueie uma tabela ou execute um DELETE sem WHERE.

E cada SQLCODE 0 é o Db2 dizendo:

EXECUÇÃO CONCLUÍDA.

A FORÇA DO SQL ESTÁ COM VOCÊ.
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...