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

quarta-feira, 13 de maio de 2026

🔥☕ DB2 COMMANDS NO IBM Z — A “SALA DE CONTROLE” DO MAINFRAME QUE QUASE NINGUÉM DOMINA 💾🚨

 

Bellacosa Mainframe apresenta o Db2 Commands

🔥☕ DB2 COMMANDS NO IBM Z — A “SALA DE CONTROLE” DO MAINFRAME QUE QUASE NINGUÉM DOMINA 💾🚨

Existe uma enorme diferença entre:

  • usar DB2,
    e

  • controlar o DB2.

A maioria dos profissionais conhece:

  • SQL,

  • SELECT,

  • tabelas,

  • índices,

  • packages.

Mas poucos realmente entendem o universo dos:

🔥 DB2 COMMANDS

E é exatamente aí que mora o verdadeiro poder operacional do IBM Z.

Porque quando:

  • o online trava,

  • o batch explode,

  • o CPU dispara,

  • o lock congela produção,

  • o DDF enlouquece,

  • o bufferpool satura,

não é o SQL que salva o ambiente.

É o operador que conhece:

-DISPLAY
-START
-STOP
-RECOVER
-MODIFY
-TRACE

E consegue enxergar o subsystem “por dentro”.


💾 O QUE SÃO DB2 COMMANDS?

Os DB2 Commands são comandos operacionais do Db2 for z/OS usados para:

  • monitoramento,

  • administração,

  • recovery,

  • troubleshooting,

  • tuning,

  • automação,

  • controle do subsystem.

Eles podem ser executados:

  • no SDSF,

  • DB2I,

  • console z/OS,

  • batch,

  • CICS,

  • IMS,

  • TSO,

  • programas autorizados.


🔥 A GRANDE VERDADE

O DB2 no Mainframe não é apenas:

SELECT * FROM CLIENTES

Ele é:

  • locking engine,

  • recovery engine,

  • log manager,

  • memory manager,

  • distributed server,

  • transaction coordinator,

  • storage subsystem.

E os comandos são o “painel de engenharia” desse motor gigantesco.


🚨 O COMANDO MAIS IMPORTANTE: DISPLAY

Quase tudo começa com:

-DISPLAY

ou forma curta:

-DIS

Esse comando possui dezenas de variações.

Cada uma revela uma parte diferente da “anatomia” do DB2.


🔥 DISPLAY THREAD — O ECG DO DB2

Comando

-DIS THREAD(*)

💾 O QUE ELE MOSTRA?

Threads ativas:

  • CICS,

  • batch,

  • DDF,

  • TSO,

  • IMS,

  • utilities.


🧠 O QUE É UMA THREAD?

É uma unidade ativa de execução DB2.

Pense como:

“uma conversa acontecendo agora com o banco”.


🚨 O QUE O DBA ANALISA?

WAIT

Pode indicar:

  • lock,

  • I/O lento,

  • deadlock.


CPU ALTÍSSIMA

Uma única thread pode:

  • consumir MSU,

  • destruir zIIP,

  • travar subsystem.


THREADS ZUMBI

Conexões:

  • abertas,

  • sem commit,

  • esquecidas pela aplicação.


💥 CENÁRIO REAL

Aplicação Java:

  • abre milhares de conexões DDF,

  • não fecha corretamente.

Resultado:

-DIS THREAD(*)

mostra:

  • avalanche de threads,

  • consumo absurdo,

  • risco subsystem.


🔥 DISPLAY DATABASE — A RADIOGRAFIA DO STORAGE LÓGICO

Comando

-DIS DB(*)

ou:

-DIS DATABASE(DBPROD)

💾 O QUE ELE ENTREGA?

Mostra:

  • tablespaces,

  • status,

  • pendências,

  • utilities,

  • recovery,

  • states críticos.


🚨 ESTADOS MAIS IMPORTANTES

EstadoSignificado
RWRead/Write
STOPParado
RORead Only
UTUtility rodando
COPYBackup pendente
CHKPCheck pending
RECPRecovery pending

💣 RECP — O PESADELO

Recovery Pending significa:

o objeto não pode ser usado.

Pode ocorrer após:

  • LOAD falho,

  • recover incompleto,

  • corrupção.


🔥 DISPLAY BUFFERPOOL — O RAIO-X DA MEMÓRIA

Comando

-DIS BPOOL(*)

💾 O QUE É BUFFERPOOL?

É o cache inteligente do DB2.

Armazena:

  • páginas,

  • índices,

  • dados acessados recentemente.


🚨 O QUE O SYSPOG OBSERVA?

HIT RATIO

Baixo hit ratio:

  • mais I/O,

  • mais disco,

  • mais CPU.


PGFIX(NO)

Pode gerar:

  • paging,

  • overhead CPU.


VPSIZE PEQUENO

Causa:

  • sync I/O,

  • gargalo físico.


💥 A VERDADE INCÔMODA

Muitos problemas “de SQL” são:

problemas de bufferpool.


🔥 DISPLAY DDF — O PULMÃO DISTRIBUÍDO

Comando

-DIS DDF

💾 O QUE É DDF?

Distributed Data Facility.

Responsável por:

  • JDBC,

  • APIs,

  • microservices,

  • Linux,

  • cloud,

  • aplicações externas.


🚨 O QUE PODE DAR ERRADO?

CONDBAT ESGOTADO

Muitas conexões simultâneas.


THREADS DISTRIBUÍDAS PRESAS

Pode indicar:

  • problema TCP/IP,

  • timeout,

  • Java pool ruim.


DDF STOPPED

🔥 desastre moderno.

APIs param imediatamente.


🔥 DISPLAY LOCKS — O DETETIVE DO CRIME

Comando

-DIS LOCKS

💾 O QUE ELE REVELA?

  • locks,

  • waits,

  • deadlocks,

  • recursos presos.


💥 CENÁRIO CLÁSSICO

Batch:

UPDATE CLIENTES

sem commit adequado.

Resultado:

  • CICS trava,

  • PIX para,

  • ATM congela.

DBA roda:

-DIS LOCKS

e encontra:

  • o “assassino” da produção 😄


🔥 DISPLAY UTILITY — O CENTRO CIRÚRGICO

Comando

-DIS UTIL(*)

💾 UTILITIES IMPORTANTES

UtilityFunção
REORGReorganização
COPYBackup
LOADCarga
RUNSTATSEstatísticas
RECOVERRecovery

🚨 O QUE O DBA PROCURA?

Utility parada

Pode indicar:

  • falta espaço,

  • lock,

  • erro I/O.


REORG ETERNA

Talvez:

  • tablespace gigantesca,

  • SORT insuficiente,

  • disco saturado.


🔥 DISPLAY LOG — O DNA DO DB2

Comando

-DIS LOG

💾 O QUE ANALISAR?

  • active logs,

  • archive logs,

  • checkpoints,

  • offload,

  • dual logging.


🚨 QUANDO O LOG SOFRE…

O subsystem inteiro sofre:

  • commits lentos,

  • rollback lento,

  • recover piora,

  • throughput cai.


💣 O LOG É O “SISTEMA NERVOSO” DO DB2

Sem log saudável:

não existe integridade transacional.


🔥 ADVISORY STATES — O DB2 TENTANDO TE AVISAR

Comando

-DIS DB(*) SPACENAM(*) ADVISORY

💾 O QUE É ADVISORY?

O DB2 dizendo:

“isso ainda funciona… mas vai piorar.”


🚨 AREO*

Advisory REORG Pending.

O DB2 recomenda:

REORG

🚨 ARBDP

Advisory Rebuild Pending.

Índice precisa rebuild.


💥 O QUE ACONTECE SE IGNORAR?

  • access path degrada,

  • CPU sobe,

  • scans aumentam,

  • overflow explode.


🔥 LPL — QUANDO O DB2 ENTRA EM MODO SOBREVIVÊNCIA

Comando

-DIS DB(DBPROD) SPACENAM(*) LPL

💾 LPL = LOGICAL PAGE LIST

Lista páginas:

  • danificadas,

  • inconsistentes,

  • problemáticas.


🚨 COMO ISSO ACONTECE?

  • falha I/O,

  • corrupção,

  • queda sistema,

  • escrita interrompida.


💥 IMPACTO

  • SQLCODE,

  • abends,

  • indisponibilidade,

  • recover obrigatório.


🔥 START E STOP — O “PODER ABSOLUTO”

START DATABASE

-START DB(DBPROD)

Disponibiliza objeto.


STOP DATABASE

-STOP DB(DBPROD)

Indisponibiliza objeto.


🚨 USADO EM:

  • maintenance,

  • recovery,

  • migração,

  • REORG,

  • troubleshooting.


💣 UM STOP ERRADO EM PRODUÇÃO…

…vira reunião de crise 😄


🔥 CANCEL THREAD — O BOTÃO VERMELHO

Comando

-CANCEL THREAD(token)

💾 PARA QUE SERVE?

Mata:

  • thread travada,

  • SQL infinito,

  • aplicação congelada.


🚨 RISCO

Cancelar thread:

  • pode gerar rollback gigante,

  • lock storm,

  • pressão de log.


🔥 TRACE — O MODO CSI DO DB2

Comando

-START TRACE

💾 O QUE É TRACE?

Captura:

  • eventos internos,

  • IFCIDs,

  • waits,

  • SQL,

  • locking,

  • performance.


🚨 PROBLEMA

Trace excessivo:

  • consome CPU,

  • gera overhead,

  • pode piorar produção.


🔥 DSN — A PORTA DE ENTRADA DO DB2

Comando

DSN SYSTEM(DB9G)

💾 O QUE ELE FAZ?

Inicia sessão DB2 sob TSO.


🚨 SE DER ERRO

IKJ56500I COMMAND DSN NOT FOUND

normalmente:

  • SDSNLOAD ausente,

  • STEPLIB errada.


💾 SDSNLOAD — O “CORAÇÃO” DO DB2 BATCH

Contém:

  • DSN,

  • utilities,

  • runtime,

  • SPUFI,

  • módulos DB2.

Sem SDSNLOAD:

não existe DB2 batch.


🔥 IKJEFT01 — O CANIVETE SUÍÇO

Programa clássico usado para:

  • batch DB2,

  • SPUFI,

  • RUN,

  • BIND,

  • REBIND,

  • comandos DISPLAY.


