Esta feature de flashback table permite que uma tabela “acidentalmente” dropada possa ser recuperada.
Trata-se de um conceito análogo ao da lixeira do Windows.
Esse conceito foi introduzido no Oracle 10g e para que o procedimento funcione deve estar configurado o parametro de inicialização RECYCLEBIN.
Para habilitar e desabilitar o Recycle bin:
Como desabilitar
1 2 3 | SQL> ALTER SESSION SET recyclebin = OFF ; SQL> ALTER SYSTEM SET recyclebin = OFF ; |
Como habilitar
1 2 3 | SQL> ALTER SESSION SET recyclebin = ON ; SQL> ALTER SYSTEM SET recyclebin = ON ; |
Habilitando e desabilitando o recycle bin com o ALTER SYSTEM ou ALTER SESSION efetiva a alteração imediatamente. Porem ao desabilitar o recycle bin não limpa os objetos já existentes na lixeira.
Irei mostrar no exemplo a seguir todo o processo e como limpar a lixeira (recyclebin):
Vamos efetuar a análise por meio de exemplos.
1. Certifique que a sua base está configurada para o recycle bin
1 2 3 4 5 | SQL> show parameter recyclebin NAME TYPE VALUE --------------- ----------- --------- recyclebin string ON |
2. Crie uma tabela chamada TABELATESTE:
1 2 3 4 5 | SQL> select * from tab; TNAME TABTYPE CLUSTERID ------- ------- --------- TABELATESTE TABLE |
3. “Acidentalmente”, drope a tabela TABELATESTE:
1 2 | SQL> drop table TABELATESTE; Table dropped. |
“Ups !!! dropei a tabela errada …”
4. Verifique o que ocorreu com a tabela recém eliminada:
1 2 3 4 5 | SQL> select * from tab; TNAME TABTYPE CLUSTERID -------------------- ------------ ----------- BIN$04LhcpndanfgMAAAAAANPw==$0 Table |
5. Verifique a lixeira:
1 2 3 4 5 | SQL> show recyclebin ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ------------- ------------------------------ ------------- ------------- TABELATESTE BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE 2011-10-02 21:13:31 |
6. Ressuscite a tabela recém-eliminada:
1 2 | SQL> FLASHBACK TABLE TABELATESTE TO BEFORE DROP ; FLASHBACK COMPLETE. |
7. Verifique se a tabela está devolta:
1 2 3 4 5 | SQL> SELECT * FROM TAB; TNAME TABTYPE CLUSTERID ------- ------- --------- TABELATESTE TABLE |
8. Para limpar a lixeira, ou remover tabelas da lixeira, ou remover todas as tabelas eliminadas de um tablespace, respectivamente:
1 2 3 4 | PURGE RECYCLEBIN; PURGE TABLE TEST; PURGE TABLE "BIN$04LhcpndanfgMAAAAAANPw==$0" ; PURGE TABLESPACE USSERS; |
9. Para eliminar a tabela em definitivo, de uma só vez:
1 | DROP TABLE TABELATESTE PURGE; |
10. Agora tais se perguntando se queres restaurar a tabela com outro nome ou mesmo já tens outra tabela criada como TABELATESTE.
01 02 03 04 05 06 07 08 09 10 | SQL> FLASHBACK TABLE TABELATESTE TO BEFORE DROP RENAME TO TABELA_20111002; Flashback complete. SQL> select * from tab; TNAME TABTYPE CLUSTERID --------------- ------- --------- TABELATESTE TABLE TABELA_20111002 TABLE |
Obs.: Quando uma tabela é dropada sem efetuar o purge, qualquer segmento adicional da tabela (tal como indices ou LOBs) são também renomeada e armazenadas na lixeira (recyclebin).
No entento, quando a tabela é recuperada da lixeira, os segmentos adicionais não são renomeados.
Fonte: (FLASHBACK TABLE) Oracle® Database SQL Reference – 10g Release 2 (10.2) Part Number B14200-02
(PURGE) Oracle® Database SQL Reference – 10g Release 2 (10.2) Part Number B14200-02

Autor: Rafael Stoever
Bacharel em Sistema de Informação pela Uniasselvi, atualmente cursando Gerenciamento de Projetos em TI pela Pós Graduação Uniasselvi. Atuo como Analista de suporte a banco de dados – DBA pela Lumina Serviços em TI residente de Blumenau/ SC, OPN Certified Specialist, Certificado OCP 10g/11g/12c, OCE RAC10g e Linux 10g. Conhecimentos em Microsoft SqlSever, Mysql e programação web (php,asp).
2 thoughts on “Flashback table”