Monitorando Recursos no Oracle: Sessões e Processos com Alertas Automatizados


No gerenciamento de bancos de dados Oracle, acompanhar o uso de recursos como sessões (sessions
) e processos (processes
) é essencial para garantir a estabilidade e evitar erros como "ORA-00020: maximum number of processes exceeded".
Neste artigo, apresento uma query SQL simples para verificar o uso desses recursos e sugiro como transformá-la em um monitoramento automatizado que registra alertas no alert log quando o uso ultrapassa 80%.
Script SQL que você pode executar para obter uma visão instantânea dos recursos:
SELECT RESOURCE_NAME, CURRENT_UTILIZATION, MAX_UTILIZATION, LIMIT_VALUE
FROM V$RESOURCE_LIMIT
WHERE RESOURCE_NAME IN ('sessions', 'processes');
O Que Ela Faz?
Essa query consulta a visão dinâmica v$resource_limit
, que fornece informações sobre os limites de recursos do banco. Ela filtra apenas sessions
e processes
, retornando:
RESOURCE_NAME
: Nome do recurso (sessions
ouprocesses
).CURRENT_UTILIZATION
: Uso atual do recurso.MAX_UTILIZATION
: Pico de uso desde a última inicialização.LIMIT_VALUE
: Limite máximo configurado (definido pelos parâmetrossessions
eprocesses
).
A subquery é opcional neste caso, mas mantém a estrutura flexível para expansões futuras (ex.: adicionar filtros ou joins).
Exemplo de Saída
Ao executar, você pode ver algo assim:
RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION LIMIT_VALUE
------------- ------------------- -------------- -----------
processes 150 200 300
sessions 280 300 330
Nesse exemplo fictício:
processes
: 150 em uso, pico de 200, limite de 300.sessions
: 280 em uso, pico de 300, limite de 330.
Por Que Isso é Útil?
Visão Rápida: Mostra o estado atual e histórico de
sessions
eprocesses
.Planejamento: O
MAX_UTILIZATION
ajuda a decidir se os limites precisam ser ajustados.Diagnóstico: Se usuários relatam falhas de conexão, você pode verificar se os recursos estão esgotados.
Como Usar?
Execute a query como um usuário com acesso à v$resource_limit
(ex.: DBA ou com SELECT_CATALOG_ROLE
). Os resultados aparecem diretamente no console da sua ferramenta (SQL*Plus, SQL Developer, etc.).
Interpretando os Resultados
CURRENT_UTILIZATION
alto: Se está perto deLIMIT_VALUE
(ex.: 280/330 = 84,8% parasessions
), o banco pode estar próximo de um gargalo.MAX_UTILIZATION
no limite: Indica que o recurso já foi totalmente utilizado em algum momento.Ação: Aumente os parâmetros (ex.:
ALTER SYSTEM SET processes=400 SCOPE=SPFILE;
) se necessário, seguido de um restart.
Sugestão: Monitoramento Automatizado com Alert Log
Para transformar essa query em um monitoramento proativo, você pode criar um job no Oracle Scheduler que roda a cada 15 minutos, verifica se o uso ultrapassa 80% do limite e registra um alerta no alert log do banco. Aqui está como fazer isso:
Passo 1: Criar o Procedimento
Crie um procedimento PL/SQL que verifica os recursos e escreve no alert log usando DBMS_SYSTEM.KSDWRT
:
CREATE OR REPLACE PROCEDURE check_resource_limits AS
BEGIN
FOR rec IN (
SELECT RESOURCE_NAME, CURRENT_UTILIZATION, LIMIT_VALUE
FROM V$RESOURCE_LIMIT
WHERE RESOURCE_NAME IN ('sessions', 'processes')
) LOOP
IF rec.current_utilization > (rec.limit_value * 0.8) THEN
-- Escreve no alert log (nível 2 = mensagem de alerta)
DBMS_SYSTEM.KSDWRT(2, 'ALERTA: ' || rec.resource_name ||
' está acima de 80% do limite! Uso: ' ||
rec.current_utilization || '/' || rec.limit_value ||
' em ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
END IF;
END LOOP;
END;
/
Passo 2: Criar o Job no Scheduler
Agende o procedimento para rodar a cada 15 minutos:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'MONITOR_RESOURCE_LIMITS',
job_type => 'STORED_PROCEDURE',
job_action => 'CHECK_RESOURCE_LIMITS',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=MINUTELY;INTERVAL=15',
enabled => TRUE,
comments => 'Monitora sessions e processes a cada 15 minutos'
);
END;
/
Como Funciona?
O job executa o procedimento
check_resource_limits
a cada 15 minutos.Se
CURRENT_UTILIZATION
exceder 80% deLIMIT_VALUE
, uma mensagem é escrita no alert log do banco (ex.:alert_<SID>.log
), que fica no diretório definido pelo parâmetrodiagnostic_dest
.Exemplo de entrada no alert log:
Fri Mar 28 14:30:00 2025 ALERTA: sessions está acima de 80% do limite! Uso: 280/330 em 28-MAR-2025 14:30:00
Verificando o Alert Log
Localize o alert log com:
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Default Trace File';
Abra o arquivo (ex.:
alert_ORCL.log
) e procure pelas mensagens de alerta.
Benefícios do Monitoramento
Proatividade: Detecta problemas antes que os limites sejam atingidos.
Histórico: O alert log mantém um registro permanente para análise posterior.
Automação: Não exige intervenção manual após configurado.
Conclusão
Essa query simples é um ponto de partida excelente para monitorar sessions
e processes
, e com o job sugerido, você transforma um diagnóstico manual em um sistema de alerta automatizado. Configure o monitoramento no seu ambiente e fique tranquilo sabendo que o alert log vai te avisar se algo estiver fora do normal. Testou? Compartilhe nos comentários como você monitora recursos no seu banco!
Subscribe to my newsletter
Read articles from Sergio Bender directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by