Pular para o conteúdo

Aprenda a Usar o LogMiner para Recuperar Dados Perdidos no Oracle

Como Recuperar Dados Perdidos com o LogMiner: Um Guia Prático e Acompanhado

A recuperação de dados perdidos em um banco de dados Oracle é uma situação que muitos DBAs enfrentam em seu dia a dia. Seja devido a uma exclusão acidental ou a um erro inesperado, o impacto pode ser significativo no ambiente de produção. No entanto, essas situações podem ser resolvidas de forma eficaz e ágil com o uso do LogMiner, uma poderosa ferramenta integrada ao Oracle Database. Este artigo apresenta um guia prático e detalhado para ajudá-lo a recuperar dados excluídos, destacando cada etapa de maneira clara e objetiva. Ao seguir este passo a passo, você verá como o LogMiner pode ser uma solução indispensável para manter a integridade do seu banco de dados e garantir a segurança das informações sob sua responsabilidade.

Cenário Prático: Recuperando um Registro Excluído

Para ilustrar, vamos criar uma tabela de exemplo e inserir um registro:

image 10
CREATE TABLE
SQL
CREATE TABLE TBL_BAU (
    id NUMBER PRIMARY KEY,
    nome VARCHAR2(50)
);


INSERT INTO TBL_BAU (id, nome) VALUES (1, 'Tampa');
INSERT INTO TBL_BAU (id, nome) VALUES (2, 'Chave');


COMMIT;

Agora, vamos simular a exclusão acidental desse registro:

image 12
DELETE
SQL
DELETE FROM TBL_BAU WHERE id = 1;

COMMIT;

Neste momento, o dado foi removido da tabela, mas as informações da transação permanecem registradas nos redo logs e, em ambientes com ARCHIVELOG, nos archive logs.

Recuperando Dados com LogMiner – Passo a Passo no Seu Ambiente Oracle

  • Ambiente com ARCHIVELOG ativo.
  • Online Redo Logs com SEQUENCE# atual: 89 (CURRENT).
  • Último ARCHIVED LOG disponível: SEQUENCE# = 88 (grupo 1).

Os passos serão:

  • Habilitar o Supplemental Logging (se ainda não estiver ativo).
  • Usar LogMiner para analisar os logs arquivados.
  • Identificar e recuperar uma exclusão acidental.

Adicionar mais de um arquivo de redo log, se necessário? Sim, é possível adicionar vários arquivos no LogMiner!

1. Ativar o Supplemental Logging (se ainda não estiver ativo)

Esse passo é fundamental para garantir que os redo logs tenham dados suficientes para gerar o SQL_UNDO:

image 14
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
SQL
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

2. Verificar os arquivos disponíveis

image 16
V$LOG + V$LOGFILE

Arquivos Online (V$LOG + V$LOGFILE):

SQL
SELECT l.GROUP#, l.SEQUENCE#, l.STATUS, lf.MEMBER
FROM V$LOG l
JOIN V$LOGFILE lf ON l.GROUP# = lf.GROUP#;

Último Archive Log:

SQL
SELECT THREAD#, SEQUENCE#, NAME
FROM (
  SELECT THREAD#, SEQUENCE#, NAME
  FROM V$ARCHIVED_LOG
  WHERE COMPLETION_TIME IS NOT NULL
  ORDER BY COMPLETION_TIME DESC
)
WHERE ROWNUM = 1;

3. Iniciar o LogMiner e adicionar os arquivos de log

Você pode adicionar um ou mais arquivos . Use DBMS_LOGMNR.ADD_LOGFILE com NEW para o primeiro e ADDFILE para os demais, se quiser incluir logs de outras sequências (como 87, 88 e até 89, se arquivado).

