FLASHBACK Table

Propósito
Utilice la instrucción FLASHBACK TABLE para restaurar un estado anterior de una tabla en caso de error humano o de aplicación. El tiempo en el pasado al que se puede actualizar la tabla depende de la cantidad de datos de deshacer en el sistema. Además, Oracle Database no puede restaurar una tabla a un estado anterior en ninguna operación DDL que cambie la estructura de la tabla.
 
Nota:
 
Oracle recomienda encarecidamente que ejecute su base de datos en el modo de deshacer automático al establecer el parámetro de inicialización UNDO_MANAGEMENT en AUTO . Además, establezca el parámetro de inicialización UNDO_RETENTION en un intervalo lo suficientemente grande como para incluir los datos más antiguos que anticipa necesitar. Para obtener más información, consulte la documentación en los parámetros de inicialización UNDO_MANAGEMENT y UNDO_RETENTION.
 
No puede revertir una instrucción FLASHBACK TABLE . Sin embargo, puede emitir otra instrucción FLASHBACK TABLE y especificar una hora justo anterior a la hora actual. Por lo tanto, es aconsejable registrar el SCN actual antes de emitir una cláusula FLASHBACK TABLE.
 
Requisitos previos
 
Para actualizar una tabla a una SCN o marca de tiempo anterior, debe tener el privilegio de objeto FLASHBACK en la tabla o el privilegio del sistema FLASHBACK ANY TABLE . Además, debe tener los privilegios de objeto SELECT , INSERT , DELETE y ALTER en la tabla.
 
El movimiento de la fila debe estar habilitado para todas las tablas en la lista Flashback, a menos que esté retrocediendo la tabla BEFORE TO BEFORE DROP. Esa operación se llama operación de retroceso de flashback , y utiliza los datos descartados en la papelera de reciclaje en lugar de deshacer los datos. Consulte row_movement_clause para obtener información sobre cómo habilitar el movimiento de fila.
 
Para retroceder una tabla a un punto de restauración, debe tener el privilegio SELECT ANY DICTIONARY o FLASHBACK ANY TABLE o el rol SELECT_CATALOG_ROLE.
 
Para actualizar una tabla antes de una operación DROP TABLE , solo necesita los privilegios necesarios para abandonar la tabla.
Sintaxis
flashback_table :: =
Description of flashback_table.gif follows
 

Semántica
Durante una operación de Tabla de Flashback de Oracle, Oracle Database adquiere bloqueos DML exclusivos en todas las tablas especificadas en la lista Flashback. Estos bloqueos impiden cualquier operación en las tablas mientras están volviendo a su estado anterior.
La operación de la tabla de Flashback se ejecuta en una sola transacción, independientemente de la cantidad de tablas especificadas en la lista de Flashback. O todas las tablas vuelven al estado anterior o ninguna de ellas lo hace. Si la operación de tabla de retroceso falla en cualquier tabla, la instrucción completa falla.
Al finalizar la operación de tabla de retroceso, los datos en la table son consistentes con la table en el momento anterior. Sin embargo, FLASHBACK TABLE TO SCN o TIMESTAMP no conserva rowids, y FLASHBACK TABLE TO BEFORE DROP no recupera las restricciones referenciales.
 
Oracle Database no revierte las estadísticas asociadas con la table a su forma anterior. Los índices en la table que existen actualmente se revierten y reflejan el estado de la tabla en el punto Flashback. Si el índice existe ahora pero aún no existía en el punto Flashback, la base de datos actualiza el índice para reflejar el estado de la tabla en el punto Flashback. Sin embargo, los índices que se descartaron durante el intervalo entre el punto de Flashback y la hora actual no se restauran.
 
Esquema
Especifique el esquema que contiene la tabla. Si omite el schema , la base de datos asume que la tabla está en su propio esquema.
Tabla
Especifique el nombre de una o más tablas que contienen datos que desea revertir a una versión anterior.
Restricciones en el parpadeo de tablas traseras Esta declaración está sujeta a las siguientes restricciones:
  • Las operaciones de la tabla Flashback no son válidas para los siguientes tipos de objetos: tablas que forman parte de un clúster, vistas materializadas, tablas de cola avanzada (AQ), tablas de diccionario de datos estáticos, tablas del sistema, tablas remotas, tablas de objetos, tablas anidadas o tablas individuales particiones o subparticiones.
  • Las siguientes operaciones de DDL cambian la estructura de una tabla, de modo que no puede utilizar posteriormente la cláusula TO SCN o TO TIMESTAMP para actualizar la tabla a una hora anterior a la operación: actualizar, mover o truncar una tabla; agregar una restricción a una tabla, agregar una tabla a un clúster; modificando o soltando una columna; agregar, descartar, fusionar, dividir, unir o truncar una partición o subpartición (con la excepción de agregar una partición de rango).
