¡Descubre el secreto de Oracle para recuperar datos en segundos sin copias de seguridad!
El Flashback en Oracle es una tecnología que permite a los usuarios acceder y recuperar datos históricos sin necesidad de restaurar copias de seguridad completas ni interrumpir el funcionamiento de la base de datos. Es una herramienta poderosa que facilita la recuperación de datos en escenarios como errores humanos, consultas incorrectas o eliminación accidental de datos.
Características principales del Flashback
- Recuperación rápida: Permite restaurar datos a un estado anterior sin requerir restauraciones complejas.
- Diagnóstico: Facilita la identificación de cambios realizados en los datos a lo largo del tiempo.
- Flexibilidad: Proporciona diferentes niveles de granularidad, desde filas individuales hasta toda la base de datos.
Habilitar Flashback en una tabla
Creamos la tabla employees, y la llenamos con datos para poder borrar la información y recuperar los datos con flashback.
create table departments (
id number generated by default on null as identity
constraint departments_id_pk primary key,
name varchar2(255 char) not null,
location varchar2(4000 char),
country varchar2(4000 char)
);
create table employees (
id number generated by default on null as identity
constraint employees_id_pk primary key,
department_id number
constraint employees_department_id_fk
references departments,
name varchar2(50 char) not null,
email varchar2(255 char),
cost_center number,
date_hired date,
job varchar2(255 char)
);
-- table index
create index employees_i1 on employees (department_id);
-- triggers
create or replace trigger employees_biu
before insert or update
on employees
for each row
begin
:new.email := lower(:new.email);
end employees_biu;
/
-- create views
create or replace view emp_v as
select
departments.id department_id,
departments.name department_name,
departments.location location,
departments.country country,
employees.id employee_id,
employees.name employee_name,
employees.email email,
employees.cost_center cost_center,
employees.date_hired date_hired,
employees.job job
from
departments,
employees
where
employees.department_id(+) = departments.id
/
-- load data
insert into departments (
id,
name,
location,
country
) values (
1,
'Sales',
'Katipa',
'VN'
);
insert into departments (
id,
name,
location,
country
) values (
2,
'Sales',
'Tuvbefto',
'MA'
);
insert into departments (
id,
name,
location,
country
) values (
3,
'Sales',
'Kecoki',
'HT'
);
insert into departments (
id,
name,
location,
country
) values (
4,
'Sales',
'Jitobi',
'MF'
);
commit;
alter table departments
modify id generated always as identity restart start with 5;
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
1,
3,
'Bruce Curtis',
'ubu@cofbocuw.om',
37,
sysdate-45,
'Architect'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
2,
3,
'Joe Butler',
'dano@apluhji.sa',
92,
sysdate-12,
'Analyst'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
3,
3,
'Herbert French',
'kicco@kih.ga',
94,
sysdate-31,
'Analyst'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
4,
4,
'Lola Rose',
'avepuzog@toduriko.kh',
72,
sysdate-68,
'Consultant'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
5,
2,
'Fannie Ballard',
'bizeg@ulzan.gm',
24,
sysdate-29,
'Manager'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
6,
3,
'Josephine Barker',
'cuwaho@ulke.mh',
72,
sysdate-99,
'Manager'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
7,
3,
'Maud Austin',
'bibhaed@umipehki.af',
44,
sysdate-14,
'Engineer'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
8,
3,
'Lydia Harris',
'pe@ipjute.edu',
77,
sysdate-1,
'Specialist'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
9,
3,
'Genevieve Copeland',
'wof@zapol.yt',
97,
sysdate-81,
'Manager'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
10,
1,
'Cory Sanchez',
'piwuh@pa.bf',
73,
sysdate-61,
'Analyst'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
11,
4,
'Della Evans',
'ugapew@jevpov.mm',
55,
sysdate-45,
'Engineer'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
12,
2,
'Janie Tucker',
'bowvuh@mulus.za',
20,
sysdate-63,
'Engineer'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
13,
4,
'Jayden Stevens',
'daulo@piravub.mc',
5,
sysdate-86,
'Engineer'
);
insert into employees (
id,
department_id,
name,
email,
cost_center,
date_hired,
job
) values (
14,
3,
'Brian Griffith',
'ego@te.us',
5,
sysdate-43,
'Salesman'
);
commit;
Darle permisos de FLASHBACK a nuestro usuario
GRANT FLASHBACK ANY TABLE TO "BLOGAPRENDIZ" ;
Ejecuto una consulta para saber el timestamp antes de borrar

Habilitamos y borramos el registro
Utilizamos ROW MOVEMENT para habilitar la recuperación de registros, eliminamos un registro y lo recuperamos con FLASHBACK TIMESTAMP
ALTER TABLE employees ENABLE ROW MOVEMENT;
delete from employees where id in (1,2);
commit;
Verificamos que se recuperan los datos
FLASHBACK TABLE employees TO
TIMESTAMP TO_TIMESTAMP('2025-01-18 21:15:00', 'YYYY-MM-DD HH24:MI:SS');

Recuperamos

Query para revisar si los datos se encuentran ahí

Conclusión: Aprovechando el Poder de Oracle Flashback
En resumen, Oracle Flashback es una herramienta increíblemente poderosa que permite recuperar datos históricos de manera eficiente, solucionar errores humanos y diagnosticar problemas sin interrumpir las operaciones de la base de datos. Su flexibilidad para trabajar a diferentes niveles, desde tablas individuales hasta toda la base de datos, lo convierte en un recurso esencial para administradores y desarrolladores que buscan mantener la integridad y continuidad de sus sistemas.
Al habilitar y configurar adecuadamente Flashback en tus entornos, no solo puedes reducir el tiempo de inactividad, sino también mejorar la capacidad de respuesta ante situaciones imprevistas. Ya sea restaurando registros eliminados, deshaciendo transacciones o retrocediendo en el tiempo a nivel de tabla o base de datos, Flashback te brinda la tranquilidad de saber que puedes deshacer errores de manera sencilla.
¿Ya has implementado Flashback en tus sistemas? Comparte tu experiencia o cualquier duda en los comentarios, ¡estaré encantado de ayudarte! 🚀

Social List