GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

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:

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:

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:

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.

Share

You may also like...

4 Responses

  1. antonioDBA disse:

    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. Ishii disse:

    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

  3. Legal. Um CVS específico para objetos de banco é uma boa.

    Atc.
    Gerson Júnior

  4. Igor Marinho disse:

    Com certeza é um ótimo recurso!!
    Bom saber que ele existe e como usa-lo!
    Vlw.

Deixe um comentário

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