A la cláusula SCN
Especifique el número de cambio de sistema (SCN) correspondiente al punto en el tiempo al que desea devolver la tabla. El expr debe evaluar a un número que representa un SCN válido.
A la cláusula TIMESTAMP
Especifique un valor de marca de tiempo correspondiente al punto en el tiempo al que desea devolver la tabla. El expr debe evaluar a una marca de tiempo válida en el pasado. La tabla se actualizará a un tiempo dentro de aproximadamente 3 segundos de la marca de tiempo especificada.
 
PARA RESTABLECER LA CLAUSULA DE PUNTO
Especifique un punto de restauración al cual desea retroceder la tabla. El punto de restauración ya debe haber sido creado.
Ver también:
CREAR RESTORE POINT para obtener información sobre la creación de puntos de restauración
ENABLE | DESACTIVAR DISPARADORES
De forma predeterminada, la base de datos Oracle deshabilita todos los triggers habilitados definidos en la table durante la operación de la tabla de Flashback y luego los vuelve a habilitar después de que se completa la operación de la tabla de retroceso. Especifique ENABLE TRIGGERS si desea anular este comportamiento predeterminado y mantener activados los disparadores durante el proceso Flashback.
Esta cláusula afecta solo a los desencadenantes de base de datos definidos en la table que ya están habilitados. Para habilitar selectivamente los activadores desactivados, use ALTER TABLE ... enable_disable_clause antes de emitir la instrucción FLASHBACK TABLE con la cláusula ENABLE TRIGGERS .
TO BEFORE DROP Cláusula
Use esta cláusula para recuperar de la papelera de reciclaje una tabla que se ha descartado, junto con todos los posibles objetos dependientes.
Ver también:
  • Guía del administrador de la base de datos Oracle para obtener información sobre la papelera de reciclaje y las convenciones de denominación para objetos en la papelera de reciclaje
  • PURGE para obtener información sobre la eliminación permanente de objetos de la papelera de reciclaje
Puede especificar el nombre original del usuario de la tabla o el nombre generado por el sistema Oracle Database asignado al objeto cuando se eliminó.
  • Los nombres de los objetos de la papelera de reciclaje generados por el sistema son únicos. Por lo tanto, si especifica el nombre generado por el sistema, la base de datos recupera ese objeto especificado.
    Para ver el contenido de su papelera de reciclaje, consulte la USER_RECYCLEBIN diccionario de datos USER_RECYCLEBIN . Puede usar el sinónimo RECYCLEBIN lugar. Las siguientes dos declaraciones devuelven las mismas filas:
     
     SELECCIONAR * DE RECYCLEBIN;
     SELECCIONAR * DESDE USER_RECYCLEBIN;
    
    
  • Si especifica el nombre especificado por el usuario y si la papelera de reciclaje contiene más de un objeto con ese nombre, la base de datos recupera el objeto que se movió a la papelera de reciclaje más recientemente. Si desea recuperar una versión anterior de la tabla, haga una de estas cosas:
    • Especifique el nombre de la papelera de reciclaje generada por el sistema de la tabla que desea recuperar.
    • Emita una TABLE TO FLASHBACK adicional ... BEFORE TO BEFORE DROP hasta que recupere la tabla que desea.
Oracle Database intenta preservar el nombre original de la tabla. Si se ha creado una nueva tabla del mismo nombre en el mismo esquema desde que se quitó la tabla original, la base de datos devuelve un error a menos que también especifique la cláusula RENAME TO .
Cláusula RENAME TO Use esta cláusula para especificar un nuevo nombre para la tabla que se recupera de la papelera de reciclaje.
Notas sobre el parpadeo de las tablas desplegables Las siguientes notas se aplican a las tablas desplegables que retroceden:
  • Oracle Database recupera todos los índices definidos en la tabla recuperada de la papelera de reciclaje, excepto los índices de unión de mapa de bits. (Los índices de unión de mapa de bits no se colocan en la papelera de reciclaje durante una operación DROP TABLE , por lo que no se pueden recuperar).
  • La base de datos también recupera todos los triggers y restricciones definidos en la tabla, excepto las restricciones de integridad referencial que hacen referencia a otras tablas.
    Los índices recuperados, los factores desencadenantes y las restricciones tienen nombres de papelera de reciclaje. Por lo tanto, es recomendable consultar la vista USER_RECYCLEBIN antes de emitir una TABLE TO FLASHBACK ... BEFORE instrucción DROP para que pueda cambiar el nombre de los triggers recuperados y las restricciones a nombres más utilizables.
  • Cuando suelta una tabla, todos los registros de vista materializados definidos en la tabla también se eliminan pero no se colocan en la papelera de reciclaje. Por lo tanto, los registros de vista materializados no se pueden actualizar junto con la tabla.
  • Cuando suelta una tabla, los índices de la tabla se quitan y se colocan en la papelera de reciclaje junto con la tabla. Si surgen presiones espaciales posteriores, la base de datos recupera espacio de la papelera de reciclaje al purgar primero los índices. En este caso, cuando retrocede la tabla, es posible que no recupere todos los índices que se definieron en la tabla.
  • No puede actualizar una tabla si ha sido depurada, ya sea por un usuario o por Oracle Database como resultado de alguna operación de recuperación de espacio.
