Seguramente que alguna vez has pasado 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, ques 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 como podríamos beneficiarnos de él para nuestro caso hipotético:
- Marco se conecta a desarrollo y decide borrar una tabla que había copiado para hacer unas pruebas.
- 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?".
- Todos niegan la autoría de tal error, habrá que investigar con LogMiner, para ello primero se registran los online redo logs.
- Se activa la minería.
- Buscamos DDLs sobre la tabla en cuestión.
- Marco, ¿qué dijiste que estabas haciendo a eso de las 3pm? :-)
MARCO@orcl> drop table oltp.importante; Table dropped.
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.
SYS@orcl> execute dbms_logmnr.start_logmnr; PL/SQL procedure successfully completed.
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" ;
Acabamos de ver a LogMiner en acción, pero esto es solo una fracción de lo que prodemos 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 envíame un email y para que NO te pierdas ningún Post,
suscríbete por email ahora mismo!
3 comentarios, agrega el tuyo!
Hola Enrique,
Probe tu solución pero no me arrojo ningun resultado, que más puedo hacer????...
te dejo el codigo que utilice para que veas los resultados que obtuve
SQL> begin
2 dbms_logmnr.add_logfile(
3 '/smart/oradata/SMART/redo03.log', dbms_logmnr.new );
4 dbms_logmnr.add_logfile(
5 '/smart/oradata/SMART/redo02.log', dbms_logmnr.addfile );
6 dbms_logmnr.add_logfile(
7 '/smart/oradata/SMART/redo01.log', dbms_logmnr.addfile );
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> execute dbms_logmnr.start_logmnr;
PL/SQL procedure successfully completed.
SQL> select scn, timestamp, username, sql_redo
2 from v$logmnr_contents
3 where seg_owner='SMART'
4 and seg_name='GPRS_SGSN_MM2'
5 and operation = 'DDL';
no rows selected
SQL>
Saludos!!!!!
Hola Willyberto, es posible que la información ya no se encuentre en los online redo logs, recuerda que son sobre-escritos conforme se realizan transacciones. Si tienes tu base de datos en modo archivelog (que deberia estarlo si tiene algo de importancia), entonces adicionalmente registra los archive logs y continua con la busqueda. Saludos y gracias por participar.
Saludos, a mi si me retorna registros pero con un usuario unknown,fecha sin hora, numero de objeto, numero de columa...en fin nada concreto a simple vista. Uso 11gR2
Publicar un comentario