Consultas Flashback en Oracle

25/09/2013

Desde la versión 10g, Oracle cuenta con una herramienta maravillosa denominada Flashback que nos permite “volver hacia atrás” en filas, tablas y bases de datos.

¿Qué es Oracle Flashback?

Es una tecnología que nos permite por ejemplo, “rebobinar” la base de datos hacia un tiempo anterior. Nos permite “rebobinar” una tabla, recuperarla de la papelera de reciclaje, o consultar los valores de una fila de datos en un tiempo anterior. En concreto soporta estas tecnologías:

Nombre de la tecnología Uso
Oracle Flashback Query Para consultar el valor de un campo de una fila en un tiempo pasado.
Oracle Flashback Versions Query Para ampliar la información de la consulta del valor de un campo de una fila  en el pasado con la fecha de inicio, fin, tipo de transacción…
Oracle Flashback Transaction Query Para ver cómo se ha modificado el valor de un campo a partir de otras transacciones.
Oracle Flashback Transaction Backout Para “volver atrás” algunas transacciones.
Oracle Flashback Table Para “volver atrás” una tabla.
Oracle Flashback Drop Para recuperar una tabla eliminada.
Oracle Flashback Database Para “volver atrás” una base de datos.

Esta tecnología viene activada por defecto y nos podemos hacer esta sencilla pregunta ¿y por cuánto tiempo podemos volver “hacia atrás” en Oracle flashback? Pues va a depender de la información que tengamos de deshacer (UNDO).

Oracle guarda la información de deshacer (valores anteriores que se están cambiando en las transacciones) en el segmento de deshacer para cada transacción. Estos valores de deshacer se utilizan para consulta del resto de usuarios (el resto de sesiones ven los datos antiguos hasta que el usuario haga un commit) y para soporte de rollback (hasta que el usuario no haga un commit, la transacción no se confirma, por lo que puede anularla haciendo un rollback y volvería a su estado inicial, volviendo a cargar los datos antiguos desde el segmento de deshacer). Además de para dar soporte de rollback y consulta consistente de datos, los segmentos de deshacer sirven para soportar consultas flashback.

Los segmentos de deshacer se configuran utilizando el parámetro UNDO_RETENTION. Este parámetro especifica en segundos durante cuánto tiempo se va a retener la información ya confirmada de deshacer. Las transacciones que no estén confirmadas siempre se mantienen y no se sobrescriben, pero las ya confirmadas sí.

El problema de este parámetro, es que si llegan más transacciones durante el tiempo de UNDO_RETENTION de las que puede soportar, Oracle siempre sobrescribirá las transacciones ya confirmadas antes de que falle una sentencia. Si queremos que dicho tiempo sea siempre permanente aunque fallen sentencias nuevas, debemos garantizar la retención de deshacer aplicando la garantía con esta sentencia:

ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;

De esta forma, si nuestro UNDO_RETENTION es de 900 (15 minutos) y tenemos aplicada la retención de garantía de deshacer, sabemos que siempre tendremos 15 minutos para poder “rebobinar” utilizando la tecnología Flashback.  Desde el Enterprise Manager, podemos configurar el valor de retención y de garantía desde el enlace de Server, seleccionando la opción Automatic Undo Management. Este asesor nos permite configurar la retención de deshacer y además ver el tamaño aproximado en MB que necesitamos en el tablespace de deshacer para soportar dicha retención. Tenemos distintas opciones para analizar las últimas querys en nuestra base de datos que nos permite ver el valor aproximado de dicho tamaño.

Gestión de deshacer desde Oracle Enterprise Manager

Gestión de deshacer desde Oracle Enterprise Manager

Veamos un ejemplo de cómo utilizar las consultas de flashback query. Inicialmente creamos una base de datos llamada marketing con un id y un salario, introducimos un valor, confirmamos la transacción, modificamos dicho valor y volvemos a confirmar la transacción.

Creación de una tabla, inserción de una fila y modificación de dicha fila

Creación de una tabla, inserción de una fila y modificación de dicha fila

Podemos ejecutar el valor actual y el valor anterior utilizando una consulta de flashback query. Para ello podemos utilizar un rango de fechas o el SCN de la transacción. Para ello podemos utilizar la siguiente sentencia:

select salario from marketing versions between SCN minvalue and maxvalue where id=1;

Consulta de valores actuales y pasados de un campo con flashback query

Consulta de valores actuales y pasados de un campo con flashback query

Como podemos observar, la consulta nos devuelve todos los valores actuales y pasados de dicho campo para todos los SCN existentes y accesibles por Flashback Query. En concreto nos devuelve 1500 que fue el valor de la inserción y 1800 que fue el valor de la actualización.

Si lo que queremos es ampliar la información anterior, podemos utilizar una consulta Flashback query versions, donde nos proporcione la fecha de inicio y fin de cuándo se produjeron los cambios en dicho campo en incluso el id de la transacción con esta sentencia:

select versions_starttime “INICIO”, versions_endtime “FIN”, versions_xid “ID”, salario from marketing versions between SCN minvalue and maxvalue where id=1;

Valores ampliados con Flashback Query Versions

Valores ampliados con Flashback Query Versions

Con la consulta de Flashback Query Versions, podemos ver cuándo se inició el cambio, cuando se finalizó y el id de dicha transacción que podrá utilizarse con Flashback query transactions y Flashback transaction backout.

Otro ejemplo de la tecnología flashback es el borrado de una tabla. Si borramos la tabla marketing, podemos utilizar la sentencia:

show recyclebin

para comprobar que está en la papelera de reciclaje. Luego podemos utilizar la tecnología de flashback para recuperarla con la sentencia:

flashback table marketing to before drop;

Borrado de una tabla y recuperación con Flashback Table

Borrado de una tabla y recuperación con Flashback Table

En el ejemplo vemos cómo se borra la tabla, cómo verla en la papelera de reciclaje y cómo recuperarla utilizando la tecnología de flashback table.

En esta dirección podemos encontrar más información sobre la tecnología Flashback

http://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_flashback.htm

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

A %d blogueros les gusta esto: