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
SQL> ALTER SESSION SET recyclebin = OFF; SQL> ALTER SYSTEM SET recyclebin = OFF;
Como habilitar
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
SQL> show parameter recyclebin NAME TYPE VALUE --------------- ----------- --------- recyclebin string ON
2. Crie uma tabela chamada TABELATESTE:
SQL> select * from tab; TNAME TABTYPE CLUSTERID ------- ------- --------- TABELATESTE TABLE
3. “Acidentalmente”, drope a tabela TABELATESTE:
SQL> drop table TABELATESTE; Table dropped.
“Ups !!! dropei a tabela errada …”
4. Verifique o que ocorreu com a tabela recém eliminada:
SQL> select * from tab; TNAME TABTYPE CLUSTERID -------------------- ------------ ----------- BIN$04LhcpndanfgMAAAAAANPw==$0 Table
5. Verifique a lixeira:
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:
SQL> FLASHBACK TABLE TABELATESTE TO BEFORE DROP; FLASHBACK COMPLETE.
7. Verifique se a tabela está devolta:
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:
PURGE RECYCLEBIN; PURGE TABLE TEST; PURGE TABLE "BIN$04LhcpndanfgMAAAAAANPw==$0"; PURGE TABLESPACE USSERS;
9. Para eliminar a tabela em definitivo, de uma só vez:
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.
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”