Search
Close this search box.

Desapareció mi tabla, confiesen: ¿quién fue?

Seguramente que alguna vez has pasado por algo similar, alguien eliminó alguna tabla, índice, usuario, borró información o la modificó y luego, cuando los problemas aparecen, nadie confiesa, «yo no estaba», «yo hace tiempo que ni me conecto a la base de datos», «debe ser un bug de Oracle», son algunas de las cosas que nos irán respondiendo cuando hacemos las indagaciones. ¿Qué hago si no tengo la auditoria habilitada, ni triggers que hagan seguimiento? Simple: usar LogMiner.

LogMiner, que es parte de Oracle Database, permite consultar la información contenida en los online y archived redo logs haciendo uso de SQL. Recordemos que en los redo log files se registra información sobre la actividad en la base de datos.

Veamos, mediante un ejemplo, cómo podríamos beneficiarnos de él para nuestro caso hipotético:

1. Marco se conecta a desarrollo y decide borrar una tabla que había copiado para hacer unas pruebas.

MARCO@orcl> drop table oltp.importante;
Table dropped.

2. Se empiezan a recibir llamadas de queja por una aplicación fallando permanentemente y revisando los logs se encuentra que la tabla oltp.importante ha sido eliminada. Marco siente un nudo en la garganta mientras piensa «¿será posible que me haya conectado a producción en lugar de a desarrollo?».

3. Todos niegan la autoría de tal error, habrá que investigar con LogMiner, para ello primero se registran los online redo logs.

SYS@orcl>  begin
  2  dbms_logmnr.add_logfile(
  3    '/logs/redo01.log', dbms_logmnr.new );
  4  dbms_logmnr.add_logfile(
  5    '/logs/redo02.log', dbms_logmnr.addfile );
  6  dbms_logmnr.add_logfile(
  7    '/logs/redo03.log', dbms_logmnr.addfile );
  8  end;
  9  /
PL/SQL procedure successfully completed.
4. Se activa la minería.
SYS@orcl> select scn, timestamp, username, sql_redo
  2  from v$logmnr_contents
  3  where seg_owner='OLTP'
  4  and seg_name='IMPORTANTE'
  5  and operation = 'DDL';

    SCN TIMESTAMP           USERNAME
------- ------------------- ----------
SQL_REDO
----------------------------------------------------------------------------
3720771 04/09/2008 15:16:52 MARCO
ALTER TABLE "OLTP"."IMPORTANTE" RENAME TO "BIN$VheiNLbMC5bgQKjAMndYmA==$0" ;
3720771 04/09/2008 15:16:52 MARCO
drop table oltp.importante AS "BIN$VheiNLbMC5bgQKjAMndYmA==$0" ;
5. Buscamos DDLs sobre la tabla en cuestión.
SYS@orcl>  begin
  2  dbms_logmnr.add_logfile(
  3    '/logs/redo01.log', dbms_logmnr.new );
  4  dbms_logmnr.add_logfile(
  5    '/logs/redo02.log', dbms_logmnr.addfile );
  6  dbms_logmnr.add_logfile(
  7    '/logs/redo03.log', dbms_logmnr.addfile );
  8  end;
  9  /
PL/SQL procedure successfully completed.

6. Marco, ¿qué dijiste que estabas haciendo a eso de las 3pm ?

Acabamos de ver a LogMiner en acción, pero esto es solo una fracción de lo que podemos hacer, si deseas saber más de su uso y posibilidades, encontrarás todo lo que necesitas en el manual Oracle Database Utilities.

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o ¡contáctame ahora mismo!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Posts Relacionados

Aprenda a identificar la fila involucrada en la ocurrencia del evento de espera "enq: TX - row lock contention"
Aprenda a resolver el error CRS-2304 GPnP profile signature verification failed al iniciar una base de datos 11.2 en un cluster 19c.
Aprenda a corregir los permisos dañados de un Oracle Home, ya sea de Oracle Grid o de Oracle Database Server

¿Necesitas Ayuda?

Completa estos datos y estaré en contacto a la brevedad.