Flashback table

Recycle Bin Full 150x150 Flashback tableEsta 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

%name Flashback table

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).