Recuperando Datos Borrados en Oracle con LogMiner: Caso Práctico Paso a Paso


Introducción

¿Borraste accidentalmente datos en una tabla crítica de producción y no tienes un punto de restauración inmediato? ¿No puedes usar Flashback por limitaciones de configuración o licenciamiento? Aquí es donde LogMiner puede convertirse en tu aliado silencioso.

En este laboratorio aprenderás cómo utilizar LogMiner para recuperar información eliminada en una base de datos Oracle 19c (preferiblemente en modo NO CDB). Este proceso es ideal tanto para entornos de desarrollo como de producción (con las precauciones adecuadas).


1. Requisitos del entorno

Asegúrate de contar con lo siguiente antes de comenzar:

  • Oracle Database 19c instalado (modo NO CDB recomendado).

  • Usuario con privilegios DBA.

  • Logs de Redo (archived o online) accesibles.

  • Modo ARCHIVELOG activado.

Verifica si ARCHIVELOG está habilitado:

ARCHIVE LOG LIST;

Si no lo está, actívalo:

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

2. Crear entorno de pruebas

Conéctate como SYS o cualquier usuario con privilegios DBA:

-- Crear usuario de prueba
CREATE USER logminer_test IDENTIFIED BY logminer_test;
GRANT CONNECT, RESOURCE, DBA TO logminer_test;

Crear tabla y simular un borrado:

-- Conectar como logminer_test
CONN logminer_test/logminer_test

-- Crear tabla
CREATE TABLE empleados (
  id NUMBER PRIMARY KEY,
  nombre VARCHAR2(100)
);

-- Insertar registros
INSERT INTO empleados VALUES (1, 'Carlos');
INSERT INTO empleados VALUES (2, 'María');
COMMIT;

-- Simular borrado accidental
DELETE FROM empleados WHERE id = 1;
COMMIT;

3. Habilitar LogMiner

Ahora, desde el usuario SYS o DBA:

Ver logs disponibles:

COL MEMBER FOR A100
SELECT GROUP#, MEMBER FROM V$LOGFILE;

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, STATUS 
FROM V$ARCHIVED_LOG 
ORDER BY SEQUENCE# DESC;

Agregar archivo de log (ajusta la ruta):

BEGIN
  DBMS_LOGMNR.ADD_LOGFILE(
    LOGFILENAME => '/u01/app/oracle/oradata/ORCL/redo01.log',
    OPTIONS => DBMS_LOGMNR.NEW
  );
END;
/

Iniciar sesión de LogMiner:

BEGIN
  DBMS_LOGMNR.START_LOGMNR(
    OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG
  );
END;
/

4. Consultar los cambios

Consulta la vista V$LOGMNR_CONTENTS para inspeccionar lo ocurrido:

SELECT 
  TO_CHAR(TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') AS hora,
  OPERATION,
  SQL_REDO,
  SQL_UNDO,
  USERNAME,
  TABLE_NAME
FROM 
  V$LOGMNR_CONTENTS
WHERE 
  TABLE_NAME = 'EMPLEADOS'
  AND USERNAME = 'LOGMINER_TEST'
ORDER BY hora;

Tip: Deberías ver una fila con operación DELETE, donde el campo SQL_UNDO te indica cómo revertirla.


5. Restaurar dato borrado

Toma el SQL_UNDO y ejecútalo para restaurar:

INSERT INTO empleados VALUES (1, 'Carlos');
COMMIT;

6. Finalizar sesión LogMiner

BEGIN
  DBMS_LOGMNR.END_LOGMNR;
END;
/

Comparación rápida con otras técnicas

TécnicaLicenciaComplejidadIdeal para
LogMinerIncluidaMediaAuditoría, recuperación puntual
Flashback QueryEnterpriseBajaReversiones rápidas
RMAN + Restore PointCualquierAltaRecuperación de desastres

Tips finales para producción

  • Siempre prueba en un entorno no productivo primero.

  • Automatiza la adición de logs usando scripts basados en V$ARCHIVED_LOG.

  • Si necesitas auditar constantemente, evalúa crear una tabla de auditoría personalizada basada en los resultados de LogMiner.

  • No olvides revocar el rol DBA al usuario de pruebas una vez finalizado el ejercicio.


Nivel Avanzado (para seguir explorando)

  • Agregar múltiples archivos de log con DBMS_LOGMNR.ADD_LOGFILE.

  • Filtrar por SCN o timestamp para acotar los resultados.

  • Exportar los datos de V$LOGMNR_CONTENTS a una tabla intermedia.

  • Automatizar la recuperación con un procedimiento PL/SQL.


Conclusión

LogMiner es una herramienta potente y poco explotada, ideal para recuperación puntual y auditoría detallada. Aunque no reemplaza una estrategia de backup adecuada, puede salvarte en escenarios de pérdida puntual de datos.

¿Te gustaría un artículo sobre cómo otro tipo de recuperación? ¡Déjalo en los comentarios o escríbenos a Admin@LaBoticaDelDBA.com !

0
Subscribe to my newsletter

Read articles from Mauricio Muñoz Palma directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Mauricio Muñoz Palma
Mauricio Muñoz Palma

Bienvenidos a "La Botica del DBA" Donde la pasión por las bases de datos Oracle se transforma en conocimiento y excelencia. Este espacio está diseñado para ser el laboratorio de ideas, soluciones y estrategias que todo DBA necesita para optimizar, innovar y liderar en el mundo de las bases de datos. Desde los fundamentos hasta las últimas tendencias, aquí encontrarás guías prácticas, análisis profundos y herramientas que impulsarán tu carrera y tus proyectos al siguiente nivel.