Um certo dia, um dos analistas me pediu pra remover uma tabela do banco de dados, a qual não seria mais utilizada pelo sistema. Então me escreveu: Por favor, remova a tabela xxx. No entanto, a tabela que deveria ser removida era a xxxy, ou seja, outra tabela…… Embora eu tenha sempre um backup à mão e também os scripts de criação de todo banco, o que eu poderia fazer pra rapidamente voltar a tabela para o banco pra que a equipe de desenvolvimento não ficasse parada? Se eu utilizasse o script, os dados estariam perdidos, e se eu voltasse o backup (tirado na noite anterior), todos os dados cadastrados naquela manhã também seriam perdidos. A solução foi usar um importante recurso do Oracle 10g, o FLASHBACK. Com o Flashback, conseguimos recuperar as tabelas que são removidas (dropadas), desde que elas estejam na lixeira.
A forma de se recuperar a tabela é bastante simples:
FLASHBACK TABLE <nome_do_esquema>.”<item_da_lixeira>” TO BEFORE DROP;
O nome do esquema é necessário sempre que você está fazendo uma operação em objetos de outros esquemas. O item da lixeira é o nome da tabela que foi removida. Quando executamos o comando drop table, a tabela não é removida totalmente do banco, ela continua inclusive no mesmo esquema, mas ela recebe um outro nome com o prefixo BIN$$, atribuído pelo próprio SGBD durante a operação de drop. E é esse o nome que iremos usar para recuperá-la, o qual pode ser consultado através da view RECYCLEBIN.
Vamos ver um exemplo:
FLASHBACK TABLE MARY."BIN$$aXTfzqrmrGO0UGOFN34mOw==$0" TO BEFORE DROP;
É importante ressaltar que uma tabela pode ser ainda acessada e consultada após ser dropada, desde que não se limpe a lixeira… Além disso, o Flashback pode ser usado também para recuperar tabelas alteradas por engano, mas isso é assunto pra outro post 🙂
Para relembrar, podemos limpar a tabela excluída por drop com o comando:
PURGE TABLE MARY."BIN$$aXTfzqrmrGO0UGOFN34mOw==$0";
Espero ter contribuído com mais essa dica….
Abraços
Legal este post,na minha prova de OCA caiu uma questão sobre Flashback table.E a pergunta era se a tabela era movida para outra tablespace ou para outro schemae etc.Legal está opção do Oracle!!