Configurar y Utilizar Oracle Flashback Technology
Oracle Flashback es una de las herramientas más útiles para un DBA, ya que nos permite recuperar datos o estados de la base de datos sin necesidad de recurrir a backups (RMAN). A diferencia de RMAN, Flashback trabaja con los datos actuales para "deshacer" errores en segundos.
IMPORTANTE: Todos los ejemplos prácticos de esta guía han sido validados y probados en Oracle Database 23ai.
Para utilizar Flashback Database, la base de datos debe estar en modo ARCHIVELOG. Primero verificamos el estado:
SELECT log_mode, flashback_on FROM v$database;
En este caso no se encuentra activo ni el modo archivelog de la base por lo tanto tampoco el modo flashback. Procedemos con la configuración de la Fast Recovery Area (FRA), activamos ambos modos.
--Definir espacio y ruta de la FRA ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 10G; ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/opt/oracle/fast_recovery_area';
--Definir retención (ej. 24 horas en minutos) ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET = 1440;
--Activar modos (Requiere modo MOUNT)SHUTDOWN IMMEDIATE;STARTUP MOUNT;ALTER DATABASE ARCHIVELOG;ALTER DATABASE FLASHBACK ON;ALTER DATABASE OPEN;
No todos los Flashback funcionan igual. Se dividen principalmente por el origen de los datos que utilizan:
Basados en Segmentos de UNDO
Estos dependen del UNDO_TABLESPACE. Si los datos en el undo han sido sobrescritos, la operación fallará.
Flashback Query: Permite consultar datos en un tiempo pasado (
AS OF TIMESTAMP/SCN).
SELECT last_name, salary FROM hr.employees AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '5' MINUTE) WHERE department_id = 60;
Flashback Version Query: Ideal para auditoría, permite ver los cambios de una fila.
--Muestra todas las versiones de una fila en un intervaloSELECT versions_starttime, versions_operation, salaryFROM hr.employeesVERSIONS BETWEEN TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR) AND MAXVALUEWHERE employee_id = 101;
Flashback Table: Revierte una tabla completa. (Ojo: requiere Row Movement).
-- Indispensable para evitar error ORA-08189ALTER TABLE hr.employees ENABLE ROW MOVEMENT;-- Revertir tabla a un punto exacto FLASHBACK TABLE hr.employees TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
Basados en Flashback Logs (FRA)
Dependen de la Fast Recovery Area y capturan cambios a nivel de bloque físico.
Flashback Database: Revierte toda la base de datos. Es la opción más drástica y rápida ante errores masivos de despliegue.
-- Si estás en un entorno PDB (CDB/PDB), primero cierra la PDB:ALTER PLUGGABLE DATABASE FREEPDB1CLOSE;-- Ejecuta el retrocesoFLASHBACK PLUGGABLE DATABASE FREEPDB1TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '30' MINUTE);-- Abre con resetlogs para fijar la nueva línea de tiempoALTER PLUGGABLE DATABASE FREEPDB1OPEN RESETLOGS;
Basados en Metadata (Recycle Bin)
Flashback Drop: Recupera tablas borradas con
DROP. Oracle simplemente renombra el objeto en el diccionario de datos.
-- Si borraste la tabla por accidente:DROP TABLE hr.locations CASCADE CONSTRAINTS;
-- Recupérala de la "papelera"
FLASHBACK TABLE hr.locations TO BEFORE DROP;
-- Crear un punto de retorno normalCREATE RESTORE POINT antes_del_cambio;
Puedes consultar los puntos guardados
SELECT name, scn, time, guarantee_flashback_database FROM v$restore_point;
Para regresar al punto especifico creado
-- Para una tabla específica
FLASHBACK TABLE hr.locations TO RESTORE POINT antes_del_cambio;