Flashback de Oracle, un ejemplo práctico
Desde la versión 9i de Oracle contamos con una funcionalidad que nos permite recuperar la base de datos contra herrores humanos. Esta funcionalidad es denominada como FlashBack, la cual nos va a permitir conocer el estado de un dato trasladado a un instante anterior en el tiempo.
Por ejemplo, pongamonos en un caso real que me pasó la semana pasada. Un usuario, Pepito, actualizó por error mediante una interfaz customizada de Oracle Aplicaciones 9000 tareas pendientes asignandoselas a un único usuario. Se puso en contacto con nosotros y lo primero que hicimos fue ver si la actualización que se llevó a cabo se había guardado en alguna tabla de auditoria como pudiera ser la tabla jtf_task_audit_b, pero no hubo suerte, la actualización se hizo mediante un UPDATE normal y corriente. Como segunda opción pensamos en utilizar el dataguard pero ya era tarde, los datos ya estaban actualizados.
La solución más interesante consistió en utilizar la potencia de los Flasback de Oracle. Lo que hicimos fue recuperar las tareas actualizadas por Pepito en el día de hoy y crear una tabla temporal con el estado de dichas tareas, tal y como se encontraban antes de la actualización masiva llevada a cabo por Pepito:
CREATE TABLE APPS.XXZZ_TAREAS_BACKUP AS SELECT * FROM jtf_tasks_b AS OF TIMESTAMP TO_TIMESTAMP('2011-06-14 15:00:00', 'YYYY-MM-DD HH24:MI:SS') WHERE task_id IN ( SELECT task_id FROM jtf_tasks_b --tareas de la tabla de tareas WHERE TRUNC(last_update_date) = TRUNC(SYSDATE) --tareas actualizadas hoy AND last_updated_by = 1378 --tareas actualizadas por el usuario pepito ) |
A partir de aquí la reconstrucción ya es cosa de algunos updates.