Regresar una tabla en el tiempo en Oracle con Flashback

diciembre 6, 2013
admin

volvereneltiempoRegresar una tabla en el tiempo en Oracle con Flashback.

Teniendo un tiempo sin actualizar porque he tenido mucho trabajo, dejare un aporte que espero que pueda serle de utilidad por lo menos a uno aqui hablare de como Regresar una tabla en el tiempo en Oracle con Flashback.

 

La función de UNDO de Oracle es algo que cualquier DBA debería de saber, de todas maneras lo explicare aquí por si alguien tiene alguna duda. En caso que dañemos o queramos recuperar una tabla modificada o eliminada siempre podemos recurrir a la función de “Flashback Table” con esto podemos desde hacer selects a una tabla de a como se encontraba en algún punto en el pasado como recuperarla en la misma tabla u otra, por si quisiéramos comparar datos.

 

Para activar el UNDO en nuestra base de datos, existen 2 variables que tienen que estar en el SPFILE o PFILE, que son UNDO_MANAGEMENT que es el que define si está activo el UNDO y la variable UNDO_RETENTION, que marca en segundos cuanto tiempo podemos recuperar nuestras tablas, a mayor cantidad de UNDO_RETENTION mayor tiene que ser el tablespace de UNDO.

 

Alter system set UNDO_MANAGEMENT=AUTO;
Alter system set UNDO_RETENTION=86400;

// 86,400 segundos equivalen a 1,440 minutos o 24 horas en base a esto puedes calcular la retención.

 

Si tenemos la base de datos con una instancia dinámica (SPFILE) podemos modificar los anteriores valores de la siguiente manera:

Para hacer un SELECT a una tabla de cómo se encontraba un día antes de estos momentos, se hace de la siguiente manera (“usuario” es el nombre de usuario dueño de la tabla):

select * from usuario.tabla1 AS OF TIMESTAMP SYSDATE – 1;

Así de sencillo.

 

Si tenemos el undo para varios días y quiero hacer el select para una fecha y hora en específico, se hace de la siguiente manera:

select * FROM usuario.tabla1 AS OF TIMESTAMP TO_TIMESTAMP(‘2013-12-04 22:00:00’, ‘YYYY-MM-DD HH24:MI:SS’);
// Con el anterior query hacemos que nos regrese la tabla a como estaba el “4 de diciembre del 2013”

 

Si quisiéramos crear una tabla que sea igual a otra tabla pero en una fecha anterior, se hace casi igual:
create table usuario.tabla_antes as select * FROM usuario.tabla1 AS OF TIMESTAMP TO_TIMESTAMP(‘2013-12-04 22:00:00’, ‘YYYY-MM-DD HH24:MI:SS’);

 

Si queremos crear una vista dinámica que nos muestre como estaba una tabla hace una hora (de forma dinámica) es así:
CREATE VIEW usuario.haceunahora AS SELECT * FROM usuario.tabla AS OF TIMESTAMP (SYSTIMESTAMP – INTERVAL ’60’ MINUTE);

 

Esto es de una gran utilidad para los DBA que están empezando.

 

Si al hacer estas tablas muestra el error
ORA-01555 Snapshot Too Old
Esto significa que la tabla no se encuentra dentro de la retención del UNDO, esto puede ser por el tiempo configurado o por falta de espacio en el UNDO

 

No comments

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *