Datapump - 04 Export con flashback time
Cuando escucho la palabra "Flashback" lo primero que pienso es el video juego de los años 90, muy divertido y adelantado para su época. Sin embargo, en esta oportunidad vamos a hablar de Oracle Flashback en el Datapump y como nos permite hacer viajes en el tiempo.Flashback es una tecnología que comenzó con Oracle 9i y sigue evolucionando. Esta herramienta permite a los administradores y usuarios ver y manipular estados pasados de los datos sin necesidad de recuperar toda la base de datos a un punto de tiempo en especifico.
Vamos a crear un respaldo de una tabla pero con su imagen de hace 30 minutos y no con la imagen actual.
Comencemos:
01.- Insertamos 5 registros a la 14:00, la tabla tiene un campo llamado "fecha" donde vamos a insertar la hora actual a través de la función SYSDATE.
14:00:33 SQL> INSERT INTO test.tab01 (ID,NOMBRE,FECHA) SELECT level, 'First Load', sysdate FROM dual CONNECT BY level <= 5; 5 rows created. 14:00:46 SQL> commit; Commit complete.
02.- Luego de 20 minutos insertamos 5 registros más, es decir, a las 14:20.
14:20:01 SQL> INSERT /*+ APPEND */ INTO test.tab01 (ID,NOMBRE,FECHA) SELECT level, 'First Load', sysdate FROM dual CONNECT BY level <= 5; 5 rows created. 14:20:08 SQL> commit; Commit complete.
03.- Revisamos los registros que fueron insertados en la tabla, es importante observar la diferencia de tiempo en la que fueron insertados.
14:20:44 SQL> select * from test.tab01; ID NOMBRE FECHA ---------- -------------------------------------------------- ------------------- 1 First Load 19-01-2019 14:00:44 2 First Load 19-01-2019 14:00:44 3 First Load 19-01-2019 14:00:44 4 First Load 19-01-2019 14:00:44 5 First Load 19-01-2019 14:00:44 1 First Load 19-01-2019 14:20:03 2 First Load 19-01-2019 14:20:03 3 First Load 19-01-2019 14:20:03 4 First Load 19-01-2019 14:20:03 5 First Load 19-01-2019 14:20:03 10 rows selected.
04.- Realizamos un export datapump con la opción FLASHBACK_TIME donde le indicamos que vamos a tomar la imagen de la tabla a las 14:02 es decir despues que se insertaron los primeros 5 registros y antes de los últimos 5 registros.
expdp DUMPFILE=EXP_DIR:expPRUEBA_FB.dmp FLASHBACK_TIME=\"TO_TIMESTAMP\(\'19-01-2019 14:02:00\',\'DD-MM-YYYY HH24:MI:SS\'\)\" TABLES=test.tab01 LOGFILE=EXP_DIR:expPRUEBA_FB.log
Los slash “/” que se colocan antes de las comillas dobles, simples y paréntesis es para escapar los caracteres y el sistema operativo no los tome como instrucciones sino literalmente como caracteres.
FLASHBACK_TIME=\"TO_TIMESTAMP\(\'19-01-2019 14:02:00\',\'DD-MM-YYYY HH24:MI:SS\'\)\"
Si esto te parece confuso, se puede incluir esta opción en el archivo de parámetros:
cat parfile.par
FLASHBACK_TIME="TO_TIMESTAMP('19-01-2019 14:02:00','DD-MM-YYYY HH24:MI:SS')"El comando de expdp quedaría de la siguiente forma:
expdp DUMPFILE=EXP_DIR:expPRUEBA_FB.dmp parfile=parfile.par TABLES=test.tab01 LOGFILE=EXP_DIR:expPRUEBA_FB.log
05.- Ahora procedemos a borrar la tabla.
11:29:39 SQL> drop table test.tab01; Table dropped.
06.- Realizamos el Import para restaurar la tabla.
[oracle@localhost dbprocs]$ impdp DUMPFILE=EXP_DIR:expPRUEBA_FB.dmp LOGFILE=EXP_DIR:impPRUEBA.log TABLES=test.tab01
07.- Como podemos observar se restauró la imagen de las 14:02, cuando solo habían 5 registros en la tabla.
11:29:58 SQL> select * from test.tab01; ID NOMBRE FECHA ---------- -------------------------------------------------- ------------------- 1 First Load 19-01-2019 14:01:44 2 First Load 19-01-2019 14:01:44 3 First Load 19-01-2019 14:01:44 4 First Load 19-01-2019 14:01:44 5 First Load 19-01-2019 14:01:44
Comments
Post a Comment