Ejemplos
Restauración de una tabla a un estado anterior: ejemplos Los siguientes ejemplos crean una nueva tabla, employees_test , con movimiento de fila habilitado, valores de actualización dentro de la nueva tabla y emiten la instrucción FLASHBACK TABLE .
Crear tabla employees_test , con movimiento de fila habilitado, de los employees de la tabla del esquema hr de la muestra:
 CREATE TABLE employees_demo 
   AS SELECT * FROM empleados;

Como punto de referencia, enumere los salarios inferiores a 2500:
 SELECCIONAR salario
   FROM employees_test
   where el salario <2500 span="">

     SALARIO
 ----------
       2400
       2200
       2100
       2400
       2200

Nota:
Para permitir que el SCN se propague a la tabla de asignación utilizada por la instrucción FLASHBACK TABLE , espere un mínimo de 5 minutos antes de emitir la siguiente declaración. Esta espera no sería necesaria si se estuviera utilizando una tabla previamente existente en este ejemplo.
Habilite el movimiento de fila para la tabla:
 ALTER TABLE employees_test
    ENABLE ROW MOVEMENT;

Emitir un 10% de aumento salarial a aquellos empleados que ganan menos de 2500:
 update employees_test
   SET salario = salario * 1.1
   where salario <2500 span="">

 5 filas actualizadas
 COMETER;

Como segundo punto de referencia, enumere los salarios que permanecen menos de 2500 después del aumento del 10%:
 SELECT salario
   FROM employees_test
   where salario <2500 span="">

     SALARIO
 ----------
       2420
       2310
       2420
  
Restaure la tabla employees_test a su estado anterior a la hora actual del sistema. La duración poco realista de 1 minuto se usa para que pueda probar esta serie de ejemplos rápidamente. En circunstancias normales, habría transcurrido un intervalo mucho mayor.
 
 FLASHBACK TABLE employees_test
   TO TIMESTAMP (SYSTIMESTAMP - INTERVALO '.1' minuto);

Enumere los salarios inferiores a 2500. Después de la declaración de FLASHBACK TABLE emitida anteriormente, esta lista debe coincidir con la lista en el primer punto de referencia.
 
 SELECT salario
   FROM employees_test
   where salario <2500 span="">

     SALARIO
 ----------
       2400
       2200
       2100
       2400
       2200
Recuperación de una tabla descartada : ejemplo Si accidentalmente descarta la tabla pm.print_media y desea recuperarla, emita la siguiente declaración:
 TABLA DE FLASHBACK print_media TO BEFORE DROP;

Si se ha creado otra tabla print_media en el esquema pm , use la cláusula RENAME TO para cambiar el nombre de la tabla recuperada:
 TABLA DE FLASHBACK print_media TO BEFORE DROP RENAME A print_media_old;

Si sabe que la tabla de empleados se ha eliminado varias veces y desea recuperar la versión más antigua, consulte la tabla USER_RECYLEBIN para determinar el nombre generado por el sistema y luego utilice ese nombre en la instrucción FLASHBACK TABLE . (Los nombres generados por el sistema en su base de datos serán diferentes a los que se muestran aquí).
 
 SELECT object_name, droptime FROM user_recyclebin 
    WHERE original_name = 'PRINT_MEDIA';

 OBJECT_NAME DROPTIME
 ------------------------------ -------------------
 RB $$ 45703 $ TABLA $ 0 2003-06-03: 15: 26: 39
 RB $$ 45704 $ TABLA $ 0 2003-06-12: 12: 27: 27
 RB $$ 45705 $ TABLA $ 0 2003-07-08: 09: 28: 01 
 

Comentarios

Entradas populares de este blog

Actualizar las estadísticas

Errores de conexión de Oracle

Operaciones con fechas