sábado, junho 27, 2009

Oracle: Comando milagroso ... como recuperar registros apagados

Recuperando registros
alterados/excluídos com Flashback


Você deletou uma informação de uma tabela, apagou tudo,
Esta como esse cara ai do lado ?
Pois é, deve ser realmente ruim apagar por engano uma grande quantidade de dados (ops.... cuide sempre de colocar a clausula where em seus deletes !!!).
Há um recurso no Oracle para que se possa recuperar dados que foram apagados.


A feature para resolver o problema de perda de dados esta disponível nos bancos 9i ou superior - o Oracle Flashback.

A partir da versão 9i do banco, a Oracle introduz o conceito de undo e com ela uma funcionalidade que permite ao usuário errar e ao DBA recuperar um registro muito mais facilmente do que nas versões anteriores.

Digamos que você tenha uns 2999 registros em uma tabela e acaba apagando por engado, e agora ?

Use então o comando abaixo:

SQL> select * from artigo3 as of timestamp systimestamp - interval '5' minute;

Isso fará com que seja exibido os dados da maneira como se encontravam a 5 minutos atrás, se quizer pode aumentar o periodo para recuperar dados mais antigos, como 30 minutos atrás.

Se você quiser salvar estes dados para que não se percam do UNDO, faca um simples insert como se segue:

SQL> insert into artigo3
select * from artigo3 as of timestamp systimestamp - interval '35' minute;

commit;

Referências:
Para maiores informações sobre esta feature, acesse o artigo no site do GPO e o artigo do site iMasters.

22 comentários:

Anônimo disse...

Vc (este comando) salvou vida! Simples assim...

Anônimo disse...

2 vidas salvas, rss

Anônimo disse...

3 e aumentando .... muito bom pensei que teria q voltar o bkp por míseras 2 linhas ...

Bruno

Alexandre disse...

Em uma sexta feira 13 perdendo os dados e encontrar esse script nem acredito. 4 Vidas Salvas, já tava arrumando as coisas para ir na folha eheheh.

Anônimo disse...

5 vidas salvas.

Anônimo disse...

5 vidas salvas e um projeto salvo... você é o CARA!!!

Anônimo disse...

Show de bola. Isso salva vidas!

Anônimo disse...

Muito bom.
Obrigada amigo.

JJ disse...

Muito obrigado amigo pela dica, ajudou muito

Anônimo disse...

Bom dia
Também moro em Curitiba , escolha o lugar e o tanto de chopp que você consiga tomar e vamos lá.. salvou mais uma vida.
Abraço
Alessandro

administrador disse...


Numa sexta-feira, perder dados de linha de produção em ambiente de produção não é mole não.

Salvou mais uma vida, quando vir a Manaus me procure que também lhe pago um chopp.

obrigado

Anônimo disse...

Mais 1

Anônimo disse...

Salvou a vida da minha coordenadora! AUIEHAUIEHAUIE

Samira Elias disse...

O meu não deu certo! alguém poderia me ajudar... desespero on....

Laércio disse...

Se não funcionou não deve estar habilitado esse recurso, o DBA deve ter deixado desabilitado. Nesse caso só falando com ele pra restaurar um backup incremental da tabela.

Unknown disse...

Consegui recuperar uma falta de atenção do usuário. Hehehehe... Comando salva vidas. Viva Oracle

wild disse...

Valeu, ajudou demais em uma desatenção do usuário !! Em BH te pagamos uma cerveja ! kk

Blog da turma disse...

Olá! alguém sabe dizer como seria esse SELECT para pegar uma determinada data? gostaria de recuperar os registros de um determinado mês de 2 anos atrás.
Obrigado!

Anônimo disse...

Bom dia,
Blog da turma,
É impossível, existe um limite de tempo para guarda das informações. Será necessário voltar um backup se assim existir.
qlquer coisa da um toque, 19 993009495

Anônimo disse...

+1 Salvo!

Laércio disse...

Existe um tempo para manter os dados, que o DBA configura. Pode ser de 15 minutos, 50 minutos ou um pouco mais, talvez umas poucas horas (mas dificilmente vai ser tão grande - não espere muito mais do que 2 horas ou vários dias por exemplo).
O motivo é que quanto maior for o tempo que mantem registros antigos, maior é o volume em disco necessário, o que eleva custos.

Anônimo disse...

me ajudou muito parceiro! =)