martes, 1 de marzo de 2016

FLASHBACK TABLE EXAMPLE

sql> alter user hr account unlock;
sql> alter user hr identified by hr;
sql> connect hr/hr;
sql> create table prueba as (select * from employees);
sql> select count(*) from prueba;
sql> drop table prueba;
sql> select * from prueba;
sql> flashback table prueba to before drop;
sql> create table prueba as (select * from employees);
sql> drop table prueba;
sql> show recyclebin;
sql> purge recyclebin;


Borrado e Investigación de Recycle Bin

scott@LAB10G> DROP TABLE emp_flash;
Tabla borrada.
scott@LAB10G> SHOW RECYCLEBIN;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE
---------------- ------------------------------ ------------
DROP TIME
-------------------
EMP_FLASH        BIN$sOdkxF+YR8C+UxoQnqCdPQ==$0 TABLE
2007-08-30:15:59:29
scott@LAB10G> SELECT object_name, original_name, type FROM recyclebin;
OBJECT_NAME                    ORIGINAL_NAME   TYPE
------------------------------ --------------- ----------
BIN$w0Kbu7YCT+itQjl0RD9PCQ==$0 EMP_FLASH_TRG   TRIGGER
BIN$sOdkxF+YR8C+UxoQnqCdPQ==$0 EMP_FLASH       TABLE
BIN$yfqwjE40Q+ueUv019AJaSA==$0 EMP_FLASH_PK    INDEX
Observamos que cuando ejecuto el comando SHOW RECYCLEBIN solo veo el objeto “padre” y no los objetos asociados. Para ver todos los objetos borrados debo consultar la vista RECYCLEBIN.

Recupero con Flashback DROP

scott@LAB10G> FLASHBACK TABLE emp_flash TO BEFORE DROP;
Flashback terminado.
scott@LAB10G> SHOW RECYCLEBIN;
scott@LAB10G> SELECT object_name, original_name, type FROM recyclebin;
ninguna fila seleccionada
scott@LAB10G> SELECT count(1) FROM emp_flash;
  COUNT(1)
----------
        6
scott@LAB10G> SELECT object_name, object_type
 2  FROM user_objects WHERE object_name like 'EMP_FLASH%';
OBJECT_NAME                    TYPE
------------------------------ ----------
EMP_FLASH                      TABLE
scott@LAB10G> SELECT index_name, index_type
 2*  FROM user_indexes WHERE table_name = 'EMP_FLASH';
INDEX_NAME                     INDEX_TYPE
------------------------------ ---------------------------
BIN$yfqwjE40Q+ueUv019AJaSA==$0 NORMAL
scott@LAB10G> SELECT name, type
 2*  FROM user_dependencies WHERE referenced_name = 'EMP_FLASH';
NAME                           TYPE
------------------------------ ----------
BIN$w0Kbu7YCT+itQjl0RD9PCQ==$0 TRIGGER
scott@LAB10G> ALTER INDEX "BIN$yfqwjE40Q+ueUv019AJaSA==$0" RENAME TO emp_flash_pk;
Indice modificado.
scott@LAB10G> ALTER TRIGGER "BIN$w0Kbu7YCT+itQjl0RD9PCQ==$0" RENAME TO emp_flash_trg;
Disparador modificado.
scott@LAB10G> ALTER TRIGGER emp_flash_trg COMPILE;
Disparador modificado.
scott@LAB10G> SELECT object_name, object_type
  2  FROM user_objects WHERE object_name like 'EMP_FLASH%';
OBJECT_NAME                    TYPE
------------------------------ ----------
EMP_FLASH                      TABLE
EMP_FLASH_PK                   INDEX
EMP_FLASH_TRG                  TRIGGER
Cuando una tabla es recuperada desde el Recycle Bin, se restaura la tabla y se renombra automáticamente con su nombre original.
Los objetos asociados como los índices, constraints o triggers también son restaurados, pero sus nombres originales no se recuperan, lo que significa que siguen siendo de la forma BIN$.
Una vez que finalizamos la operación de FLASHBACK no hay manera de averiguar los nombres originales de estos objetos. Por lo tanto siempre es buena idea consultarlos antes de realizar el recupero, entonces luego del FLASHBACK DROP de la tabla podemos hacer un RENAME de los objetos asociados a su nombre original.

Más de una versión en Recycle Bin

scott@LAB10G> DROP TABLE emp_flash;
Tabla borrada.
scott@LAB10G> CREATE TABLE emp_flash AS (select * from emp where empno > 7700);
Tabla creada.
scott@LAB10G> DROP TABLE emp_flash;
Tabla borrada.
scott@LAB10G> SHOW RECYCLEBIN;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE
---------------- ------------------------------ ------------
DROP TIME
-------------------
EMP_FLASH        BIN$4PK0jfk4R1uFiZLIQ7HHIg==$0 TABLE
2007-08-30:16:55:41
EMP_FLASH        BIN$C+EJy7/qThipip4yLQM8fQ==$0 TABLE
2007-08-30:16:54:59
scott@LAB10G> SELECT object_name, original_name, type, droptime, base_object FROM RECYCLEBIN;
OBJECT_NAME                    ORIGINAL_NAME   TYPE
------------------------------ --------------- ----------
DROPTIME            BASE_OBJECT
------------------- -----------
BIN$4PK0jfk4R1uFiZLIQ7HHIg==$0 EMP_FLASH       TABLE
2007-08-30:16:55:41       53938
BIN$PyLtYlEpTPOUVUDbW/vTrQ==$0 EMP_FLASH_PK    INDEX
2007-08-30:16:54:59       53934
BIN$DTlnXxLtQ0u5d4XPW9auZQ==$0 EMP_FLASH_TRG   TRIGGER
2007-08-30:16:54:59       53934
BIN$C+EJy7/qThipip4yLQM8fQ==$0 EMP_FLASH       TABLE
2007-08-30:16:54:59       53934
scott@LAB10G> FLASHBACK TABLE "BIN$C+EJy7/qThipip4yLQM8fQ==$0" TO BEFORE DROP RENAME TO emp_flash_v1;
Flashback terminado.
scott@LAB10G> FLASHBACK TABLE "BIN$4PK0jfk4R1uFiZLIQ7HHIg==$0" TO BEFORE DROP RENAME TO emp_flash_v2;
Flashback terminado.