Inicio » Oracle » Backup/Restore » Flashback Query

Flashback Query

Las opciones básicas están disponibles desde la versión 9i de Oracle: se puede consultar la base de datos en punto específico del pasado. El principio de flashback query es especificar en la consulta un momento específico en el tiempo, el cual se mapea en el sistema en un SCN (system change number) y siempre que la consulta encuentre un bloque que ha sido cambiado desde ese SCN, se irá al segmento de UNDO para extraer el dato de uno necesario para hacer el cambio de rollback. Este rollaback es totalmente temporal, y es solo accesible en la sesión que está ejecutando el flashback query. Para que el Flashback query tenga éxito es necesario el dato de undo este disponible. En las últimas versiones de Oracle está funcionalidad se ha ido incrementando, ahora se puede utilizar para recuperar transacciones individuales, o revertir cambios en la base de datos y devolver todas las versiones de un registro. Es posible garantizar que flashback siempre se podrá hacer, pero esto implica que pueden fallar otras transacciones.

Consultas Básicas de Flasckback

Cualquier sentencia de select puede obtener la versión de de la tabla

Partiendo de este ejemplo:

SQL> select to_char(sysdate,'dd-mm-yy hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'
-----------------
02-02-12 10:08:56
SQL> delete from provincias where  descripcion = 'Lerida';
1 rows deleted.
SQL> commit;
Commit complete.
SQL> select * from provincias;
ID_PROVINCIA DESCRIPCIO
------------ ----------
           1 Tarragona
           2 Gerona
           3 Barcelona
 SQL> select * from provincias as of timestamp to_timestamp('02-02-12 10:08:56','dd-mm-yy hh:mi:ss');
ID_PROVINCIA DESCRIPCIO
------------ ----------
           1 Tarragona
           2 Gerona
           3 Barcalona
           4 Lerida
SQL> select * from provincias as of timestamp to_timestamp('02-02-12 10:08:56','dd-mm-yy hh24:mi:ss') minus select * from provincias;
ID_PROVINCIA DESCRIPCIO
------------ ----------
           4 Lerida

Primero  obtenemos el tiempo. Luego borramos un registro y guardamos los cambios. La consulta nos confirma que solo existen 3 columnas en la tabla. El siguiente query se hace directamente contra la tabla para saber cómo era en un lugar en el tiempo determinado, vemos que tenía cuatro registros. Para hacer este select se utiliza los datos de undo. El último query combina datos de históricos con actuales. Estos queries se utilizan para reparar errores,; se obtiene los datos anteriores y se actualizan en la tabla. También  existe la opción volver a tras toda la sesión utilizando el paquete DBMS_FLASHBACK:

SQL> execute dbms_flashback.enable_at_time( to_timestamp('02-02-12 14:43:57','dd-mm-yy hh24:mi:ss'));
PL/SQL procedure successfully completed.
SQL>

Esto regresa LA SESIÓN y solo sesión al momento de tiempo determinado. Las demás sesiones verán los datos anteriores, esto se mantendrá hasta que se cancele el flashback:

SQL> execute dbms_flashback.disable;
PL/SQL procedure successfully completed.
SQL>

Mientras que está en modo flashback, es imposible ejecutar comandos  DML, si se intenta  se provocará un error. Solamente se puede ejecutar comandos SELECT. De el tamaño de los segmentos de Undo y el contenido de estos dependerá cuánto se pude retroceder en el tiempo (ya sea con consultas o con DBMS_FLASHBACK). Si el dato no existe en el segmento de undo dará el error:

 ORA-08180, “No snapshot found based on specified time,”

La sintaxis para activar el flashback acepta como parámetro o el SCN o el timestamp.  Si se expecifica el SCN, el punto es en el tiempo que se traslada el query es preciso, si no es tiempo se mapeara la un SCN con un precisión de tres segundos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s