Garimpando com Oracle LogMiner: Estatísticas
Dados da mineração!
Com o Oracle LogMiner, é possível minerar os registros e revelar operações, gerando informações úteis e monitoramento rico!
Neste artigo, exploramos juntos essa poderosa ferramenta, passo a passo, de forma prática e didática. Se você quer dominar essa técnica e transformar logs em insights valiosos, clique no link e venha garimpar conhecimento!
O LogMiner é uma ferramenta nativa do Oracle usada para consultar o conteúdo dos arquivos de redo log.
Ele é muito útil para:
- Auditar alterações realizadas nas tabelas (inserts, updates, deletes),
- Recuperar dados perdidos (em alguns casos),
- Monitorar atividades suspeitas ou indesejadas.
Contagem de Operações por Tipo
O objetivo é identificar quantas operações de INSERT, UPDATE, DELETE e COMMIT foram realizadas em um determinado período.
SELECT operation, COUNT(*) AS total_operacoes
FROM V$LOGMNR_CONTENTS
WHERE timestamp BETWEEN TO_DATE('2025-04-07 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('2025-04-07 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
GROUP BY operation
ORDER BY total_operacoes DESC;
Esta estatística ajuda a identificar a carga de DML em horários críticos e pode ser usada para avaliar a necessidade de ajustes de performance ou para detectar atividades anormais.
Operações por Tabela
Saber quais tabelas estão sendo mais alteradas (inserções, atualizações ou deleções).
SELECT seg_name, operation, COUNT(*) AS total_operacoes
FROM V$LOGMNR_CONTENTS
WHERE seg_name IS NOT NULL
GROUP BY seg_name, operation
ORDER BY seg_name, total_operacoes DESC;
Utilizado para identificar tabelas críticas que estão sujeitas a alto volume de alterações, o que pode indicar a necessidade de otimizações, reestruturações ou mesmo revisão dos processos de negócios.
Tempo de Execução das Transações
Calcular o tempo de duração de transações para identificar transações longas que podem afetar a performance.
WITH transacoes AS (
SELECT xidusn || '.' || xidslT || '.' || xidsqn AS transacao,
MIN(timestamp) AS inicio_transacao,
MAX(timestamp) AS fim_transacao
FROM V$LOGMNR_CONTENTS
WHERE operation IN ('INSERT', 'UPDATE', 'DELETE')
GROUP BY xidusn, xidslT, xidsqn
)
SELECT transacao,
inicio_transacao,
fim_transacao,
(fim_transacao - inicio_transacao) * 24 * 60 AS duracao_em_minutos
FROM transacoes
ORDER BY duracao_em_minutos DESC;
Transações com tempo de execução elevado podem ser analisadas para identificar gargalos, bloqueios ou problemas de performance, auxiliando na melhoria do ambiente.
Operações por Usuário
Objetivo
Monitorar qual usuário está executando o maior número de operações DML, o que pode ajudar na auditoria e na identificação de padrões de uso.
SELECT username AS usuario, COUNT(*) AS total_operacoes
FROM V$LOGMNR_CONTENTS
GROUP BY username
ORDER BY total_operacoes DESC;
Identificar usuários com alto volume de atividades pode auxiliar no monitoramento de acessos e na detecção de comportamentos suspeitos ou inadequados.
Distribuição das Transações por Data/Hora
Observar em quais períodos do dia há maior atividade no banco, contribuindo para a gestão de recursos e escalabilidade.
SELECT TO_CHAR(timestamp, 'HH24') AS hora,
COUNT(*) AS total_operacoes
FROM V$LOGMNR_CONTENTS
GROUP BY TO_CHAR(timestamp, 'HH24')
ORDER BY hora;
Aplicação Prática
Esse tipo de estatística é útil para planejar janelas de manutenção ou para ajustar a alocação de recursos de acordo com os períodos de pico.
Conclusão
Esses exemplos demonstram como o LogMiner pode ser uma ferramenta poderosa não só para auditoria, mas também para gerar estatísticas operacionais e de performance, proporcionando insights valiosos para o DBA. Ao incluir esses exemplos no seu artigo, você evidencia como utilizar o LogMiner para monitorar a atividade do banco, identificar gargalos e até detectar possíveis atividades suspeitas. Se precisar de mais exemplos ou detalhes, estou à disposição para ajudar!
Parabens pela serie de artigos esta muito bacana. Os teste que ta fazendo e na sua maquina mesmo?
Olá Geno,
Agradeço muito pelo feedback! Sim, os testes que estou realizando são na minha máquina. Tenho um laboratório montado em uma VM com o banco na versão 19C, e ele tem sido fundamental para colocar em prática o que aprendo. Estou focado na certificação 1Z0-083, e esse ambiente me ajuda bastante.
Se você ainda não tem um laboratório, eu realmente recomendo! É uma ótima maneira de experimentar e aprender.
Abraços!