# 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:

```sql
ARCHIVE LOG LIST;
```

Si no lo está, actívalo:

```sql
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:

```sql
-- 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:

```sql
-- 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:

```sql
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):

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

### Iniciar sesión de LogMiner:

```sql
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:

```sql
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:

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

---

## 6\. Finalizar sesión LogMiner

```sql
BEGIN
  DBMS_LOGMNR.END_LOGMNR;
END;
/
```

---

## Comparación rápida con otras técnicas

| Técnica | Licencia | Complejidad | Ideal para |
| --- | --- | --- | --- |
| **LogMiner** | Incluida | Media | Auditoría, recuperación puntual |
| Flashback Query | Enterprise | Baja | Reversiones rápidas |
| RMAN + Restore Point | Cualquier | Alta | Recuperació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** !
