| Bellacosa Mainframe e uma lista de 50 comandos do subsistema db2 sem misterios |
☕ Um Café no Bellacosa Mainframe
Os 50 Comandos do Subsistema Db2 sem Mistérios
O guia operacional para o programador COBOL padawan conversar com o coração do Db2 for z/OS
Imagine o seguinte cenário: você terminou seu programa COBOL, passou pelo pré-compilador, compilou, linkeditou, executou o BIND e finalmente colocou o módulo em produção.
Então chega uma mensagem:
DSNT500I RESOURCE UNAVAILABLE
O programa está correto. O SQL está correto. A tabela existe. Mas o tablespace está parado.
Em outro momento, o programa fica esperando durante vários minutos. Não há abend, não há SQLCODE negativo e ninguém sabe exatamente o que está acontecendo. Depois de alguma investigação, descobre-se que uma thread está segurando um lock e bloqueando dezenas de transações.
É nesse ponto que entramos no mundo dos comandos do subsistema Db2.
Esses comandos não são comandos SQL. Eles são ordens operacionais enviadas diretamente ao mecanismo do Db2 for z/OS para consultar, iniciar, parar, alterar, recuperar ou controlar componentes do subsistema.
A IBM define esses comandos como recursos usados para controlar grande parte do ambiente operacional do Db2. Eles podem ser emitidos pelo console do z/OS, pelo SDSF, por uma sessão DSN no TSO, pelo painel DB2 Commands do DB2I e, dependendo da configuração, por terminais IMS, CICS ou aplicações autorizadas. A exceção mais importante é -START DB2, que normalmente precisa ser emitido pelo console do z/OS ou pelo TSO/SDSF. (IBM)
| Bellacosa Mainframe e o DB2 na intimidade |
1. Antes de começar: SQL não é comando Db2
Um iniciante frequentemente mistura quatro coisas diferentes:
SELECT * FROM CLIENTES;
Isso é uma instrução SQL.
RUNSTATS TABLESPACE DBVENDAS.TSVENDAS;
Isso é uma utility control statement, normalmente executada pelo utilitário DSNUTILB.
BIND PACKAGE(COLLID) MEMBER(PROGRAMA);
Isso é um subcomando do processador DSN.
-DISPLAY DATABASE(DBVENDAS)
Isso é um comando operacional do subsistema Db2.
O hífen inicial é uma pista fundamental:
-DISPLAY
-START
-STOP
-ALTER
-CANCEL
-SET
-RECOVER
Nos exemplos deste artigo, considere que o subsistema se chama DB2P, embora o prefixo usado no console dependa da instalação.
No console, você poderá encontrar algo como:
-DB2P DISPLAY DATABASE(DBVENDAS)
No painel DB2 Commands do DB2I, normalmente será digitado apenas:
-DISPLAY DATABASE(DBVENDAS)
2. Regra de ouro do operador Jedi
Antes de executar qualquer comando que modifique o ambiente:
Execute um
DISPLAY.Leia todas as mensagens retornadas.
Confirme o nome do subsistema.
Confirme o nome do objeto.
Verifique se está em desenvolvimento, homologação ou produção.
Registre o motivo da intervenção.
Tenha um comando de retorno preparado.
Nunca copie comandos cegamente de outra instalação.
O Db2 costuma retornar DSN9022I quando o processamento do comando termina normalmente e DSN9023I quando termina de forma anormal. Porém, não basta procurar apenas a última mensagem: as mensagens anteriores explicam o que realmente aconteceu. (IBM)
Parte I — Comandos de diagnóstico e observação
1. -DISPLAY DATABASE
Para que serve
Exibe o estado de databases, tablespaces, indexspaces e partições.
É provavelmente o comando operacional mais importante para o programador COBOL.
Exemplo
-DISPLAY DATABASE(DBVENDAS)
Para um tablespace específico:
-DISPLAY DATABASE(DBVENDAS) SPACENAM(TSVENDAS)
Para obter informações adicionais:
-DISPLAY DATABASE(DBVENDAS) SPACENAM(TSVENDAS) RESTRICT
Passo a passo
Identifique o database.
Informe opcionalmente o nome do espaço.
Execute o comando.
Procure estados restritivos.
Investigue situações como
STOP,COPY,RECP,REORP,RBDP,UTROouUTRW.
Vantagem
Permite verificar rapidamente por que uma aplicação não consegue acessar um objeto.
Perigo
Usar curingas muito abrangentes pode produzir uma enorme quantidade de mensagens no console.
-DISPLAY DATABASE(*) SPACENAM(*)
Em produção, isso pode transformar o console em uma cachoeira de mensagens.
A IBM documenta que o comando apresenta informações de status sobre databases Db2 e possui escopo de grupo em ambientes data sharing. (IBM)
2. -DISPLAY THREAD
Para que serve
Mostra as threads que estão conectadas ao Db2.
Uma thread representa o contexto de uma conexão ou unidade de trabalho de uma aplicação. Pode ser uma aplicação TSO, CICS, IMS, batch, stored procedure ou uma conexão distribuída.
Exemplos
-DISPLAY THREAD(*)
-DISPLAY THREAD(*) TYPE(ACTIVE)
-DISPLAY THREAD(*) DETAIL
O que observar
authorization ID;
plan;
correlation ID;
connection name;
token;
status;
LUWID;
atividade local ou distribuída.
Dica COBOL
Em um job batch, o correlation ID frequentemente ajuda a relacionar a thread ao job ou à aplicação.
Perigo
Não confunda uma thread aparentemente parada com uma thread inútil. Ela pode estar esperando I/O, lock, resposta de rede ou trabalho de outra região.
O comando mostra informações sobre allied threads, database access threads e tarefas paralelas, que podem estar ativas, inativas, indoubt ou postponed. (IBM)
3. -DISPLAY BLOCKERS
Para que serve
Mostra locks e claims mantidos por threads que estão bloqueando determinados objetos.
Exemplo
-DISPLAY BLOCKERS DATABASE(DBVENDAS)
-DISPLAY BLOCKERS DATABASE(DBVENDAS) SPACENAM(TSVENDAS)
Quando usar
jobs esperando recursos;
SQLCODE
-911ou-913;utility sem conseguir realizar drain;
transações CICS acumulando;
tablespace que não consegue parar.
Vantagem
Reduz o tempo de investigação de contenção.
Ponto de atenção
O bloqueador nem sempre é o culpado. Pode ser apenas uma aplicação legítima executando uma longa unidade de trabalho.
O comando mostra locks e claims mantidos por threads ativas contra databases, tabelas, índices ou espaços especificados. (IBM)
4. -DISPLAY DDF
Para que serve
Exibe o estado da Distributed Data Facility, responsável pelas conexões distribuídas com o Db2.
Exemplo
-DISPLAY DDF
-DISPLAY DDF DETAIL
Pode mostrar
status do DDF;
endereço TCP/IP;
porta DRDA;
número de conexões;
número de DBATs;
parâmetros de conexão;
filas relacionadas a limites.
Uso típico
Uma aplicação Java, API, ferramenta externa ou outro Db2 não consegue conectar-se ao subsistema.
Atenção
DDF ativo não significa que toda conexão funcionará. Ainda podem existir problemas de TCP/IP, RACF, certificados, AT-TLS, location, package ou autorização.
A IBM descreve -DISPLAY DDF como o comando que mostra configuração, status e estatísticas das conexões e threads controladas pelo DDF. (IBM)
5. -DISPLAY GROUP
Para que serve
Exibe informações sobre o data sharing group ou, mesmo fora de um grupo ativo, dados importantes sobre níveis do Db2.
Exemplo
-DISPLAY GROUP
-DISPLAY GROUP DETAIL
Mostra informações como
membros;
status dos membros;
code level;
catalog level;
function level;
coexistência e compatibilidade.
Curiosidade
É um dos primeiros comandos que um especialista executa para descobrir “em que Db2 estou pisando”.
O Db2 pode ter código em um nível, catálogo em outro e function level em outro. A versão comercial isoladamente não conta toda a história.
6. -DISPLAY BUFFERPOOL
Para que serve
Mostra status e características dos buffer pools.
Exemplo
-DISPLAY BUFFERPOOL(BP0)
-DISPLAY BUFFERPOOL(*)
-DISPLAY BUFFERPOOL(BP8K0) DETAIL
O que investigar
tamanho atual;
page size;
thresholds;
parâmetros de escrita;
situação ativa ou inativa;
frames alocados.
Vantagem
Ajuda a verificar se uma alteração de buffer pool foi realmente aplicada.
Desvantagem
O comando não substitui RMF, Statistics Trace ou ferramentas de performance. Ele mostra estado operacional, não toda a história de desempenho.
7. -DISPLAY GROUPBUFFERPOOL
Para que serve
Mostra o estado dos group buffer pools em data sharing.
Exemplo
-DISPLAY GROUPBUFFERPOOL(GBP0)
-DISPLAY GROUPBUFFERPOOL(*) TYPE(GCONN)
Quando é importante
problemas de data sharing;
falhas de coupling facility;
rebuild de GBP;
objetos em GBP-dependent;
inconsistências entre membros.
Atenção
Este comando pertence ao reino do sysprog e do DBA de infraestrutura. Um programador deve conhecê-lo, mas não alterar um GBP sem um procedimento formal.
8. -DISPLAY LOG
Para que serve
Mostra informações sobre active logs, offload, checkpoints e situação do processo de logging.
Exemplo
-DISPLAY LOG
Pode ajudar a identificar
active log corrente;
progresso de offload;
parâmetros de checkpoint;
ocupação ou indisponibilidade de logs;
risco de aplicações pararem por falta de espaço de log.
Easter egg operacional
O log é a máquina do tempo do Db2. Sem ele, rollback, restart e recuperação deixam de ser operações confiáveis.
A IBM explica que, quando o Db2 preenche um active log, precisa descarregá-lo para um archive log. Se as aplicações alcançarem o processo de offload, elas podem ser suspensas até que haja espaço disponível. (IBM)
9. -DISPLAY ARCHIVE
Para que serve
Mostra informações sobre archive logs usados como entrada e sobre a atividade de arquivamento.
Exemplo
-DISPLAY ARCHIVE
Ponto de atenção em data sharing
O comando mostra informações do membro no qual foi executado. Para visualizar todos os membros, pode ser necessário executá-lo individualmente em cada um. (IBM)
10. -DISPLAY UTILITY
Para que serve
Mostra o estado das utilities registradas no Db2.
Exemplos
-DISPLAY UTILITY(*)
-DISPLAY UTILITY(UTIL1234)
Pode revelar
utility ID;
nome da utility;
fase atual;
objeto processado;
contagem de registros;
situação parada ou ativa;
membro do data sharing group.
Uso típico
Um REORG aparentemente não avança. Antes de cancelar o job, execute DISPLAY UTILITY.
Perigo
A utility pode estar em uma fase crítica ou aguardando drain. Interrompê-la sem entender o estado pode deixar o objeto restrito.
11. -DISPLAY TRACE
Para que serve
Lista traces ativos no Db2.
Exemplo
-DISPLAY TRACE(*)
-DISPLAY TRACE(P)
Tipos comuns
statistics;
accounting;
audit;
performance;
monitor;
global.
Atenção
Tracing custa recursos. Um trace excessivamente detalhado pode aumentar CPU, geração de SMF e volume de dados.
12. -DISPLAY STATS
Para que serve
Exibe estatísticas de uso de determinados recursos e processos internos do Db2.
Exemplo
-DISPLAY STATS
Utilidade
É usado em diagnósticos operacionais específicos, geralmente por DBAs e suporte.
Limitação
Não deve ser confundido com RUNSTATS. DISPLAY STATS consulta estatísticas operacionais; RUNSTATS coleta estatísticas de objetos para catálogo e otimizador.
13. -DISPLAY LOCATION
Para que serve
Mostra informações sobre locations remotas conhecidas pelo Db2.
Exemplo
-DISPLAY LOCATION(*)
-DISPLAY LOCATION(DSNREM01)
Quando usar
falha em conexão remota;
aplicações DRDA;
aliases e locations incorretas;
investigação de comunicação entre subsistemas.
14. -DISPLAY PROFILE
Para que serve
Mostra se a função de profiles está ativa.
Exemplo
-DISPLAY PROFILE
O que são profiles
As profile tables permitem aplicar controles e comportamentos a conexões e threads, incluindo limites e regras para aplicações distribuídas.
Atenção
Uma aplicação pode funcionar em homologação e ser limitada em produção por causa de um profile específico.
15. -DISPLAY RLIMIT
Para que serve
Mostra o estado do Resource Limit Facility, tradicionalmente conhecido como governor.
Exemplo
-DISPLAY RLIMIT
Para que serve o governor
Pode limitar ou controlar o consumo estimado de recursos por instruções SQL dinâmicas.
Pegadinha
Um SQL pode estar sintaticamente correto e ter um bom access path, mas ser bloqueado por política de resource limit.
16. -DISPLAY PROCEDURE
Para que serve
Mostra informações e estatísticas sobre stored procedures externas acessadas pelas aplicações.
Exemplo
-DISPLAY PROCEDURE(*)
-DISPLAY PROCEDURE(MEU_SCHEMA.MINHA_PROC)
Uso típico
stored procedure não inicia;
excesso de chamadas;
procedure parada;
comportamento inesperado no WLM application environment.
17. -DISPLAY FUNCTION SPECIFIC
Para que serve
Mostra estatísticas sobre funções externas definidas pelo usuário.
Exemplo conceitual
-DISPLAY FUNCTION SPECIFIC(MEU_SCHEMA.MINHA_FUNCAO)
Atenção
O nome específico pode ser diferente do nome SQL usado para chamar a função.
18. -DISPLAY RESTSVC
Para que serve
Mostra o estado dos serviços REST definidos no Db2.
Exemplo
-DISPLAY RESTSVC(*)
Curiosidade
O mesmo Db2 tradicionalmente acessado por COBOL, CICS e batch pode expor operações como serviços REST.
É a velha fortaleza do mainframe abrindo portões controlados para o mundo das APIs.
19. -DISPLAY ACCEL
Para que serve
Mostra informações sobre servidores aceleradores associados ao Db2, como ambientes IBM Db2 Analytics Accelerator.
Exemplo
-DISPLAY ACCEL(*)
Ponto de atenção
Uma query elegível para aceleração pode deixar de ser executada no accelerator quando o servidor está indisponível, dependendo da configuração e do comportamento definido.
20. -DISPLAY ML
Para que serve
Mostra o estado de funções relacionadas ao IBM Db2 AI for z/OS ou ao IBM Z Database Assistant.
Exemplo
-DISPLAY ML
Curiosidade
É um exemplo de como a lista de comandos do Db2 evolui. O velho painel verde agora também conversa com recursos de inteligência artificial.
21. -DISPLAY OTEL
Para que serve
Exibe o estado da integração OpenTelemetry do Db2.
Exemplo
-DISPLAY OTEL
Ponto de atenção
Esse comando depende do nível de código, manutenção e function level aplicáveis ao ambiente. Ele pode não existir em instalações mais antigas.
O catálogo atual do Db2 13 inclui comandos para exibir, iniciar e parar funções OpenTelemetry. (IBM)
22. -DISPLAY DYNQUERYCAPTURE
Para que serve
Mostra monitores ativos de captura de queries dinâmicas.
Exemplo
-DISPLAY DYNQUERYCAPTURE
Utilidade
Ajuda em processos de estabilização de access paths para SQL dinâmico.
Atenção
Isso não é a mesma coisa que olhar o dynamic statement cache. O comando está relacionado aos monitores de captura configurados.
Parte II — Comandos para iniciar componentes
23. -START DB2
Para que serve
Inicializa o subsistema Db2.
Exemplo no console
-DB2P START DB2
Passo a passo simplificado
O z/OS inicia as started tasks do Db2.
O Db2 conecta-se ao IRLM.
Abre BSDS e logs.
Executa restart processing quando necessário.
Recupera unidades de trabalho.
Disponibiliza serviços internos.
Permite conexões de TSO e subsistemas anexados.
Perigo
Não é um simples “ligar banco de dados”. Um restart pode envolver recuperação, backout e resolução de unidades de trabalho.
24. -START DATABASE
Para que serve
Torna um database ou espaço novamente disponível.
Exemplos
-START DATABASE(DBVENDAS)
-START DATABASE(DBVENDAS) SPACENAM(TSVENDAS)
-START DATABASE(DBVENDAS) SPACENAM(TSVENDAS) ACCESS(RW)
Modos de acesso comuns
RW: leitura e escrita;RO: somente leitura;UT: acesso para utilities;modos específicos dependem da situação e da sintaxe suportada.
Atenção
Dar START não remove magicamente todos os estados restritivos. Um objeto em RECP, RBDP ou COPY pode exigir uma utility apropriada.
A IBM define esse comando como a forma de tornar o database especificado disponível para uso. (IBM)
25. -START DDF
Para que serve
Inicia a Distributed Data Facility.
Exemplo
-START DDF
Antes de usar
Execute
-DISPLAY DDF.Confirme que o DDF está parado.
Verifique TCP/IP e segurança.
Inicie.
Execute outro
-DISPLAY DDF.
Perigo
Iniciar o DDF pode reabrir imediatamente o acesso de centenas de clientes externos.
26. -START TRACE
Para que serve
Inicia traces do Db2.
Exemplo conceitual
-START TRACE(P) CLASS(1,2,3) DEST(SMF)
Atenção máxima
Classes de trace devem ser escolhidas conscientemente. Ativar classes em excesso pode gerar alto volume de SMF e overhead.
Boa prática
Defina antecipadamente:
por que o trace será iniciado;
qual classe é necessária;
qual destino será utilizado;
quanto tempo ficará ativo;
quem irá pará-lo;
como os registros serão analisados.
27. -START PROFILE
Para que serve
Carrega ou recarrega as profile tables para a memória do Db2.
Exemplo
-START PROFILE
Pegadinha
Alterar as tabelas de profile não significa necessariamente que o Db2 já esteja usando a nova configuração. O reload pode ser necessário.
28. -START RLIMIT
Para que serve
Inicia o Resource Limit Facility.
Exemplo conceitual
-START RLIMIT ID=RLST01
Atenção
A sintaxe exata e a tabela utilizada dependem da configuração da instalação.
29. -START PROCEDURE
Para que serve
Ativa ou atualiza a definição de uma stored procedure no cache.
Exemplo
-START PROCEDURE(MEU_SCHEMA.MINHA_PROC)
Uso interessante
Depois de uma alteração autorizada na definição ou no programa externo, o DBA pode usar o comando para atualizar o estado da procedure.
30. -START FUNCTION SPECIFIC
Para que serve
Inicia uma função externa que foi anteriormente parada.
Exemplo conceitual
-START FUNCTION SPECIFIC(MEU_SCHEMA.FUNCAO01)
Limitação
Aplica-se a funções externas suportadas pelo comando, não a qualquer função built-in do Db2.
31. -START RESTSVC
Para que serve
Inicia um serviço REST que estava parado.
Exemplo
-START RESTSVC(COLLECTION.SERVICO)
Ponto de atenção
Iniciar o serviço não corrige problemas de package, autorização, endpoint, certificado ou SQL interno.
32. -START ACCEL
Para que serve
Notifica o Db2 para utilizar determinado servidor acelerador.
Exemplo conceitual
-START ACCEL(*)
Atenção
Deve fazer parte de um procedimento de administração do accelerator, não de uma tentativa aleatória de “fazer query correr mais rápido”.
33. -START ML
Para que serve
Inicia funções ligadas ao Db2 AI for z/OS ou IBM Z Database Assistant.
Exemplo
-START ML
Dependências
O produto correspondente precisa estar instalado e corretamente configurado.
34. -START OTEL
Para que serve
Inicia as funções OpenTelemetry do Db2.
Exemplo
-START OTEL
Uso
Pode fazer parte de uma estratégia moderna de observabilidade distribuída, correlacionando aplicações externas com processamento dentro do Db2.
35. -START DYNQUERYCAPTURE
Para que serve
Inicia captura e monitoramento de SQL dinâmico qualificado para estabilização de access paths.
Exemplo conceitual
-START DYNQUERYCAPTURE
Vantagem
Ajuda a tornar determinados comportamentos de SQL dinâmico mais previsíveis.
Desvantagem
Introduz administração adicional e exige entendimento sobre quais queries estão sendo capturadas.
Parte III — Comandos para parar componentes
36. -STOP DATABASE
Para que serve
Torna databases ou espaços indisponíveis e fecha seus data sets.
Exemplos
-STOP DATABASE(DBVENDAS)
-STOP DATABASE(DBVENDAS) SPACENAM(TSVENDAS)
-STOP DATABASE(DBVENDAS) SPACENAM(TSVENDAS) MODE(QUIESCE)
Passo a passo seguro
Execute
DISPLAY DATABASE.Identifique aplicações usando o objeto.
Verifique blockers e claims.
Escolha o modo adequado.
Execute o
STOP.Confirme o estado.
Execute a manutenção planejada.
Use
START DATABASEpara restaurar o acesso.
Perigo
Parar um objeto em produção pode causar:
SQLCODE
-904;transações CICS falhando;
jobs batch interrompidos;
filas e reprocessamentos;
indisponibilidade de APIs.
Nunca use MODE(FORCE) apenas porque MODE(QUIESCE) está demorando.
37. -STOP DB2
Para que serve
Encerra o subsistema Db2.
Exemplo
-STOP DB2 MODE(QUIESCE)
Modos importantes
MODE(QUIESCE) tenta realizar uma parada organizada.
MODE(FORCE) força o encerramento e pode exigir maior processamento de restart posteriormente.
Regra Jedi
FORCE não significa “mais rápido e melhor”. Significa “aceito as consequências operacionais de não esperar”.
38. -STOP DDF
Para que serve
Interrompe a interface distribuída do Db2 com TCP/IP ou VTAM.
Exemplo
-STOP DDF
Efeito
As aplicações locais podem continuar funcionando, mas novas conexões distribuídas serão afetadas e conexões existentes dependerão do modo usado.
Perigo
Pode derrubar acesso de APIs, servidores Java, ferramentas de dados e outros subsistemas.
39. -STOP TRACE
Para que serve
Interrompe traces.
Exemplo conceitual
-STOP TRACE(P) TNO(03)
Boa prática
Sempre guarde o identificador do trace retornado no START TRACE.
O erro clássico é começar um trace e depois ninguém saber qual trace deve ser encerrado.
40. -STOP PROFILE
Para que serve
Desativa a função de profiles.
Exemplo
-STOP PROFILE
Atenção
Desativar profiles pode remover proteções, limites ou comportamentos definidos para várias conexões. Não é apenas uma ação técnica neutra.
41. -STOP RLIMIT
Para que serve
Interrompe o Resource Limit Facility.
Exemplo
-STOP RLIMIT
Risco
SQLs que antes eram controlados pelo governor podem passar a executar sem aquela limitação.
42. -STOP PROCEDURE
Para que serve
Impede que o Db2 aceite novas chamadas para uma ou mais stored procedures.
Exemplo
-STOP PROCEDURE(MEU_SCHEMA.MINHA_PROC)
Uso típico
manutenção;
correção emergencial;
stored procedure causando falhas;
preparação para atualização do módulo.
43. -STOP RESTSVC
Para que serve
Impede novas solicitações de descoberta ou invocação de um serviço REST.
Exemplo
-STOP RESTSVC(COLLECTION.SERVICO)
Vantagem
Permite isolar uma API sem necessariamente parar todo o DDF.
Parte IV — Comandos de alteração e controle
44. -ALTER BUFFERPOOL
Para que serve
Altera atributos de buffer pools ativos ou inativos.
Exemplo conceitual
-ALTER BUFFERPOOL(BP8K0) VPSIZE(20000)
Passos recomendados
Execute
DISPLAY BUFFERPOOL.Analise a necessidade.
Avalie memória real e impacto.
Aplique a alteração.
Execute novo
DISPLAY.Monitore paging, hit ratio, I/O e desempenho.
Vantagem
Certos parâmetros podem ser ajustados dinamicamente.
Desvantagem
Aumentar buffer pool indiscriminadamente pode pressionar a memória do sistema e prejudicar o conjunto, mesmo que um objeto isolado pareça melhorar.
45. -ALTER GROUPBUFFERPOOL
Para que serve
Altera atributos de group buffer pools em data sharing.
Exemplo conceitual
-ALTER GROUPBUFFERPOOL(GBP0) ...
Atenção máxima
Mudanças em GBP podem afetar todos os membros e milhares de objetos compartilhados. É território de change control, capacity planning e especialistas em Parallel Sysplex.
46. -ALTER UTILITY
Para que serve
Altera certos parâmetros de uma utility que já está em execução.
Pode ser usado em algumas execuções de:
REORG SHRLEVEL REFERENCE;REORG SHRLEVEL CHANGE;REBUILD SHRLEVEL CHANGE.
Exemplo conceitual
-ALTER UTILITY(UTIL1234) ...
Vantagem
Permite ajustar determinados comportamentos sem terminar e reiniciar toda a utility.
Limitação
Não é possível alterar qualquer parâmetro. Somente opções explicitamente suportadas pela utility e pela fase atual.
47. -MODIFY DDF
Para que serve
Modifica configurações e comportamentos operacionais do DDF.
Exemplo conceitual
-MODIFY DDF PKGREL(BNDOPT)
Possíveis usos
ajustar comportamento de packages;
controlar determinadas características das conexões;
resetar estatísticas;
modificar parâmetros suportados dinamicamente.
Perigo
Uma alteração aparentemente pequena pode afetar milhares de conexões distribuídas.
48. -SET SYSPARM
Para que serve
Altera parâmetros do subsistema que podem ser atualizados online.
Exemplo conceitual
-SET SYSPARM ...
Importante
Nem todo ZPARM é dinâmico.
Alguns parâmetros:
aceitam alteração online;
exigem restart;
dependem de function level;
possuem relacionamentos com outros parâmetros.
Boa prática
Registre tanto a mudança dinâmica quanto a atualização permanente nos parâmetros de instalação. Caso contrário, o valor pode retornar ao anterior no próximo restart.
49. -SET LOG
Para que serve
Controla aspectos críticos do logging.
Pode ser usado para:
alterar frequência de checkpoint;
suspender logging;
retomar logging;
adicionar active log;
remover active log.
A IBM confirma essas funções na documentação do comando. (IBM)
Exemplos conceituais
-SET LOG LOGLOAD(500000)
-SET LOG SUSPEND
-SET LOG RESUME
Perigo extremo
SET LOG SUSPEND não é um botão de pausa casual. Ele participa de procedimentos específicos, frequentemente relacionados a cópias consistentes e operações de storage.
Uma suspensão indevida pode paralisar atualizações e causar um incidente de grandes proporções.
Parte V — Comandos de intervenção, emergência e recuperação
50. -CANCEL THREAD
Para que serve
Cancela o processamento de uma thread local ou distribuída específica.
Procedimento correto
Primeiro localize a thread:
-DISPLAY THREAD(*) TYPE(ACTIVE) DETAIL
Identifique o token.
Depois, somente com autorização:
-CANCEL THREAD(token)
Para determinados casos distribuídos, pode ser usado:
-CANCEL DDF THREAD(token)
A IBM recomenda usar o DISPLAY THREAD DETAIL para identificar uma thread distribuída problemática antes do cancelamento. (IBM)
O que pode acontecer
rollback da unidade de trabalho;
liberação de locks;
abend ou erro na aplicação;
mensagens para CICS, IMS ou cliente remoto;
recuperação de recursos;
aumento temporário de logging pelo backout.
Perigo
Cancelar a thread errada pode derrubar:
fechamento contábil;
processamento de folha;
transferência financeira;
utility;
stored procedure;
transação crítica;
aplicação de outro usuário.
Regra de ouro
CANCEL THREAD não é ferramenta de performance. É uma intervenção operacional.
Seis comandos extras que você precisa conhecer
Embora a lista principal tenha cinquenta comandos, existem comandos que não podem ficar fora do seu radar.
-ARCHIVE LOG
Fecha o active log atual, passa para o próximo e inicia o processo de offload conforme a configuração.
-ARCHIVE LOG
Com quiesce:
-ARCHIVE LOG MODE(QUIESCE)
MODE(QUIESCE) tenta fazer com que as unidades de atualização alcancem commit, criando um ponto consistente antes do arquivamento. Isso pode suspender temporariamente atividades de atualização e deve ser utilizado com planejamento. (IBM)
-TERM UTILITY
Termina uma utility registrada e libera os recursos associados.
-TERM UTILITY(UTIL1234)
Antes:
-DISPLAY UTILITY(UTIL1234)
Perigo
O job pode ter terminado no JES, mas a utility continuar registrada no Db2. Por outro lado, terminar uma utility no momento errado pode deixar objetos em estados restritivos.
-RECOVER INDOUBT
Resolve threads que ficaram indoubt porque Db2 e o coordenador da transação não conseguiram determinar automaticamente se a unidade deveria receber commit ou rollback.
-RECOVER INDOUBT ...
Perigo extremo
Escolher incorretamente entre commit e abort pode gerar inconsistência lógica entre sistemas participantes.
Esse comando exige evidência, coordenação e procedimento de recuperação.
-RECOVER POSTPONED
Completa backout de unidades de recuperação que ficaram como postponed abort durante um restart anterior.
-RECOVER POSTPONED
É um comando de recuperação do subsistema, não um substituto da utility RECOVER.
-RECOVER BSDS
Reestabelece o dual BSDS quando uma das cópias foi desabilitada por erro de data set.
-RECOVER BSDS
O BSDS contém informações vitais sobre logs, checkpoints e restart. Mexer nele sem conhecimento especializado equivale a abrir o painel de navegação da nave durante uma tempestade hyperspace.
-ACCESS DATABASE
Pode forçar a abertura física de espaços, remover certos estados relacionados a GBP ou externalizar informações mantidas em memória, dependendo do MODE.
-ACCESS DATABASE(DBVENDAS) SPACENAM(TSVENDAS) MODE(OPEN)
A sintaxe e os modos devem ser confirmados para o nível específico do Db2.
Um roteiro prático para investigar “RESOURCE UNAVAILABLE”
Considere o erro:
DSNT500I
RESOURCE UNAVAILABLE
REASON 00C90081
TYPE 00000200
NAME DBVENDAS.TSVENDAS
Passo 1 — Não chute
Leia:
reason code;
resource type;
resource name;
horário;
job ou transação afetada.
Passo 2 — Verifique o objeto
-DISPLAY DATABASE(DBVENDAS) SPACENAM(TSVENDAS) RESTRICT
Passo 3 — Procure utility
-DISPLAY UTILITY(*)
Passo 4 — Procure bloqueadores
-DISPLAY BLOCKERS DATABASE(DBVENDAS) SPACENAM(TSVENDAS)
Passo 5 — Verifique threads
-DISPLAY THREAD(*) TYPE(ACTIVE) DETAIL
Passo 6 — Descubra a causa
O objeto pode estar:
parado administrativamente;
aguardando recovery;
esperando COPY;
esperando REORG;
em uso por utility;
bloqueado por aplicação;
restrito por falha anterior.
Passo 7 — Aplique a solução correta
Somente se o objeto estiver apenas parado e houver autorização:
-START DATABASE(DBVENDAS) SPACENAM(TSVENDAS) ACCESS(RW)
Se estiver em RECP, por exemplo, dar START não substitui a recuperação necessária.
Exemplo de execução por JCL
Comandos Db2 podem ser enviados em batch por meio do processador DSN, dependendo das autorizações e da configuração da instalação.
//DB2CMD JOB (ACCT),'DB2 COMMAND',
// CLASS=A,
// MSGCLASS=X,
// NOTIFY=&SYSUID
//*
//CMDSTEP EXEC PGM=IKJEFT01,DYNAMNBR=20
//STEPLIB DD DISP=SHR,DSN=DB2P.SDSNLOAD
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(DB2P)
-DISPLAY DATABASE(DBVENDAS) SPACENAM(TSVENDAS)
-DISPLAY DDF
-DISPLAY LOG
END
/*
Explicação linha por linha
PGM=IKJEFT01
Executa o Terminal Monitor Program do TSO em batch.
DYNAMNBR=20
Reserva alocações dinâmicas para a execução.
STEPLIB
Aponta para a biblioteca de load modules do Db2. O nome varia em cada instalação.
SYSTSPRT
Recebe a saída produzida pela sessão TSO e pelo processador DSN.
SYSPRINT
Recebe mensagens adicionais de programas executados.
SYSUDUMP
Recebe dump em caso de abend.
SYSTSIN
Contém os comandos de entrada para a sessão TSO batch.
DSN SYSTEM(DB2P)
Abre uma sessão com o subsistema indicado.
-DISPLAY ...
Envia o comando operacional ao Db2.
END
Encerra a sessão DSN.
Atenção
Não coloque comandos destrutivos em um JCL genérico deixado em uma biblioteca compartilhada. Um simples submit acidental pode transformar um exemplo didático em incidente.
Tabela de bolso do programador COBOL padawan
| Sintoma | Primeiro comando |
|---|---|
| Objeto indisponível | -DISPLAY DATABASE |
| Programa esperando | -DISPLAY THREAD |
| Suspeita de lock | -DISPLAY BLOCKERS |
| API não conecta | -DISPLAY DDF |
| Utility travada | -DISPLAY UTILITY |
| Problema de logging | -DISPLAY LOG |
| Dúvida sobre nível do Db2 | -DISPLAY GROUP |
| Stored procedure parada | -DISPLAY PROCEDURE |
| Serviço REST indisponível | -DISPLAY RESTSVC |
| Suspeita de trace esquecido | -DISPLAY TRACE |
Erros clássicos de iniciantes
1. Executar START DATABASE para qualquer estado restritivo
Nem todo estado é resolvido por START. Alguns exigem COPY, RECOVER, REORG, REBUILD INDEX, CHECK DATA ou outra utility.
2. Usar CANCEL THREAD sem identificar o dono
O token é apenas o identificador técnico. Você também precisa saber:
qual aplicação;
qual unidade de negócio;
qual transação;
qual impacto;
qual rollback será provocado.
3. Confundir job cancelado com utility terminada
Cancelar o job no JES não garante que todos os recursos e registros da utility foram eliminados do Db2.
4. Usar STOP DATABASE(*)
Curingas são poderosos. Em produção, poder sem escopo é perigo.
5. Usar MODE(FORCE) por impaciência
Se o quiesce não termina, existe uma razão: claims, threads, units of work ou aplicações ainda estão utilizando o recurso.
6. Olhar apenas DSN9022I
O comando pode ter terminado normalmente, mas cada objeto solicitado pode apresentar estado diferente. Leia a resposta completa.
7. Copiar sintaxe de outra versão
Comandos, opções e comportamentos podem variar conforme:
versão;
function level;
APARs e PTFs;
modo data sharing;
parâmetros locais;
produtos adicionais instalados.
O Db2 13 recebe capacidades por function levels e manutenção contínua; portanto, “é Db2 13” não define sozinho todas as funções disponíveis. (IBM)
Vantagens dos comandos do subsistema
resposta operacional imediata;
integração com console e automação;
grande capacidade de diagnóstico;
controle granular de componentes;
suporte a ambientes data sharing;
possibilidade de operação por TSO, SDSF, DB2I e batch;
manutenção sem restart para diversas configurações;
visibilidade sobre threads, locks, logs e utilities.
Desvantagens e riscos
exigem autoridade elevada;
alguns comandos têm impacto sistêmico;
mensagens podem ser complexas;
sintaxe muda conforme o comando;
curingas podem ampliar demais o escopo;
ações forçadas podem gerar longos rollbacks;
alterações dinâmicas podem ser perdidas após restart;
um comando correto no subsistema errado continua sendo um comando perigoso;
data sharing exige atenção ao escopo de membro ou grupo.
O easter egg final: o hífen que separa dois mundos
Para o programador COBOL, o Db2 costuma parecer uma caixa onde entram instruções SQL:
EXEC SQL
SELECT SALDO
INTO :WS-SALDO
FROM CONTA
WHERE NUM_CONTA = :WS-CONTA
END-EXEC.
Mas, por trás dessa consulta, existe uma cidade inteira:
threads sendo criadas;
locks sendo negociados;
pages entrando em buffer pools;
logs registrando mudanças;
checkpoints delimitando recuperação;
utilities reorganizando objetos;
DDF conversando com clientes externos;
IRLM controlando concorrência;
data sharing coordenando membros;
stored procedures executando em ambientes WLM;
traces registrando o caminho percorrido.
Os comandos do subsistema são as janelas da torre de controle dessa cidade.
O programador iniciante não precisa ter autoridade para executar todos eles. Precisa, porém, saber que existem, compreender suas respostas e conversar com operadores, DBAs e sysprogs usando a linguagem correta.
Quando alguém disser:
“A aplicação está travada, vamos cancelar o job.”
O padawan treinado perguntará:
“Já verificamos a thread, o blocker, o estado do tablespace e a utility registrada?”
Nesse instante, ele deixa de ser apenas alguém que escreve EXEC SQL.
Ele começa a compreender o Db2 como subsistema operacional — e dá seu primeiro passo para se tornar um verdadeiro Jedi do mainframe.
A lista segue a referência atual do Db2 13 for z/OS, mas exemplos que alteram o ambiente devem ser ajustados às autorizações, function level e padrões operacionais da instalação. (IBM)