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
.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 :: =

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
oTO
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
- 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 laUSER_RECYCLEBIN
diccionario de datosUSER_RECYCLEBIN
. Puede usar el sinónimoRECYCLEBIN
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.
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 vistaUSER_RECYCLEBIN
antes de emitir unaTABLE
TO
FLASHBACK
...BEFORE
instrucciónDROP
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 2500>
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. 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; 2500>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 2500>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 2500>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