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

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

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