miércoles, 14 de noviembre de 2012

FlashBack en Oracle


Todos los días se aprende algo nuevo y hoy aprendí algo muy útil! FlashBack en oracle, que en resumen es como una papelera de reciclaje de nuestras tablas.

La idea es que con el lenguaje DDL puedo destruir o crear tablas; cuando borro una tabla, indice o secuencia no tengo rollback, es decir no puedo volver atrás; por suerte existe FlashBack que permite recuperar los objetos como si fueran de una papelera.  También Oracle Flashback Technology provee varias alternativas para ver el estado pasado de los datos, “rebobinando” los datos hacia atrás y adelante sin necesidad de un restore de la base desde un backup.

En este articulo voy a mostrar como deshacer borrados de tablas, veamos un ejemplo. Supongamos que hago un drop de una tabla y me doy cuenta que me equivoque, esto queda en la papelera de reciclaje.

drop table prueba;


select * from recyclebin;

Con este select nos mostrara la tabla que borramos, ahora vamos a restaurarla:

 flashback table prueba to before drop;

Con  flashback table le decimos que queremos recuperar la tabla y con  to before drop que la queremos recuperar después que la borramos.

Si borramos con purge no la envía a la papelera de reciclaje y se borra totalmente.

drop table prueba purge;

Cuando un usuario lanza la orden DROP sobre una tabla, en realidad, lo que hace Oracle es renombrar ese objeto y todas sus dependencias, tales como triggers, índices, constraints etc. El nombre que recibe el objeto es generado automáticamente por Oracle pero siempre está prefijado por BIN$. Como sólo se produce un renombrado, los objetos siguen existiendo y ocupando espacio sus correspondientes tablespaces. El objeto sólo se borra definitavemente si el usuario o el administrador usan el comando PURGE o el espacioocupado por ese objeto es necesario para acomodar una nueva extensión de un objeto vivo (por esto último, se dice que FLASHBACK DROP no es intrusivo ya que si el espacio ocupado por la papelera es necesario se libera automáticamente).Por el contrario, cuando se borra un tablespace sus objetos no son pasados a la papelera sino que son borrados definitivamente, incluyendo los objetos que estén en la papelera de ese tablespace. Lo mismo ocurre cuando se borra un usuario con opción CASCADE.

Dejo link:
http://docs.oracle.com/cd/B28359_01/server.111/b28310/tables011.htm