💥 EXEMPLO REAL

//STEP1 EXEC PGM=IKJEFT01
//STEPLIB DD DISP=SHR,DSN=DSN910.SDSNLOAD
//SYSTSIN DD *
 DSN SYSTEM(DB9G)
 -DIS THREAD(*)
 END
/*

🔥 O QUE SEPARA O OPERADOR COMUM DO VETERANO

O iniciante:

  • olha dashboard.

O veterano:

  • olha threads,

  • logs,

  • locks,

  • utilities,

  • bufferpools,

  • advisory states,

  • DDF,

  • recovery.

Porque ele sabe:

o DB2 SEMPRE avisa antes do desastre.


☕ O VERDADEIRO PODER DO MAINFRAME

No mundo distribuído:

  • reiniciam servidor.

No IBM Z:

  • analisam causa raiz.

E os DB2 Commands continuam sendo:

  • rápidos,

  • leves,

  • resilientes,

  • precisos,

  • praticamente eternos.

Décadas depois…
o terminal 3270 ainda continua revelando tudo para quem sabe ler os sinais do subsystem DB2 💾🔥

terça-feira, 12 de maio de 2026

🔥☕ DB2 COMMANDS AVANÇADOS NO IBM Z — O QUE ESSES COMANDOS REALMENTE REVELAM SOBRE A SAÚDE DO MAINFRAME 💾🚨

 

Bellacosa Mainframe Db2 avançado para um sysprog

🔥☕ DB2 COMMANDS AVANÇADOS NO IBM Z — O QUE ESSES COMANDOS REALMENTE REVELAM SOBRE A SAÚDE DO MAINFRAME 💾🚨

A tela que você mostrou agora já entra em um nível MUITO mais avançado do DB2 z/OS.

Aqui não estamos mais falando apenas de:

-DIS THREAD(*)

Agora estamos entrando no território de:

  • troubleshooting pesado,

  • análise recovery,

  • pending states,

  • advisory states,

  • limbo pages,

  • tablespaces problemáticas,

  • diagnóstico profundo de storage DB2.

Esses são comandos típicos de:

  • DBA senior,

  • Sysprog,

  • suporte de produção crítica,

  • recovery team,

  • performance specialists.


🔥 CMD 1 — O “RAIO-X GLOBAL” DAS DATABASES

Comando

-DIS DB(*) SP(*) RESTRICT LIMIT(*)

💾 O QUE ELE FAZ?

Esse comando:

  • percorre TODAS as databases,

  • mostra TODOS os spaces,

  • filtra objetos em estado RESTRICT,

  • sem limite de quantidade.


🧠 EXPLICAÇÃO DOS PARÂMETROS

ParâmetroSignificado
DB(*)Todas as databases
SP(*)Todos os spaces
RESTRICTMostra objetos restritos
LIMIT(*)Sem limite de retorno

🚨 O QUE É RESTRICT?

Estados RESTRICT indicam:

  • objeto parcialmente indisponível,

  • utility incompleta,

  • recovery necessário,

  • inconsistência operacional.


💥 CENÁRIOS REAIS

Após falha de REORG

Você pode encontrar:

RESTRICT

indicando:

  • tablespace inconsistente.


Após falha LOAD

O objeto pode:

  • aceitar leitura,

  • mas bloquear update.


🔥 O QUE O SYSPOG PROCURA?

  • objetos presos,

  • utilities abandonadas,

  • estados recovery,

  • pendências ocultas.


🔥 CMD 2 — DISPLAY THREAD

Comando

-DIS THREAD(*)

💾 O COMANDO MAIS IMPORTANTE DO DB2

Esse comando mostra:

  • threads ativas,

  • conexões CICS,

  • batch,

  • TSO,

  • DDF,

  • waits,

  • CPU.


🚨 O QUE ANALISAR?

WAIT

Pode indicar:

  • lock,

  • I/O lento,

  • deadlock.


THREAD ZUMBI

Thread ativa sem progresso:

  • aplicação travada,

  • commit preso,

  • problema rede DDF.


THREAD MASSIVA

Uma única thread:

  • consumindo CPU absurda,

  • SQL ruim,

  • tablescan gigante.


🔥 CMD 3 — DISPLAY DATABASE OVERVIEW

Comando

-DISPLAY DATABASE(DSN8D13A) SPACE(*) OVERVIEW

💾 O QUE É OVERVIEW?

Mostra uma visão resumida:

  • status,

  • pendências,

  • utilities,

  • estados críticos.

Sem detalhar cada partição profundamente.


🎯 OBJETIVO

Obter diagnóstico rápido.

Muito usado em:

  • incidentes,

  • bridge call,

  • troubleshooting urgente.


💥 O QUE APARECE?

CampoSignificado
RWRead Write
RORead Only
STOPParado
UTUtility
CHKPCheck Pending

🚨 EXEMPLO REAL

Se aparecer:

UTRO

pode indicar:

  • utility rodando,

  • objeto somente leitura.


🔥 CMD 4 — LIST TABLESPACES SHOW DETAIL

Comando

-LIST TABLESPACES SHOW DETAIL

💾 O QUE ELE FAZ?

Lista:

  • tablespaces,

  • atributos,

  • detalhes físicos,

  • status internos.


🧠 INFORMAÇÕES IMPORTANTES

Pode mostrar:

  • DSSIZE,

  • PRIQTY,

  • SECQTY,

  • SEGSIZE,

  • bufferpool,

  • locksize,

  • partitioning.


🚨 MUITO USADO PARA

  • capacity planning,

  • tuning,

  • growth analysis,

  • storage troubleshooting.


💥 O DBA PROCURA

Tablespace gigante

Pode exigir:

  • reparticionamento,

  • compressão,

  • REORG.


Bufferpool inadequado

Pode gerar:

  • I/O excessivo,

  • CPU alta.


🔥 CMD 5 — DISPLAY DATABASE COM ADVISORY

Comando

-DISPLAY DATABASE(DSN8D13A) SPACENAM(*) LIMIT(*) ADVISORY(ARBDP,AREO*)

💾 ESSE É PESADO 😄

Aqui entramos em:

estados advisory.


🧠 O QUE É ADVISORY?

Não significa falha imediata.

Significa:

  • DB2 recomenda ação corretiva.


🚨 ARBDP

Advisory Rebuild Pending

Indica:

  • índice precisa rebuild.

Pode ocorrer:

  • após recover,

  • após falha,

  • inconsistência index.


🚨 AREO*

Advisory REORG Pending

O DB2 recomenda:

REORG

💥 POR QUE ISSO IMPORTA?

Mesmo funcionando:

  • performance degrada,

  • overflow aumenta,

  • access path piora,

  • CPU sobe.


🔥 SINTOMA CLÁSSICO

Aplicação:

“está ficando lenta”

DBA roda:

-DISPLAY DATABASE ... ADVISORY

e encontra:

AREO*

🔥 CMD 6 — DISPLAY DATABASE GLOBAL ADVISORY

Comando

-DISPLAY DATABASE(*) SPACENAM(*) LIMIT(*) ADVISORY

💾 O “CAÇA-PROBLEMAS” GLOBAL

Esse comando varre:

TODO o subsystem DB2.


🚨 O QUE ELE PROCURA?

  • AREO

  • ARBDP

  • RBDP

  • CHKP

  • COPY

  • pending states


💥 MUITO USADO EM:

  • health checks,

  • automação,

  • auditoria,

  • pré-manutenção,

  • pré-upgrade.


🔥 EM GRANDES BANCOS

Esse comando roda:

  • automaticamente,

  • várias vezes ao dia.


🔥 CMD 7 — LPL (Logical Page List)

Comando

-DISPLAY DATABASE(DSN8D13A) SPACENAM(*) LIMIT(*) LPL

💾 AGORA ENTRAMOS NO MODO “CIRURGIA CARDÍACA” 😄

LPL =

Logical Page List.


🚨 O QUE É LPL?

Lista páginas:

  • danificadas,

  • inconsistentes,

  • com problema recovery.


💥 COMO UMA PÁGINA ENTRA EM LPL?

  • falha I/O,

  • corrupção,

  • abend,

  • falha hardware,

  • escrita incompleta,

  • recover interrompido.


🚨 IMPACTO

Objetos em LPL:

  • podem ficar indisponíveis,

  • gerar SQLCODE,

  • causar abends,

  • travar aplicações.


🔥 O DBA PROCURA

Quantidade de páginas afetadas

Se poucas:

  • recover localizado.

Se muitas:

  • desastre potencial.


💣 COMANDOS ASSOCIADOS

Após detectar LPL:

Pode ser necessário:

-RECOVER
-START DB(...)
-STOP DB(...)

🔥 O QUE ESSA TELA ENSINA?

Essa tela é praticamente:

um mapa de sobrevivência do DB2.

Ela mostra:

  • diagnóstico,

  • recovery,

  • saúde,

  • inconsistência,

  • tuning,

  • pending states,

  • gargalos ocultos.


☕ A GRANDE VERDADE DO DB2 z/OS

O DB2 raramente “morre do nada”.

Antes do desastre ele:

  • avisa,

  • marca pending,

  • cria advisory,

  • registra utility,

  • sinaliza REORG,

  • aponta rebuild,

  • mostra waits,

  • denuncia locks.

O problema é:

pouca gente olha os comandos 😄


🚀 O QUE UM SYSPOG VETERANO FARIA?

Sequência clássica:

-DIS THREAD(*)
-DIS DB(*) SP(*) RESTRICT
-DIS UTIL(*)
-DIS LOG
-DIS BPOOL(*)
-DIS DATABASE(*) ADVISORY

Em poucos minutos ele consegue enxergar:

  • saúde do subsystem,

  • pressão operacional,

  • risco recovery,

  • gargalos,

  • objetos degradados,

  • ameaças à produção.

E isso…
diretamente do velho terminal 3270 💾🔥

sábado, 11 de outubro de 2025

🔥☕ DSN COMMAND E SUBCOMMANDS NO DB2 z/OS — A PORTA DE ENTRADA DO UNIVERSO DB2 NO MAINFRAME IBM Z 💾🚨

 

Bellacosa Mainframe configurado o Db2

☕ Um Café no Bellacosa Mainframe

🔥☕ DSN COMMAND E SUBCOMMANDS NO DB2 z/OS — A PORTA DE ENTRADA DO UNIVERSO DB2 NO MAINFRAME IBM Z 💾🚨

Se existe um comando que praticamente todo programador COBOL/DB2, DBA ou sysprog encontra cedo ou tarde no Mainframe, esse comando é:

DSN

O DSN é o processador de comandos do Db2 no z/OS e funciona como um processador TSO.
Em outras palavras:

ele abre uma sessão de comunicação direta com o DB2.

É a partir dele que:

  • executamos SQL,

  • fazemos BIND,

  • REBIND,

  • RUN,

  • SPUFI,

  • administramos packages,

  • executamos programas DB2,

  • controlamos aplicações.


🔥 O QUE É O COMANDO DSN?

Tradução

O comando TSO DSN inicia uma sessão DSN.


💾 EXEMPLO BÁSICO

No prompt TSO:

READY

digite:

DSN SYSTEM(DB9G)

🚀 O QUE ACONTECE?

Você entra no ambiente DB2:

DSN

Agora:

  • comandos DB2,

  • SQL,

  • BIND,

  • RUN

podem ser executados.


🧪 LABORATÓRIO 1 — ENTRANDO NO DB2

Passo 1

No TSO:

DSN SYSTEM(DB9G)

Passo 2

Você verá:

DSN

Passo 3

Teste um comando:

-DIS THREAD(*)

Passo 4

Saia da sessão:

END

🔥 END COMMAND

“Saindo do universo DB2”

Tradução

O subcomando END termina a sessão DSN e retorna ao TSO.


💾 EXEMPLO

END

🚀 RESULTADO

Você volta ao:

READY

🔥 IMPORTANTE — FOREGROUND E BACKGROUND

Os subcomandos DSN podem rodar:

  • foreground (interativo),

  • background (batch JCL).

Exceto:

SPUFI

que roda apenas no foreground ISPF.


🔥 ABEND

“Forçar um crash controlado”

Tradução

O subcomando ABEND termina a sessão DSN com abend X'04E'.


🚨 IMPORTANTE

IBM diz claramente:

use apenas sob orientação do suporte IBM.


💾 PARA QUE SERVE?

Diagnóstico profundo:

  • dumps,

  • análise interna,

  • debugging DB2.


🚨 EXEMPLO

ABEND

💥 RESULTADO

Gera:

  • dump,

  • encerramento anormal,

  • diagnóstico técnico.


🔥 BIND PACKAGE

“Criando o package executável do DB2”

Tradução

Constrói um package de aplicação.

O DB2:

  • registra descrição no catálogo,

  • salva package no directory,

  • remove versões antigas.


💾 O QUE É PACKAGE?

Package contém:

  • SQL compilado,

  • access path,

  • metadata otimizada.


🧪 LABORATÓRIO 2 — BIND PACKAGE

Passo 1 — Pré-compilar COBOL DB2

Gerar DBRM.


Passo 2 — Entrar no DSN

DSN SYSTEM(DB9G)

Passo 3 — Executar bind

BIND PACKAGE(MYCOLL) MEMBER(PROG1)
      ACTION(REPLACE)
      VALIDATE(BIND)

🚀 RESULTADO

DB2 cria:

  • package executável,

  • access path SQL.


🚨 ERROS COMUNS

SQLCODE -805

Package não encontrado.


AUTH FAILURE

Sem privilégio BIND.


🔥 BIND PLAN

“Criando o plano de execução da aplicação”

Tradução

Constrói um application plan.

Todo programa DB2 precisa de um PLAN para:

  • alocar recursos,

  • executar SQL.


💾 RELAÇÃO PACKAGE vs PLAN

ItemFunção
PACKAGESQL compilado
PLANEstrutura execução

🧪 LABORATÓRIO 3 — BIND PLAN

Passo 1

DSN SYSTEM(DB9G)

Passo 2

BIND PLAN(PLAN1)
     PKLIST(MYCOLL.*)

🚀 RESULTADO

Plano criado associando packages.


🔥 BIND QUERY

“Congelando access paths”

Tradução

Lê informações da:

DSN_USERQUERY_TABLE

e controla bind options/access paths.


💾 PARA QUE SERVE?

Estabilizar performance SQL.

Muito usado para:

  • evitar regressão,

  • preservar access path.


💥 CENÁRIO REAL

Após upgrade DB2:

  • SQL ficou pior.

DBA usa:

BIND QUERY

para manter plano antigo.


🔥 BIND SERVICE

“Criando REST Services no DB2”

Tradução

Cria package representando REST Service DB2.


💾 IMPORTÂNCIA MODERNA

Permite:

  • APIs REST,

  • integração cloud,

  • microservices,

  • mobile.


🧪 EXEMPLO

BIND SERVICE(MYREST)

🔥 DCLGEN

“O gerador mágico de estruturas COBOL”

Tradução

Produz:

  • DECLARE TABLE SQL,

  • estrutura COBOL/PL1/C.


💾 O QUE ELE GERA?

Exemplo:

01 CLIENTE.
   05 CLI-ID       PIC S9(9) COMP.
   05 CLI-NOME     PIC X(30).

🧪 LABORATÓRIO 4 — DCLGEN

Passo 1

DSN SYSTEM(DB9G)

Passo 2

DCLGEN TABLE(CLIENTES)
       LIBRARY('USER.COPYLIB')
       ACTION(REPLACE)

🚀 RESULTADO

DB2 gera:

  • copybook COBOL,

  • DECLARE TABLE.


🔥 FREE PACKAGE

“Apagando packages antigos”

Tradução

Remove:

  • versões específicas,

  • collections inteiras,

  • packages antigos.


🧪 EXEMPLO

FREE PACKAGE(MYCOLL.PROG1)

🚨 CUIDADO

Se apagar package em produção:

SQLCODE -805

🔥 FREE PLAN

“Removendo plans”

Tradução

Apaga application plans do DB2.


🧪 EXEMPLO

FREE PLAN(PLANOLD)

🚨 IMPACTO

Aplicações associadas:

  • param imediatamente.


🔥 REBIND PACKAGE

“Reotimizando SQL sem recompilar”

Tradução

Rebind package após mudanças que afetam package sem alterar SQL.


💾 PARA QUE SERVE?

Muito usado após:

  • RUNSTATS,

  • upgrade DB2,

  • mudança índice,

  • tuning.


🧪 LABORATÓRIO 5 — REBIND PACKAGE

Passo 1

REBIND PACKAGE(MYCOLL.PROG1)

🚀 RESULTADO

DB2:

  • recalcula access path,

  • reotimiza SQL.


🚨 PERIGO

Às vezes:

  • performance piora 😄


🔥 REBIND PLAN

“Atualizando plans sem recriar”

Tradução

Rebind application plan após alterações atributos.


🧪 EXEMPLO

REBIND PLAN(PLAN1)

🔥 RUN

“Executando programa DB2”

Tradução

Executa aplicação contendo SQL.


🧪 LABORATÓRIO 6 — RUN COBOL DB2

Passo 1

DSN SYSTEM(DB9G)

Passo 2

RUN PROGRAM(PROGCOB)
    PLAN(PLAN1)
    LIB('USER.LOADLIB')

🚀 RESULTADO

Programa COBOL executado sob DB2.


🔥 SPUFI

“O SQL interativo clássico do Mainframe”

Tradução

Executa SQL usando entrada arquivo.


💾 O QUE É SPUFI?

SQL Processor Using File Input.

Ferramenta clássica DB2.


🧪 LABORATÓRIO 7 — SPUFI

Passo 1

Entrar no DB2I.


Passo 2

Selecionar:

SPUFI

Passo 3

Executar:

SELECT *
FROM SYSIBM.SYSTABLES
FETCH FIRST 10 ROWS ONLY;

🚀 RESULTADO

DB2 retorna linhas SQL.


🔥 O QUE SEPARA O PROGRAMADOR COBOL DO ESPECIALISTA DB2?

O iniciante:

  • escreve SQL.

O especialista:

  • entende:

    • BIND,

    • PLAN,

    • PACKAGE,

    • REBIND,

    • RUN,

    • DCLGEN,

    • access path,

    • runtime DB2.


💣 A GRANDE VERDADE DO DB2

O SQL é apenas:

a superfície.

O verdadeiro motor do DB2 vive:

  • nos packages,

  • nos plans,

  • nos binds,

  • nos traces,

  • no optimizer,

  • no runtime DSN.

E entender os subcomandos DSN é praticamente:

aprender a conversar diretamente com o coração do DB2 no IBM Z 💾🔥


quinta-feira, 9 de outubro de 2025

🔥☕ DB2 COMMANDS AVANÇADOS NO IBM Z — TRADUÇÃO, EXPLICAÇÃO E LABORATÓRIO PASSO A PASSO PARA SYSPOGS E DBAs 💾🚨

 

Bellacosa Mainframe mergulhas em comandos avançados do Db2

🔥☕ DB2 COMMANDS AVANÇADOS NO IBM Z — TRADUÇÃO, EXPLICAÇÃO E LABORATÓRIO PASSO A PASSO PARA SYSPOGS E DBAs 💾🚨

Os comandos DB2 são usados para controlar praticamente todo o ambiente operacional do Db2 for z/OS. Eles podem ser executados via:

  • console z/OS,

  • TSO,

  • SDSF,

  • DB2I,

  • CICS,

  • IMS,

  • batch JCL,

  • programas autorizados.

Mas a grande verdade é:

esses comandos são muito mais do que “comandos”.

Eles são:

  • sensores,

  • diagnósticos,

  • controles cirúrgicos,

  • mecanismos de sobrevivência do subsystem.


🔥 -DISPLAY THREAD

“Mostre quem está vivo dentro do DB2”

Tradução

Exibe informações sobre threads ativas do Db2.


💾 O QUE É UMA THREAD?

Thread é:

  • uma conexão ativa,

  • uma unidade de execução,

  • uma conversa em andamento com o DB2.

Pode vir de:

  • CICS,

  • batch,

  • DDF,

  • Java,

  • IMS,

  • TSO.


🧪 PASSO A PASSO

Passo 1 — Entrar no painel DB2

Digite:

DSN SYSTEM(DB9G)

Passo 2 — Executar comando

-DIS THREAD(*)

Passo 3 — Analisar saída

Você verá:

  • THREADID

  • STATUS

  • PLAN

  • AUTHID

  • CPU

  • WAIT


🚨 O QUE OBSERVAR?

WAIT

Pode indicar:

  • lock,

  • I/O lento,

  • deadlock.


CPU muito alta

Pode indicar:

  • SQL ruim,

  • scan massivo,

  • aplicação travada.


💥 EXEMPLO REAL

Sistema PIX lento.

Você executa:

-DIS THREAD(*)

e encontra:

  • thread Java com milhões de gets,

  • CPU disparando,

  • WAIT=LCK.

Resultado:

lock contention distribuído.


🔥 -DISPLAY DATABASE

“A radiografia do storage lógico”

Tradução

Exibe informações de status das databases Db2.


🧪 PASSO A PASSO

Passo 1

-DIS DB(DBPROD)

Passo 2 — Expandir spaces

-DIS DB(DBPROD) SPACENAM(*)

💾 O QUE APARECE?

  • tablespaces,

  • indexspaces,

  • status,

  • pendências,

  • utilities,

  • recovery states.


🚨 STATUS IMPORTANTES

StatusSignificado
RWRead Write
RORead Only
STOPParado
UTUtility ativa
RECPRecovery Pending
CHKPCheck Pending

💥 EXEMPLO REAL

Após LOAD falho:

STATUS=RECP

O objeto:

  • não aceita acesso,

  • exige recovery.


🔥 -DISPLAY BUFFERPOOL

“O raio-x da memória do DB2”

Tradução

Exibe o status atual dos buffer pools ativos ou inativos.


💾 O QUE É BUFFERPOOL?

Cache inteligente do DB2.

Armazena:

  • páginas,

  • índices,

  • dados frequentemente acessados.


🧪 PASSO A PASSO

Mostrar todos

-DIS BPOOL(*)

Mostrar detalhe

-DIS BPOOL(BP0) DETAIL

🚨 O QUE ANALISAR?

HIT RATIO

Baixo:

  • excesso de disco,

  • I/O alto,

  • CPU alta.


VPSIZE

Muito pequeno:

  • gargalo memória.


PGFIX(NO)

Pode gerar:

  • paging,

  • overhead CPU.


💥 EXEMPLO REAL

Batch lento.

DBA executa:

-DIS BPOOL(*)

e descobre:

  • hit ratio despencando,

  • BP saturado.


🔥 -DISPLAY DDF

“O pulmão das conexões distribuídas”

Tradução

Exibe informações sobre o status e configuração do DDF.


💾 O QUE É DDF?

Distributed Data Facility.

Responsável pelas conexões:

  • JDBC,

  • APIs,

  • Linux,

  • cloud,

  • microservices.


🧪 PASSO A PASSO

Passo 1

-DIS DDF

Passo 2 — Verificar

  • STATUS

  • CONDBAT

  • threads distribuídas

  • localização remota


🚨 ALERTAS

CONDBAT saturado

Excesso conexões.


DDF STOPPED

APIs param imediatamente.


💥 EXEMPLO REAL

Aplicação Java:

  • abre milhares de conexões.

Resultado:

DDF THREAD LIMIT REACHED

🔥 -DISPLAY LOCKS

“O detetive do crime em produção”

Tradução

Exibe locks e claims mantidos por threads ativas.


🧪 PASSO A PASSO

Passo 1

-DIS LOCKS

Passo 2 — Procurar

  • lock owner,

  • waiting threads,

  • lock type.


🚨 CENÁRIO CLÁSSICO

Batch:

UPDATE MASSIVO

sem commit.

Resultado:

  • online trava,

  • CICS para.


💥 O DBA ENCONTRA

WAIT=LCK

🔥 -DISPLAY LOG

“O DNA transacional do DB2”

Tradução

Exibe informações sobre active logs e checkpoints.


🧪 PASSO A PASSO

Passo 1

-DIS LOG

Passo 2 — Analisar

  • active logs,

  • archive logs,

  • offload,

  • checkpoints.


🚨 RISCOS

Log cheio

Pode:

  • parar commits,

  • travar subsystem,

  • gerar degradação severa.


💥 EXEMPLO REAL

Sistema:

  • commits lentos,

  • rollback gigante.

DBA verifica:

-DIS LOG

e encontra:

  • pressão de active logs.


🔥 -DISPLAY UTILITY

“O centro cirúrgico do DB2”

Tradução

Exibe status das utilities Db2.


🧪 PASSO A PASSO

Passo 1

-DIS UTIL(*)

Passo 2 — Procurar

  • REORG,

  • COPY,

  • LOAD,

  • RUNSTATS,

  • RECOVER.


🚨 O QUE PODE DAR ERRADO?

REORG presa

Pode indicar:

  • lock,

  • I/O lento,

  • SORT insuficiente.


🔥 -CANCEL THREAD

“O botão vermelho do DBA”

Tradução

Cancela processamento de threads locais ou distribuídas.


🧪 PASSO A PASSO

Passo 1 — Identificar thread

-DIS THREAD(*)

Passo 2 — Cancelar

-CANCEL THREAD(token)

🚨 CUIDADO

Cancelar thread:

  • pode gerar rollback gigantesco,

  • pressão de log,

  • lock storm.


🔥 -START DATABASE

“Trazer o objeto de volta à vida”

Tradução

Torna a database disponível para uso.


🧪 PASSO A PASSO

Passo 1

-START DB(DBPROD)

Passo 2 — Confirmar

-DIS DB(DBPROD)

🔥 -STOP DATABASE

“Parar o coração do objeto”

Tradução

Torna objetos indisponíveis para aplicações.


🧪 PASSO A PASSO

Passo 1

-STOP DB(DBPROD)

Passo 2 — Validar

STATUS=STOP

🚨 IMPACTO REAL

Se parar database crítica:

  • PIX para,

  • ATM trava,

  • APIs falham.


🔥 -ARCHIVE LOG

“Forçar rotação do log”

Tradução

Fecha active log atual e abre próximo disponível.


🧪 EXEMPLO

-ARCHIVE LOG

💾 USO REAL

Muito usado:

  • antes backup,

  • antes maintenance,

  • troubleshooting log.


🔥 -START TRACE

“Modo CSI do DB2”

Tradução

Inicia traces Db2.


🧪 EXEMPLO

-START TRACE(PERFM)

🚨 RISCO

Trace excessivo:

  • aumenta CPU,

  • gera overhead.


🔥 -MODIFY DDF

“Alterar DDF online”

Tradução

Modifica status/configuração do DDF.


🧪 EXEMPLO

-MODIFY DDF PKGREL(COMMIT)

💾 USO

Ajuste:

  • threads distribuídas,

  • comportamento JDBC,

  • tuning online.


🔥 O QUE UM SYSPOG VETERANO FAZ?

Sequência clássica:

-DIS THREAD(*)
-DIS DB(*)
-DIS LOCKS
-DIS BPOOL(*)
-DIS DDF
-DIS LOG
-DIS UTIL(*)

💣 O QUE ELE CONSEGUE VER?

  • gargalos,

  • locks,

  • CPU,

  • memória,

  • recovery,

  • corrupção,

  • pressão DDF,

  • degradação,

  • risco subsystem.


☕ O GRANDE SEGREDO DO IBM Z

No Mainframe:

  • tudo deixa rastros,

  • tudo gera sinais,

  • tudo pode ser analisado.

O verdadeiro especialista não é quem sabe apenas SQL.

É quem consegue olhar um:

-DISPLAY THREAD

e entender:

a saúde inteira do negócio em produção 💾🔥

sexta-feira, 26 de agosto de 2022

DB2 COMMANDS sem Mistérios: do Primeiro -DISPLAY ao JCL de Manutenção

 

Bellacosa Mainframe e o db2 commands


☕ Um Café no Bellacosa Mainframe

DB2 COMMANDS sem Mistérios: do Primeiro -DISPLAY ao JCL de Manutenção

Imagine a cena, jovem Padawan do COBOL.

São 2h17 da madrugada. O processamento batch que atualiza milhões de registros de clientes está parado. O operador informa que o programa terminou com SQLCODE -904. O desenvolvedor revisa o SELECT, procura vírgula fora do lugar, confere as host variables, examina a SQLCA e recompila o programa.

Nada parece errado.

Nesse momento, o DBA abre o DB2I, entra no painel DB2 COMMANDS e executa:

-DIS DB(DSN00122) SPACENAM(ALUNOST1) RESTRICT

A resposta revela:

STATUS = COPY

O programa COBOL não estava com defeito. O table space estava em uma condição restritiva.

Essa é uma das primeiras grandes lições do universo Db2 for z/OS:

Nem todo erro recebido pelo programa nasceu dentro do programa.

O COBOL é apenas um dos viajantes dessa galáxia. Para alcançar uma linha armazenada no Db2, ele depende de uma longa cadeia:

Programa COBOL
      ↓
Instrução SQL
      ↓
DBRM
      ↓
Package
      ↓
Plan ou Package List
      ↓
Thread Db2
      ↓
Tabela
      ↓
Table Space
      ↓
Buffer Pool
      ↓
Data Set VSAM
      ↓
DASD

A tela apresentada mostra justamente uma das portas usadas para observar essa infraestrutura: o painel DB2 COMMANDS, acessível pelo DB2I dentro do TSO/ISPF.

Prepare a caneca, ajuste os óculos e vamos atravessar esse painel linha por linha.


Bellacosa Mainframe e o painel db2 commands

1. O que é o painel DB2 COMMANDS?

DB2I significa Db2 Interactive. Trata-se de um conjunto clássico de painéis ISPF que permite executar diversas atividades relacionadas ao Db2 for z/OS, como:

  • rodar SQL pelo SPUFI;

  • gerar DCLGEN;

  • preparar programas;

  • realizar BIND;

  • executar utilitários;

  • emitir comandos administrativos;

  • acessar funções de ajuda e diagnóstico.

O painel da imagem apresenta no alto:

DB2 COMMANDS                       SSID: DB9G

A expressão DB2 COMMANDS identifica a função atual. Já SSID: DB9G informa para qual subsistema Db2 os comandos serão enviados.

A IBM documenta que comandos como -DISPLAY DATABASE e -DISPLAY BUFFERPOOL podem ser emitidos pelo console do z/OS, por uma sessão DSN no TSO, pelo painel DB2 COMMANDS, por terminais IMS ou CICS e por programas que usem a Instrumentation Facility Interface. (IBM)

Isso significa que o painel DB2I não é o único caminho. Ele é, porém, um dos mais didáticos para quem está começando.


2. SSID: o nome do reino Db2

Na imagem aparece:

SSID: DB9G

SSID significa Subsystem Identifier, ou identificador do subsistema.

Em um mesmo ambiente z/OS podem existir vários subsistemas Db2:

DB2D  → desenvolvimento
DB2T  → testes
DB2H  → homologação
DB2P  → produção
DB9G  → treinamento ou laboratório

Esses nomes são apenas exemplos. Cada empresa define seu próprio padrão.

O SSID é uma informação crítica porque um comando emitido para o subsistema errado pode causar um incidente. Veja a diferença:

-DIS DB(DSN00122)

Esse comando apenas consulta informações.

Já:

-STOP DB(DSN00122)

pode tornar o database ou seus espaços indisponíveis, dependendo dos parâmetros e do contexto.

O primeiro hábito de um bom DBA Padawan deve ser:

1. Confirmar o ambiente.
2. Confirmar o SSID.
3. Confirmar o objeto.
4. Confirmar se o comando é consultivo ou modificador.
5. Somente então pressionar ENTER.

No mainframe, a tecla ENTER não é apenas uma tecla. Algumas vezes, ela é um pequeno botão vermelho com o poder de acordar três gerentes, dois sysprogs e um diretor.


3. Por que os comandos começam com hífen?

Os comandos do subsistema Db2 geralmente começam com um hífen:

-DISPLAY DATABASE
-START DATABASE
-STOP DATABASE
-DISPLAY BUFFERPOOL
-DISPLAY THREAD
-DISPLAY LOG

O hífen ajuda o ambiente a reconhecer que a linha contém um comando Db2.

Compare:

SELECT NOME
  FROM ALUNOS
 WHERE MATRICULA = 1001;

Isso é uma instrução SQL.

-DIS DB(DSN00122)

Isso é um comando administrativo do subsistema Db2.

TSO LISTCAT

Isso é um comando TSO.

F ALUNOS,APPL=DISPLAY

Isso poderia ser um comando direcionado a uma started task ou aplicação pelo console, dependendo da instalação.

O hífen é, portanto, uma pequena placa dizendo:

“Esta mensagem pertence ao reino do Db2.”


4. A primeira linha: -DIS DATABASE(DSN00122)

Na tela encontramos:

-DIS DATABASE(DSN00122)

A forma completa é:

-DISPLAY DATABASE(DSN00122)

A abreviação documentada é:

-DIS DB(DSN00122)

O comando DISPLAY DATABASE apresenta informações sobre o estado de databases, table spaces, index spaces, partições e outros objetos relacionados. (IBM)

O que é um database no Db2 for z/OS?

Aqui existe uma armadilha conceitual.

Em produtos distribuídos, a palavra “database” frequentemente representa uma instância lógica ampla que contém schemas, tabelas, índices e outros objetos. No Db2 for z/OS, um database é principalmente um agrupador lógico e administrativo de espaços.

Considere:

DATABASE DSN00122
   |
   +-- TABLESPACE ALUNOST1
   |      |
   |      +-- TABLE ESCOLA.ALUNOS
   |
   +-- TABLESPACE CURSOST1
   |      |
   |      +-- TABLE ESCOLA.CURSOS
   |
   +-- INDEXSPACE ALUNOSX1
          |
          +-- INDEX ESCOLA.IXALUNO

O database ajuda a organizar, administrar, iniciar, parar e consultar grupos de objetos.

Ao executar:

-DIS DB(DSN00122)

você está perguntando:

“Db2, qual é o estado administrativo do database DSN00122?”

Uma resposta simplificada poderia apresentar:

DATABASE = DSN00122
STATUS   = RW

RW normalmente representa Read/Write, indicando disponibilidade para leitura e gravação.

Entretanto, aqui existe um detalhe importante: o database pode estar normal enquanto um de seus table spaces está restrito. O inverso também merece atenção: um espaço pode aparecer em modo RW, mas continuar inacessível se o database que o contém estiver em condição restritiva.

Por isso, a IBM orienta que uma investigação completa de estados restritivos pode exigir dois comandos: um para o database e outro usando SPACENAM para seus espaços. (IBM)

Exemplo:

-DIS DB(DSN00122) RESTRICT

Depois:

-DIS DB(DSN00122) SPACENAM(*) RESTRICT

O primeiro procura restrições no nível do database.

O segundo procura table spaces e index spaces em estados restritivos.


5. A segunda linha: procurando ALUNOST1

A imagem apresenta:

-DIS DATABASE (*) SPACENAM(ALUNOST1)

Uma escrita padronizada seria:

-DIS DB(*) SPACENAM(ALUNOST1)

ou, se soubermos o database:

-DIS DB(DSN00122) SPACENAM(ALUNOST1)

O que significa o asterisco?

O asterisco funciona como um curinga:

DATABASE(*)

significa:

“Considere todos os databases aplicáveis.”

Assim, o comando procura um espaço chamado ALUNOST1, mesmo que o operador não saiba em qual database ele está.

Isso pode ser muito útil em um laboratório, mas em produção é preferível ser específico sempre que possível:

-DIS DB(DSN00122) SPACENAM(ALUNOST1)

Quanto mais preciso o comando, menor a quantidade de saída, menor a chance de confusão e mais rápida a análise.

O que é SPACENAM?

SPACENAM significa space name.

Ele restringe a consulta a um table space ou index space específico:

SPACENAM(ALUNOST1)

Pergunta ao Db2:

“Qual é o estado do espaço chamado ALUNOST1?”

Uma resposta hipotética poderia ser:

DATABASE = DSN00122
SPACENAM = ALUNOST1
TYPE     = TS
STATUS   = RW

Onde:

TYPE = TS

indica um table space.


6. Table space: a casa física da tabela

Uma tabela Db2 não paira magicamente sobre o catálogo. Seus dados residem em um table space.

Considere:

CREATE TABLE ESCOLA.ALUNOS
(
    MATRICULA INTEGER       NOT NULL,
    NOME      VARCHAR(100)  NOT NULL,
    CURSO     CHAR(10),
    NOTA      DECIMAL(5,2),
    PRIMARY KEY (MATRICULA)
)
IN DSN00122.ALUNOST1;

A cláusula:

IN DSN00122.ALUNOST1

indica o database e o table space associados.

A relação simplificada é:

ESCOLA.ALUNOS
      ↓
DSN00122.ALUNOST1
      ↓
Data sets administrados pelo Db2
      ↓
Volumes DASD

Nos ambientes modernos, são comuns os Universal Table Spaces, incluindo:

  • partition-by-growth, ou PBG;

  • partition-by-range, ou PBR.

Em um PBG, o Db2 pode adicionar partições automaticamente à medida que o espaço cresce; ele mantém uma única tabela e utiliza características de gerenciamento segmentado. (IBM)

O programador COBOL não precisa administrar essas estruturas diariamente, mas deve compreender que seu SELECT depende delas.


7. O poderoso parâmetro RESTRICT

Um dos comandos mais úteis para diagnóstico é:

-DIS DB(DSN00122) SPACENAM(*) RESTRICT

A opção RESTRICT reduz a saída aos objetos que estão em estado restritivo. (IBM)

Sem RESTRICT, você pode receber dezenas ou centenas de linhas.

Com RESTRICT, a pergunta fica mais objetiva:

“Mostre somente aquilo que pode estar impedindo o funcionamento normal.”

Um comando ainda mais amplo seria:

-DIS DB(*) SPACENAM(*) RESTRICT

A própria IBM apresenta essa forma como maneira de descobrir espaços em condição restritiva, inclusive após determinadas operações de LOAD. (IBM)

Entretanto, em grandes ambientes, usar curingas amplos pode gerar muita saída. No dia a dia, prefira:

-DIS DB(DSN00122) SPACENAM(ALUNOST1) RESTRICT

8. Estados que o Padawan precisa reconhecer

Os códigos podem variar de acordo com o objeto, versão, comando e contexto, mas alguns conceitos aparecem frequentemente.

RW — Read/Write

O objeto aceita leitura e gravação.

STATUS = RW

Esse é normalmente o cenário desejado para objetos transacionais.

RO — Read Only

O objeto está disponível apenas para leitura.

Um comando como:

SELECT NOME
  FROM ESCOLA.ALUNOS;

pode funcionar.

Porém:

UPDATE ESCOLA.ALUNOS
   SET NOTA = 9.50
 WHERE MATRICULA = 1001;

pode falhar porque exige gravação.

STOP

O objeto foi parado ou está indisponível.

Após analisar a situação, um administrador autorizado poderia utilizar:

-START DB(DSN00122) SPACENAM(ALUNOST1)

A IBM define -START DATABASE como o comando que torna o database ou objetos especificados disponíveis para uso, conforme as opções escolhidas. (IBM)

Não se deve executar START automaticamente sem entender por que o objeto estava parado. Ele pode ter sido interrompido propositalmente para manutenção.

COPY-pending

Indica que o Db2 requer uma image copy ou que existe uma condição relacionada à proteção para recuperação.

A solução pode envolver o utilitário COPY, mas é preciso examinar:

  • qual operação criou o estado;

  • se a cópia deve ser full ou incremental;

  • se haverá cópia local e de recovery site;

  • qual política de retenção existe;

  • se o objeto está participando de outro utilitário;

  • qual nível de concorrência é necessário.

REORG-pending

Indica necessidade de materializar alguma alteração ou reorganizar o objeto, conforme o estado específico.

O utilitário REORG TABLESPACE pode reorganizar um table space, partição ou intervalo de partições, recuperar espaço fragmentado, melhorar o acesso e materializar alterações de definição pendentes. (IBM)

Mas atenção:

Nem toda estatística ligeiramente ruim exige REORG.

A IBM recomenda considerar diversos fatores e executar a reorganização quando houver indicação real de necessidade, não apenas por hábito. (IBM)

RECOVER-pending

O objeto precisa de recuperação antes de retornar ao uso normal.

Essa situação pode exigir o utilitário RECOVER, image copies e registros de log. É um procedimento de alta responsabilidade.

CHECK-pending

Pode indicar que a consistência entre dados, restrições ou objetos relacionados precisa ser validada.

Dependendo da situação, o procedimento pode utilizar CHECK DATA ou outra ação administrativa apropriada.

PRO — Persistent Read Only

O estado PRO permite acesso de leitura por SQL ou utilitários, mas bloqueia atualizações na partição afetada. Tentativas de gravação podem receber erro de recurso indisponível. (IBM)


9. A terceira linha: buffer pools

A tela mostra:

-DIS BUFFERPOOL(*)

A forma completa é:

-DISPLAY BUFFERPOOL(*)

A abreviação oficial documentada pela IBM é:

-DIS BPOOL(*)

O comando apresenta o estado atual de um ou mais buffer pools ativos ou inativos. (IBM)

Eu recomendaria padronizar a linha como:

-DIS BPOOL(*)

ou escrever tudo por extenso:

-DISPLAY BUFFERPOOL(*)

Evite misturar uma abreviação do verbo com uma forma não padronizada do restante do comando em procedimentos operacionais. Padronização reduz erros.


10. O que é um buffer pool?

Imagine que o DASD seja uma gigantesca biblioteca subterrânea.

As páginas das tabelas e índices estão armazenadas nessa biblioteca. Sempre que um programa precisa ler um registro, o Db2 precisa encontrar a página correspondente.

Buscar tudo diretamente no disco seria mais lento. Por isso, o Db2 mantém páginas utilizadas em áreas de memória chamadas buffer pools.

A IBM define buffer pools como áreas de armazenamento virtual usadas para atender às necessidades de buffering de table spaces e índices. Em versões atuais do Db2 for z/OS, essas estruturas ficam acima da “barra” de 2 GB. (IBM)

O fluxo simplificado é:

Programa solicita uma linha
          ↓
Db2 identifica a página
          ↓
Página já está no buffer pool?
      /                     \
    Sim                     Não
     ↓                       ↓
Leitura lógica       Leitura física no DASD
     ↓                       ↓
Entrega os dados      Carrega a página no pool
                              ↓
                       Entrega os dados

Alguns nomes comuns:

BP0
BP1
BP2
BP8K0
BP16K0
BP32K

A nomenclatura pode indicar o tamanho de página suportado:

BP0      → normalmente 4 KB
BP8K0    → 8 KB
BP16K0   → 16 KB
BP32K    → 32 KB

A configuração real deve ser confirmada no ambiente.

Consultando todos

-DIS BPOOL(*)

Consultando os ativos

-DIS BPOOL(ACTIVE)

Consultando um específico

-DIS BPOOL(BP0)

Solicitando detalhes

-DIS BPOOL(BP0) DETAIL

A IBM informa que o monitoramento pode fornecer relatório resumido ou detalhado. (IBM)


11. O hit ratio e a armadilha dos números bonitos

Uma ideia bastante usada em análises de buffer pool é o buffer pool hit ratio.

Uma fórmula didática simplificada é:

Hit Ratio =
  (Getpages - Leituras físicas)
  ----------------------------- × 100
             Getpages

Suponha:

Getpages          = 1.000.000
Leituras físicas  =    80.000

Então:

Hit Ratio = (1.000.000 - 80.000) / 1.000.000 × 100
Hit Ratio = 92%

Isso sugere que grande parte das solicitações foi atendida sem nova leitura física.

Mas um hit ratio alto não é automaticamente sinal de perfeição.

Pode existir:

  • I/O síncrono justamente nas páginas críticas;

  • buffer pool superdimensionado;

  • disputa por memória real;

  • mistura inadequada de workloads;

  • prefetch pouco eficiente;

  • páginas sem utilidade permanecendo na memória;

  • desempenho ruim causado por SQL, não pelo cache.

O Easter egg técnico aqui é:

Um número verde no painel pode esconder um dragão vermelho no subterrâneo.

Analise sempre o contexto, a evolução ao longo do tempo, o tipo de aplicação e as métricas SMF ou de uma ferramenta de monitoramento.


12. Ligando a SQLCA aos comandos Db2

Considere um programa COBOL:

       EXEC SQL
           SELECT NOME,
                  NOTA
             INTO :WS-NOME,
                  :WS-NOTA
             FROM ESCOLA.ALUNOS
            WHERE MATRICULA = :WS-MATRICULA
       END-EXEC.

Depois da instrução, o programa verifica:

       EVALUATE SQLCODE
           WHEN 0
               DISPLAY 'ALUNO ENCONTRADO'
           WHEN 100
               DISPLAY 'ALUNO NAO ENCONTRADO'
           WHEN -904
               DISPLAY 'RECURSO INDISPONIVEL'
           WHEN OTHER
               DISPLAY 'ERRO SQL: ' SQLCODE
       END-EVALUATE.

Se SQLCODE for -904, o programa recebeu um erro de recurso indisponível. O próximo passo não deve ser imediatamente alterar o SQL.

Uma investigação responsável inclui:

1. Ler SQLCODE e SQLSTATE.
2. Examinar SQLERRMC na SQLCA.
3. Identificar o recurso indicado.
4. Descobrir database e table space.
5. Consultar o estado pelo DISPLAY DATABASE.
6. Verificar locks, claims ou utilitários.
7. Corrigir a causa.
8. Validar novamente.

Exemplo:

-DIS DB(DSN00122)

Depois:

-DIS DB(DSN00122) SPACENAM(ALUNOST1) RESTRICT

Se houver suspeita de bloqueio:

-DIS BLOCKERS

O comando DISPLAY BLOCKERS apresenta locks e claims mantidos por threads ativas contra databases, tabelas, índices ou espaços especificados. Sua abreviação é -DIS BL. (IBM)


13. JCL para executar uma image copy

Quando um table space está em COPY-pending e o procedimento aprovado determina a criação de uma image copy, um job semelhante ao seguinte pode ser usado.

Este é um modelo educacional. Procedures, nomes de DDs, unidades, classes, templates e políticas variam entre instalações.

//BCSCOPY  JOB (ACCT),'COPY ALUNOS',
//             CLASS=A,
//             MSGCLASS=X,
//             MSGLEVEL=(1,1),
//             NOTIFY=&SYSUID
//*
//COPYTS   EXEC DSNUPROC,
//             SYSTEM=DB9G,
//             UID='CPYALU01'
//*
//DSNUPROC.SYSIN DD *
  COPY TABLESPACE DSN00122.ALUNOST1
       FULL YES
       SHRLEVEL CHANGE
/*
//

Explicação detalhada da JOB statement

//BCSCOPY JOB (ACCT),'COPY ALUNOS',

BCSCOPY é o nome do job.

Ele deve seguir os padrões da instalação. Alguns ambientes usam identificação do usuário, aplicação e função:

VAGCOPY
PRDCOPY
DB2CPY01

JOB informa ao JES que uma nova unidade de trabalho está começando.

(ACCT)

É a informação contábil. Ela pode representar centro de custo, projeto ou código de cobrança. O formato depende da empresa.

'COPY ALUNOS'

É a descrição do job. Ela aparece em ferramentas como SDSF e ajuda a identificar sua finalidade.

CLASS

CLASS=A

Define a classe de execução.

A classe pode influenciar:

  • prioridade;

  • iniciador;

  • limites;

  • ambiente;

  • horário;

  • recursos disponíveis.

Não presuma que CLASS=A seja correta em sua empresa.

MSGCLASS

MSGCLASS=X

Define a classe de saída do spool.

Ela determina para onde irão mensagens JES, listagens e relatórios do job.

MSGLEVEL

MSGLEVEL=(1,1)

O primeiro valor controla a impressão das instruções JCL.

O segundo controla mensagens de alocação e desalocação.

Em termos didáticos, (1,1) solicita boa visibilidade para diagnóstico, mas o padrão corporativo pode ser diferente.

NOTIFY

NOTIFY=&SYSUID

Solicita que o usuário que submeteu o job seja notificado ao término.

&SYSUID é uma variável simbólica que representa o usuário logado.


14. Explicando o passo EXEC

//COPYTS EXEC DSNUPROC,

COPYTS é o nome do step.

EXEC informa que o step executará um programa ou procedure.

DSNUPROC representa uma procedure para execução de utilitários Db2. O nome real pode ser:

DSNUPROC
DSNUTIL
DB2UTIL
DSNUPR13

Isso depende da instalação.

SYSTEM=DB9G

Passa à procedure o subsistema Db2 de destino.

Esse parâmetro precisa corresponder ao ambiente correto.

UID='CPYALU01'

Define um identificador para a execução do utilitário.

O UID ajuda a distinguir jobs e pode aparecer em mensagens, registros e controles internos. Seu tamanho e padrão precisam obedecer às regras da procedure utilizada.


15. Explicando o SYSIN

//DSNUPROC.SYSIN DD *

Essa linha fornece as instruções de controle do utilitário.

DD significa Data Definition.

O asterisco indica que os dados estão escritos diretamente no JCL, logo abaixo da linha.

Dependendo de como a procedure foi criada, a referência pode ser:

//SYSIN DD *

ou:

//DSNUPROC.SYSIN DD *

Quando existe uma procedure catalogada, o formato qualificado pode substituir o DD interno do step da procedure.

Agora vem a instrução:

COPY TABLESPACE DSN00122.ALUNOST1

Ela solicita uma cópia do table space ALUNOST1, pertencente ao database DSN00122.

FULL YES

Solicita uma image copy completa, em vez de uma cópia incremental baseada em alterações.

SHRLEVEL CHANGE

Permite determinado nível de concorrência com aplicações durante a cópia. A compatibilidade exata depende do tipo do objeto e das operações concorrentes; existem claims, drains e restrições específicas que devem ser verificadas. (IBM)

A IBM também permite definir data sets de cópia local e de recovery site por opções como COPYDDN e RECOVERYDDN. (IBM)

O delimitador:

/*

encerra os dados instream de SYSIN.


16. Versão com TEMPLATE

Em ambientes modernos, é comum utilizar TEMPLATE para gerar dinamicamente nomes dos data sets de cópia.

Exemplo educacional:

//BCSCOPY  JOB (ACCT),'COPY ALUNOS',
//             CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//COPYTS   EXEC DSNUPROC,
//             SYSTEM=DB9G,
//             UID='CPYALU02'
//DSNUPROC.SYSIN DD *
  TEMPLATE CPYDS
       DSN 'BCS.DB2.&DB..&TS..D&DATE..T&TIME.'
       UNIT SYSALLDA
       DISP (NEW,CATLG,DELETE)

  COPY TABLESPACE DSN00122.ALUNOST1
       COPYDDN(CPYDS)
       FULL YES
       SHRLEVEL CHANGE
/*
//

TEMPLATE

TEMPLATE CPYDS

Cria um template chamado CPYDS.

DSN 'BCS.DB2.&DB..&TS..D&DATE..T&TIME.'

Define o padrão do nome do data set.

As variáveis simbólicas do utilitário podem inserir informações como database, table space, data e hora, conforme as opções suportadas.

Um nome resultante poderia ser semelhante a:

BCS.DB2.DSN00122.ALUNOST1.D20260714.T021700
UNIT SYSALLDA

Solicita alocação em uma unidade de disco elegível no grupo SYSALLDA.

DISP (NEW,CATLG,DELETE)

Significa:

  • NEW: o data set será criado;

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

  • DELETE: se falhar, será excluído.

A IBM fornece exemplos de uso de TEMPLATE e COPYDDN para image copies. (IBM)


17. JCL de REORG TABLESPACE

Quando a análise demonstra necessidade real de reorganização, um modelo poderia ser:

//BCSREORG JOB (ACCT),'REORG ALUNOS',
//             CLASS=A,
//             MSGCLASS=X,
//             MSGLEVEL=(1,1),
//             NOTIFY=&SYSUID
//*
//REORGTS  EXEC DSNUPROC,
//             SYSTEM=DB9G,
//             UID='RGOALU01'
//*
//DSNUPROC.SYSIN DD *
  REORG TABLESPACE DSN00122.ALUNOST1
        SHRLEVEL CHANGE
        SORTDATA
        STATISTICS
        TABLE ALL
        INDEX ALL
/*
//

REORG TABLESPACE

REORG TABLESPACE DSN00122.ALUNOST1

Solicita a reorganização do table space.

O utilitário pode recuperar espaço fragmentado, reorganizar registros e materializar certas mudanças de definição pendentes. (IBM)

SHRLEVEL CHANGE

Permite que aplicações continuem realizando leituras e gravações durante grande parte do processo.

Em uma reorganização online, o Db2 pode trabalhar com uma shadow copy, registrar mudanças no log, aplicar essas alterações à cópia e realizar uma fase de troca. (IBM)

Isso não significa “zero impacto”. Ainda podem existir:

  • drains;

  • fases críticas;

  • espera por aplicações;

  • aumento de logging;

  • necessidade de espaço;

  • impacto de CPU e I/O;

  • timeout na troca final.

SORTDATA

Solicita ordenação dos dados, normalmente de acordo com a chave de clustering aplicável.

Nos exemplos documentados, SORTDATA é o padrão em cenários tradicionais e pode ser omitido, mas escrevê-lo ajuda didaticamente a deixar a intenção clara. (IBM)

STATISTICS

Solicita a coleta de estatísticas durante o REORG.

Essas informações podem atualizar o catálogo e auxiliar o otimizador na escolha de access paths.

TABLE ALL

Solicita estatísticas para todas as tabelas aplicáveis do table space.

INDEX ALL

Inclui estatísticas dos índices associados, conforme as regras do utilitário e do objeto.

Em produção, as opções devem seguir a estratégia da empresa. Coletar estatísticas indiscriminadamente pode causar alterações de access path após um novo BIND ou REBIND.


18. JCL de RUNSTATS separado

Nem sempre você precisa reorganizar para atualizar estatísticas.

Um job de RUNSTATS poderia ser:

//BCSRSTAT JOB (ACCT),'RUNSTATS ALUNOS',
//             CLASS=A,
//             MSGCLASS=X,
//             NOTIFY=&SYSUID
//RSTAT    EXEC DSNUPROC,
//             SYSTEM=DB9G,
//             UID='RSTALU01'
//DSNUPROC.SYSIN DD *
  RUNSTATS TABLESPACE DSN00122.ALUNOST1
           TABLE(ALL)
           INDEX(ALL)
           SHRLEVEL CHANGE
           REPORT YES
           UPDATE ALL
/*
//

RUNSTATS TABLESPACE

Define o objeto cujas estatísticas serão coletadas.

TABLE(ALL)

Inclui todas as tabelas aplicáveis.

INDEX(ALL)

Inclui os índices associados.

SHRLEVEL CHANGE

Busca permitir concorrência com aplicações, observadas as regras da versão e do objeto.

REPORT YES

Produz relatório com informações coletadas.

UPDATE ALL

Solicita atualização das estatísticas aplicáveis no catálogo.

O cuidado Jedi é não tratar RUNSTATS como uma rotina sem consequências. Estatísticas alteradas podem influenciar o otimizador. Após REBIND, um programa pode escolher outro índice, usar outro método de join ou abandonar um access path antigo.


19. Um fluxo completo de diagnóstico

Considere o incidente:

PROGRAMA  : CADP001
TABELA    : ESCOLA.ALUNOS
SQLCODE   : -904
SQLSTATE  : 57011

Passo 1 — Ler toda a SQLCA

Não olhe apenas para SQLCODE.

Verifique também:

SQLSTATE
SQLERRMC
SQLERRD
SQLWARN

SQLERRMC pode conter identificadores úteis sobre o recurso indisponível.

Passo 2 — Localizar o objeto físico

Uma consulta ao catálogo pode ajudar:

SELECT DBNAME,
       TSNAME
  FROM SYSIBM.SYSTABLES
 WHERE CREATOR = 'ESCOLA'
   AND NAME    = 'ALUNOS';

Resultado hipotético:

DBNAME    TSNAME
--------  ---------
DSN00122  ALUNOST1

Passo 3 — Consultar o database

-DIS DB(DSN00122) RESTRICT

Passo 4 — Consultar o espaço

-DIS DB(DSN00122) SPACENAM(ALUNOST1) RESTRICT

Passo 5 — Verificar utilitários

Dependendo da situação e das autorizações:

-DIS UTIL(*)

Isso ajuda a descobrir se COPY, LOAD, REORG, RECOVER ou outro utilitário está em execução.

Passo 6 — Verificar bloqueadores

-DIS BL

ou uma forma mais específica, conforme a sintaxe e o objeto investigado.

Passo 7 — Escolher a ação

Possibilidades:

COPY-pending    → avaliar e executar COPY
REORG-pending   → planejar REORG
RECOVER-pending → seguir procedimento de RECOVER
STOP            → descobrir a causa antes de START
LOCK/CLAIM      → analisar thread e aplicação

Passo 8 — Validar

Depois da ação:

-DIS DB(DSN00122) SPACENAM(ALUNOST1) RESTRICT

Se nenhuma restrição for mostrada, execute também uma validação funcional controlada.


20. Biblioteca de comandos para o painel

As linhas disponíveis no painel podem guardar uma pequena coleção:

Cmd 1 ===> -DIS DB(DSN00122)

Cmd 2 ===> -DIS DB(DSN00122) SPACENAM(ALUNOST1)

Cmd 3 ===> -DIS DB(DSN00122) SPACENAM(*) RESTRICT

Cmd 4 ===> -DIS BPOOL(ACTIVE)

Cmd 5 ===> -DIS BPOOL(BP0) DETAIL

Cmd 6 ===> -DIS THD(*)

Cmd 7 ===> -DIS LOG

O comando é executado posicionando o cursor em sua linha e pressionando ENTER.

Isso permite montar uma pequena “maleta de primeiros socorros” para o DBA Padawan.


21. Curiosidades e Easter eggs do templo Db2

O prefixo DSN

Muitos componentes, programas, procedures e mensagens do Db2 usam o prefixo DSN:

DSN
DSNUTILB
DSNUPROC
DSNTIAUL
DSNTEP2
DSNTEP4
DSN9022I

O prefixo funciona quase como a assinatura arqueológica do produto.

Ao encontrar algo iniciado por DSN, existe uma boa chance de você estar diante de um artefato relacionado ao Db2 for z/OS.

NORMAL COMPLETION não significa objeto saudável

Uma mensagem como:

DSN9022I ... NORMAL COMPLETION

significa que o comando foi processado normalmente.

Ela não significa que o objeto consultado esteja normal.

O comando pode terminar com sucesso e mostrar:

STATUS = COPY

É como um exame médico: a coleta foi bem-sucedida, mas o resultado pode apontar um problema.

O programa COBOL enxerga a consequência

O desenvolvedor recebe:

SQLCODE -904

O DBA enxerga:

COPY-pending

O operador enxerga:

job terminado com RC 12

O storage administrator pode enxergar:

problema de volume ou data set

Todos observam o mesmo incidente por janelas diferentes.

O profissional completo aprende a juntar essas janelas.


Conclusão: o SELECT é apenas a superfície

A tela DB2 COMMANDS parece simples: fundo preto, letras em ciano e algumas linhas de comando.

Mas por trás dela existe uma arquitetura capaz de sustentar bancos, seguradoras, governos, indústrias, companhias aéreas e sistemas que movimentam valores gigantescos.

Os três comandos da imagem percorrem três níveis fundamentais:

-DIS DB(DSN00122)

Observa o agrupamento administrativo.

-DIS DB(DSN00122) SPACENAM(ALUNOST1)

Observa o espaço que armazena os dados.

-DIS BPOOL(*)

Observa a memória que mantém páginas desses objetos.

Para o programador COBOL Padawan, compreender esses níveis transforma a maneira de diagnosticar problemas. Em vez de concluir que todo SQLCODE nasceu de um erro de programação, ele começa a pensar em camadas:

Código
  ↓
SQL
  ↓
Package
  ↓
Autorização
  ↓
Thread
  ↓
Lock ou claim
  ↓
Estado do objeto
  ↓
Buffer pool
  ↓
Data set
  ↓
Storage
  ↓
Log e recuperação

Essa é a passagem de aprendiz para profissional de verdade.

O Padawan pergunta:

“Por que meu SELECT falhou?”

O Jedi do mainframe pergunta:

“Qual componente da cadeia deixou de cumprir sua parte?”

E, muitas vezes, a resposta começa com uma linha curta, digitada em uma tela 3270:

-DIS DB(DSN00122) SPACENAM(ALUNOST1) RESTRICT

Apenas alguns caracteres.

Mas, no universo IBM Z, alguns caracteres podem revelar todo um império escondido atrás do programa COBOL.

quarta-feira, 16 de maio de 2018

🔥☕ “O MAINFRAME NÃO ESTÁ LENTO — VOCÊ É QUE NÃO OLHOU O DB2 PELO PAINEL DE COMANDO” 💾🚨

 

Bellacosa Mainframe Painel de Comando do DB2

🔥☕ “O MAINFRAME NÃO ESTÁ LENTO — VOCÊ É QUE NÃO OLHOU O DB2 PELO PAINEL DE COMANDO” 💾🚨

O laboratório definitivo de DB2 Commands para Sysprogs, DBAs e sobreviventes de produção no IBM Z

Existe um momento na vida de todo profissional de Mainframe em que ele percebe uma verdade brutal:

O problema não está no COBOL.
Não está no CICS.
Não está no batch.
Muitas vezes… o DB2 já estava gritando há horas no painel de comandos.

E é exatamente aí que nasce o verdadeiro operador de produção, o DBA raiz e o sysprog veterano.

Porque enquanto muita gente depende:

  • de dashboard web,
  • monitor colorido,
  • ferramenta gráfica,
  • console “moderninho”,

o profissional de IBM Z abre um terminal 3270 e digita:

-DIS THD(*)

E em segundos ele enxerga:

  • travamentos,
  • contenção,
  • deadlocks,
  • pressão de memória,
  • gargalo de I/O,
  • DDF congestionado,
  • utilities presas,
  • aplicações morrendo lentamente.

Tudo isso diretamente no coração do DB2.


💾 O QUE É O DB2 COMMAND FACILITY?

O DB2 Command Facility é o mecanismo operacional do DB2 z/OS usado para:

  • monitoramento,
  • administração,
  • troubleshooting,
  • recovery,
  • tuning,
  • análise de performance.

Ele permite conversar diretamente com o subsystem DB2.

Na prática:

  • você não executa SQL,
  • você conversa com o motor interno do DB2.

É quase como abrir um shell administrativo do banco.


🔥 O PAINEL QUE ASSUSTA INICIANTES… E SALVA PRODUÇÃO

A clássica tela:

DB2 COMMANDS

parece simples.

Mas ela é uma das interfaces mais poderosas do ecossistema IBM Z.

Ali vivem comandos capazes de:

  • parar databases,
  • analisar locks,
  • detectar gargalos,
  • visualizar threads,
  • monitorar DDF,
  • inspecionar bufferpools,
  • acompanhar utilities,
  • identificar problemas de log.

Em ambientes bancários isso significa:

milhões de transações por minuto.


🚨 O PRIMEIRO ERRO QUE TODO MUNDO COMETE

Você digitou:

-DIS

e recebeu:

REQUIRED KEYWORD IS MISSING

Esse erro é quase um ritual de iniciação 😄

O DB2 funciona com estrutura:

-VERBO OBJETO(OPÇÕES)

Exemplo:

ComandoFunção
-DIS THREAD(*)Mostra threads
-DIS DB(*)Mostra databases
-DIS LOGMostra logs
-DIS UTIL(*)Mostra utilities
-DIS DDFMostra Distributed Data Facility

🔥 DISPLAY THREAD — O ELETROCARDIOGRAMA DO DB2

Comando

-DIS THD(*)

ou:

-DIS THREAD(*)

💣 O QUE ELE MOSTRA?

Esse comando revela:

  • conexões ativas,
  • jobs batch,
  • usuários TSO,
  • transações CICS,
  • conexões distribuídas,
  • planos DB2,
  • waits,
  • locks.

É literalmente o “quem está vivo” dentro do DB2.


🚨 O QUE UM SYSPOG PROCURA?

🔥 STATUS=WAIT

Pode indicar:

  • lock contention,
  • deadlock,
  • timeout,
  • gargalo I/O.

🔥 THREADS DDF EXCESSIVAS

Pode indicar:

  • avalanche de conexão distribuída,
  • problema de aplicação Java,
  • pool mal configurado.

🔥 CPU DISPARANDO

Às vezes um único thread:

  • está executando SQL ruim,
  • segurando recurso crítico,
  • consumindo zIIP,
  • causando storm de lock.

💾 DISPLAY DATABASE — A RADIOGRAFIA DO STORAGE LÓGICO

Comando

-DIS DB(*)

ou:

-DIS DB(DBPROD) SP(*)

🔥 O QUE ISSO ENTREGA?

Mostra:

  • status databases,
  • tablespaces,
  • pendências recovery,
  • copy pending,
  • utility pending,
  • read only,
  • stop states.

🚨 STATUS QUE ASSUSTAM DBA

StatusProblema
STOPDatabase indisponível
UTUtility executando
COPYBackup pendente
CHKPCheck pending
RECOVERRecovery necessário

💣 O QUE ISSO SIGNIFICA EM PRODUÇÃO?

Um database em:

STOP

pode derrubar:

  • internet banking,
  • PIX,
  • cartão,
  • ATM,
  • APIs distribuídas.

🔥 DISPLAY DDF — O “PULMÃO” DAS CONEXÕES DISTRIBUÍDAS

Comando

-DIS DDF

💾 O QUE É DDF?

DDF = Distributed Data Facility.

É o componente responsável pelas conexões:

  • JDBC,
  • Java,
  • APIs,
  • microservices,
  • aplicações distribuídas,
  • Linux,
  • cloud.

Ou seja:

praticamente o mundo moderno acessa DB2 via DDF.


🚨 O QUE O SYSPOG ANALISA?

STATUS=STOPD

🔥 Grave.

Significa:

  • aplicações externas perderam conexão.

CONDBAT EXCEDIDO

Pode indicar:

  • excesso de conexões,
  • pool mal configurado,
  • tempestade de microservices.

💣 DISPLAY LOCKS — O DETETIVE DE CRIMES EM PRODUÇÃO

Comando

-DIS LOCKS

🔥 O QUE ELE MOSTRA?

  • locks ativos,
  • quem segura lock,
  • recursos travados,
  • deadlocks,
  • waits.

💾 CENÁRIO CLÁSSICO

Batch noturno:

UPDATE MASSIVO

segura lock exclusivo.

Resultado:

  • CICS trava,
  • online para,
  • filas aumentam,
  • CPU sobe,
  • usuários reclamam.

E então o DBA roda:

-DIS LOCKS

e encontra o culpado.


🔥 DISPLAY UTIL — O “CENTRO CIRÚRGICO” DO DB2

Comando

-DIS UTIL(*)

💾 O QUE MOSTRA?

Utilities ativas:

  • REORG,
  • COPY,
  • LOAD,
  • RUNSTATS,
  • RECOVER.

🚨 O QUE UM DBA OBSERVA?

Utility presa

Pode indicar:

  • lock,
  • falta de espaço,
  • erro dataset,
  • deadlock utility.

REORG eterno

Pode indicar:

  • tablespace gigantesca,
  • I/O saturado,
  • SORT insuficiente.

🔥 DISPLAY LOG — O DNA TRANSACIONAL DO DB2

Comando

-DIS LOG

💾 O QUE ANALISAR?

  • active logs,
  • archive logs,
  • checkpoints,
  • dual logging,
  • status de escrita.

🚨 LOG LOTADO = CAOS

Se active logs saturam:

  • aplicações param,
  • commits travam,
  • DB2 entra em pressão severa.

Pouca gente percebe:

o log é literalmente o sistema nervoso do DB2.


🔥 DISPLAY BUFFERPOOL — O RAIO-X DA MEMÓRIA

Comando

-DIS BPOOL(*)

💾 O QUE É BUFFERPOOL?

Cache inteligente do DB2.

Armazena:

  • páginas,
  • índices,
  • dados recentes.

Quanto melhor o bufferpool:

  • menos disco,
  • menos I/O,
  • menos CPU.

🚨 O QUE UM SYSPOG ANALISA?

PGFIX(NO)

Pode aumentar:

  • paging,
  • CPU,
  • overhead.

VPSIZE PEQUENO

Pode causar:

  • sync I/O,
  • leituras físicas excessivas.

HIT RATIO BAIXO

Indica:

  • cache ineficiente,
  • memória insuficiente.

💣 A VERDADE QUE POUCOS ACEITAM

Muitos problemas “de SQL” são:

problemas de bufferpool.


🔥 EXECUTANDO VIA JCL BATCH

O verdadeiro poder aparece no batch.


💾 EXEMPLO REAL

//STEP1 EXEC PGM=IKJEFT01
//STEPLIB DD DISP=SHR,DSN=DSN910.SDSNLOAD
//SYSTSIN DD *
DSN SYSTEM(DB9G)
-DIS DDF
-DIS THD(*)
-DIS LOG
END
/*

🚨 O ERRO CLÁSSICO

Você encontrou:

IKJ56500I COMMAND DSN NOT FOUND

Isso significa:

  • SDSNLOAD ausente,
  • DB2 runtime não alocado,
  • comando DSN indisponível.

É um dos erros mais clássicos do mundo DB2 batch.


💾 O QUE É SDSNLOAD?

Biblioteca que contém:

  • DSN,
  • utilities,
  • runtime DB2,
  • SPUFI,
  • módulos administrativos.

Sem ela:

não existe DB2 no batch.


🔥 O QUE SEPARA JUNIOR DE VETERANO

O iniciante:

  • olha dashboard.

O veterano:

  • olha DISPLAY THREAD,
  • DISPLAY LOCKS,
  • DISPLAY LOG,
  • BUFFERPOOL,
  • utilities,
  • waits.

Porque ele sabe:

o DB2 sempre dá sinais antes do desastre.


☕ A FILOSOFIA DO SYSPOG MAINFRAME

No mundo distribuído:

  • muita gente troca ferramenta.

No IBM Z:

  • primeiro se entende o problema.

E o painel de comandos DB2 continua sendo:

  • rápido,
  • confiável,
  • preciso,
  • resiliente,
  • praticamente eterno.

Quarenta anos depois…
ele ainda está ali.

Piscando em verde, azul ou branco no 3270.

Esperando alguém digitar:

-DIS THD(*)

…e descobrir o que realmente está acontecendo dentro do Mainframe IBM Z 🔥💾

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...