image 18
ADICIONAR OS ARQUIVOS
SQL
BEGIN
  DBMS_LOGMNR.ADD_LOGFILE(
    LOGFILENAME => '/u02/FRA/orcl/ORCL/archivelog/2025_04_16/o1_mf_1_89_mzzq1khy_.arc',
    OPTIONS     => DBMS_LOGMNR.NEW
  );

  DBMS_LOGMNR.ADD_LOGFILE(
    LOGFILENAME => '/u02/oradata/orcl/ORCL/onlinelog/o1_mf_3_mybfzhrt_.log',
    OPTIONS     => DBMS_LOGMNR.NEW
  );
END;
/

4. Iniciar o LogMiner

Utilizando o dicionário online (forma mais simples):

image 20
INICIAR LOGMINER
SQL
BEGIN
  DBMS_LOGMNR.START_LOGMNR(
    OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG
  );
END;
/

5. Consultar as transações de deleção na tabela alvo

Agora você consulta o conteúdo minerado:

image 22
V$LOGMNR_CONTENTS
SQL
SELECT SCN, TIMESTAMP, SQL_REDO, SQL_UNDO, OPERATION, SEG_NAME
FROM V$LOGMNR_CONTENTS
WHERE UPPER(SEG_NAME) = 'TBL_BAU'
  AND OPERATION = 'DELETE';

Se não aparecer nada: tente adicionar arquivos anteriores com ADDFILE, ou confira se o supplemental logging estava ativo antes da exclusão. 

6. Recuperar o registro usando SQL_UNDO

Você verá algo como:

SQL_UNDO: INSERT INTO “SCHEMA”.”TBL_BAU”(“ID”,”NOME”) VALUES (1,’Tampa’);

Execute:

image 24
RECUPERANDO REGISTRO
SQL
INSERT INTO USR_BICUDO.TBL_BAU (id, nome) VALUES (3, 'Fechadura');

COMMIT;

7. Encerrar o LogMiner

Após restaurar o dado, finalize a sessão:

image 26
END_LOGMNR
SQL
BEGIN
  DBMS_LOGMNR.END_LOGMNR;
END;
/

Conforme exploramos ao longo deste artigo, o LogMiner se mostra uma ferramenta valiosa no arsenal de um DBA para lidar com situações de perda de dados. Ao dominar seu uso, você estará equipado para agir rapidamente em momentos críticos, minimizando impactos e mantendo a confiança no seu ambiente de produção. Mais do que um simples tutorial técnico, este guia foi desenvolvido para integrar práticas reais e aplicáveis à rotina do DBA.

Esperamos que, ao concluir esta leitura, você esteja ainda mais confiante na sua capacidade de proteger e recuperar informações vitais. Lembre-se: cada minuto conta, e ferramentas como o LogMiner existem para transformar desafios em soluções rápidas e eficazes.

Tercio Haring

Tercio Haring

Tércio Haring é pai do Max e um entusiasta incansável de TI. Sua paixão pelo próximo o levou a ser socorrista, sempre pronto para ajudar. No universo da tecnologia, seu objetivo vai além de simplesmente compartilhar conhecimento; ele busca manter sua mente conectada ao futuro e abraçar os desafios como oportunidades disfarçadas. Escreve com o objetivo de tornar o complexo mundo dos bancos de dados mais acessível e compreensível, sempre com um toque de humor para tornar a jornada mais leve e divertida. Se você procura insights valiosos, explicações claras e, claro, algumas boas risadas, Tércio é a pessoa certa para te guiar. Junte-se a ele para explorar, aprender e crescer nesse vasto e fascinante universo Oracle!

Comentário(s) da Comunidade

  1. Bom artigo!
    Você não acha que com a IA,a tendencia é que esse trabalho operacional acabe desparecendo ou pelo menos chegando a níveis minímos?

  2. Avatar photo

    Olá, Zaney!
    Acredito que a questão não é ‘se’, mas sim ‘quando’ isso acontecerá.
    Na minha humilde opinião, um profissional deve conhecer bem a ferramenta com a qual está trabalhando. É fundamental ter um profundo entendimento de sua arquitetura e conhecer suas limitações. Isso é algo que a IA ainda não consegue fazer.

Prestigie o autor e deixe o seu comentário:

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações: