Pular para o conteúdo

Recuperação de Tabela Dropada no Oracle 10g com Flashback e RecycleBin

Salvo pelo Recycle Bin

Fala PessoAll,

Bom, esses dias me deparei com um pequeno problema e graças a um recurso do Banco de Dados Oracle, a partir de sua versão 10g, eu consegui me safar.

Bom, estavamos nós (eu e mais um desenvolvedor) alterando um processo e vimos que no nosso processo uma determinada tabela não era mais necessária, aí conclusão: remove esse lixo! aí vamos nós com aquele velho e bonito comando:

SQL
drop table nossa_tabela;

Pronto, tabela dropada.

Para quem não sabe, este comando no Oracle elimina(va) completamente a tabela do banco de dados e você não conseguiria mais (por vias normais e com permissão de um simples mortal desenvolvedor) trazer ela de volta. O que fazer neste caso? Ir falar com aquele simpático e prestativo amigo DBA para voltar um backup e importar apenas esta tabela que se você tiver sorte e ela não for muito utilizada estará com dados da madrugada (teoricamente a hora em que os backups são feitos),

Bom, depois do drop concluído, tentamos compilar o procedimento que estavamos atualizando e… advinha? Lei de Murphi, a tabela era usada em um gigalhão de lugares da rotina e nós não tinhamos visto! mas… graças a era Pós-Oracle 10g e suas new features, “nossos problemas se acabaram-se”.

Existe no 10g um recurso chamado flashback e um local chamado RecycleBin, que no momento em que uma tabela é dropada o banco a mantém por lá, ou seja, quando você dropa, ele grava um registro numa tabela chamada recyclebin (pode ser acessada através do comando select * from recyclebin) informando que a tabela foi “dropada”, qual o novo nome dela e qual era seu nome antigo, como mostrado no registro a seguir:

SQL
OBJECT_NAME                   ORIGINAL_NAME       ...
-----------                   -------------       ...
BIN$ssRbdlWRsCZm8/FvurZ2w==$0 PERMISSAO_USUARIOS

PS: esta tabela possui mais algumas informações como hora do drop, se pode recuperar a tabela, estou mostrando apenas o nome atual e nome original.

Depois de saber disso, podemos facilmente ressucitar esta tabela para que ela volte a ser como era antes, para tal, basta apenas executarmos o comando:

SQL
flashback table PERMISSAO_USUARIOS before drop;

E em seguida, teremos a tabela de volta, do lugar de onde nunca deveria ter saído! Rsrsrs.

Espero que esta dica ajude alguns desenvolvedores que por falta de experiência, por falta de atenção ou por confiar na análise de outro desenvolvedor (meu caso) façam uma dessas.
Boa sorte a todos e lembrem: “Deus protege as criancinhas e os desenvolvedores!”.

Atc.

gersonjr

gersonjr

Comentário(s) da Comunidade

  1. Avatar de antonioDBA

    Olá Gerson! Ótimo post amigo! Realmente a era “pós-10g” é que nem Jesus no mundo: Veio para nos salvar de todos nossos erros/pecados!

    Abraços kra.

  2. Avatar de Ishii

    Gerson,

    Tenho trabalhado num tipo de CVS para esses casos… Um pessoal que conheço dropou a tabela e suas triggers… no caso do Flashback retorna mas como isso foi descoberto depois de uns 2 meses que a trigger estava com o codigo correto mas na tabela errada… o jeito foi refazer…

    Quando tiver novidades sobre o meu CVS te aviso…

    Abraços

Deixe um comentário

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

plugins premium WordPress