A todos alguna vez nos ha pasado que hemos borrado sin querer una tabla o hemos modificado o borrado datos de una tabla por error ¡Lo bueno es que esa situación se puede revertir! En esta oportunidad les compartiré primero como recuperar los datos y luego cómo hacer lo mismo con las tablas.

1.- Recuperación de datos borrados o modificados.

Oracle nos ofrece la posibilidad de recuperar datos que se hayan borrado o modificado accidentalmente. Esto depende del DBMS_FLASHBACK definido por el administrador de la base de datos. Esto es como una papelera de reciclaje, pero que se vacía cada X minutos.

Imaginaros que tenemos la siguiente tabla PS_TABLA_RAFA

Y en un momento dado se nos ocurre hacer un borrado por ejemplo del empleado C000129716 pero se nos olvida poner el where.

Hacemos DELETE FROM PS_TABLA_RAFA

Y damos al commit, o nuestra base de datos tiene el autocomit puesto.

Hacemos una select y vemos que no hay nada.


Si ejecutamos la sentencia que detallo a continuación, recuperaremos los datos perdidos:

INSERT INTO PS_TABLA_RAFA

SELECT * FROM PS_TABLA_RAFA AS OF TIMESTAMP (SYSTIMESTAMP – INTERVAL ‘3’ MINUTE)

Aclaración: el parámetro INTERVAL es el tiempo que ha pasado desde que nosotros hicimos el borrado.

Esto también funciona si hemos hecho un update masivo. 

Si tenemos esto que se ve en la siguiente imagen,  por ejemplo:

Y ejecutamos:

UPDATE  PS_TABLA_RAFA SET DESCR = ‘RAFA’ y no hemos puesto el where.

Ejecutamos la SELECT y vemos que nos ha cambiado todo

Para recuperarlo haríamos lo siguiente:

UPDATE PS_TABLA_RAFA SET DESCR =

 (SELECT DESCR FROM (PS_TABLA_RAFA AS OF TIMESTAMP (SYSTIMESTAMP – INTERVAL ’11’ MINUTE) ) A WHERE  A.EMPLID=PS_TABLA_RAFA.EMPLID)

 

2.- Recuperación de tablas borradas.

Creamos la tabla PS_RAFA_BORRA1 con los campos EMPLID y DESCR y metemos los datos.

Borramos la tabla con un DROP TABLE

Volvemos a crearnos la tabla PS_RAFA_BORRA1 con los campos EMPLID, DESCR y DESCR1

Y metemos datos 

Nos damos cuenta que hemos machacado la anterior tabla.

Para recuperarla en Oracle hay una vista que se llama recyclebin que contiene todos los objetos borrados.

Si ejecutamos la siguiente sentencia lo vemos:

select  * from recyclebin WHERE  original_name = ‘PS_RAFA_BORRA1’

Si ejecutamos la siguiente sentencia teniendo en cuenta que lo que hay en el FROM es lo que tenemos en el OBJECT_NAME de la anterior sentencia

create table prueba_nueva as select * from “BIN$jTCFepMCWSLgVACQ+lXLKg==$0”;

Veremos que nos ha creado una nueva tabla llamada PRUEBA_NUEVA con todos los datos que teníamos en PS_RAFA_BORRA1 la primera vez.

Espero que esta información les haya resultado útil para recuperar datos y tablas en Oracle.

Rafael Barcelo Algora
Latest posts by Rafael Barcelo Algora (see all)