UnDomain Un friki suelto por la red

Reply to comment


LogMiner - Buceando en los redo

No se vosotros, pero a mi me ha tocado escarbar un poco entre los redo log (online y offline) para averiguar que le pasa a una BDD que se nos ha vuelto un poco loca.

Yo no sabia de esta herramienta, pero ha sido tener la necesidad de usarla y enseguida me la han recomendado... así que como es algo útil y hace tiempo que no pongo nada en el blog, voy a poner como se usa esta fantástica herramienta.

El LogMiner es un paquete que viene por defecto instalado en la BDD y su función es la de poder interpretar el contenido de los REDO de una manera cómoda y sencilla. Tan cómoda y sencilla como puede ser consultar unas vistas de la BDD.

Para poder utilizar este paquete necesitamos tener definido el parámetro 'utl_file_dir', y conocer la ruta a la que apunta:
select value from v$parameter where name='utl_file_dir';

Si no lo tenemos definido, lo tenemos que configurar, pero ojo, que es un parámetro estático. Tendremos que reiniciar la BDD para modificarlo:
alter system set utl_file_dir='[ruta]' scope=spfile;

A partir de aquí, todo se ha de realizar con el usuario SYS y solo es valido para la sesión actual. Es decir, no puedes realizar todo esto con un usuario, y luego abrir otro para consultar los datos. Una vez se cierra la sesión de SYS con la que se ha hecho todo, también se cierra la sesión de LogMiner.

Esa ruta la necesitaremos para poder crear el "diccionario", que no es más que un fichero de texto de unos 20MB con un churro de sentencias SQL.

Este fichero es que el usará Oracle para interpretar los ficheros que le indiquemos y se ha de crear con la BDD con la que se han creado los redo. Usease, no puedes utilizar un fichero de diccionario de otra BDD.

Para crear este fichero solo se ha de indicar como parámetros el nombre del fichero y la ruta donde se quiere crear. Esta ruta ha de formar parte del directorio indicado en el parámetro 'utl_file_dir' o de lo contrario, no se podrá crear.
exec DBMS_LOGMNR_D.BUILD( DICTIONARY_FILENAME =>'[nombre del fichero]', DICTIONARY_LOCATION => '[ruta donde crear el fichero]');

Ahora que tenemos creado el fichero de diccionario solo tenemos que indicar los ficheros que queremos investigar.
Eso es tan fácil como esto:
exec DBMS_LOGMNR.add_logfile('[fichero REDO con ruta completa]');

Si quieres investigar varios ficheros, solo hay que repetir el comando con los ficheros deseados, tanto ON-LINE como OFF-LINE.

Para eliminar un fichero que hemos añadido por error, o simplemente porque no tiene la informacion que quieres, se utiliza este comando (tranquilo, no borra nada):
exec DBMS_LOGMNR.REMOVE_LOGFILE (LOGFILENAME => '[fichero REDO con ruta completa]');

Una vez tenemos "añadidos/eliminados" todos los ficheros solo tenemos que "iniciar la sesión" de LogMiner, para lo que necesitaremos los datos del diccionario que hemos creado al principio:
exec DBMS_LOGMNR.START_LOGMNR(DICTFILENAME =>'[ruta y nombre del diccionario]');

Y con esto ya podemos ver todo lo que se ha hecho en la BDD.... pero no solo eso, sino que también tendremos la sentencia SQL para deshacerlo:
select sql_redo, sql_undo from v$logmnr_contents;

Por descontado, hay mas vistas, pero de momento solo he necesitado mirar en esta....
Si queréis sacar mas chica, no dudéis en hacer un "select *" a las siguientes vistas:

  • V$LOGMNR_CONTENTS
  • V$LOGMNR_DICTIONARY
  • V$LOGMNR_LOGS
  • V$LOGMNR_PARAMETERS
  • V$LOGMINER_CONTENTS

Para finalizar la sesión de LogMiner solo es necesario lanzar el siguiente comando:
exec DBMS_LOGMNR.END_LOGMNR;

Por descontado, si se cierra la conexión con la BDD se cierra automaticamente la sesión de LogMiner.

De momento no he tenido que trastear mucho con esta utilidad, así que si alguien puede aportar algo, será bien venido :)

Tags:

Responder

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Mientras tanto, en "¿Alguien ha visto mi martillo?"...


Inicio de sesión


Todo el contenido mostrado ha sido obtenido libremente por la red. Las marcas indicadas son propiedad de sus legítimos dueños y se muestran a modo informativo de manera libre y voluntaria, sin intención publicitaria ni ánimo de lucro. Todo el material propio, y salvo que se indique lo contrario, se encuentra bajo licencia Creative Commons. Si tienes el Copyright de algún contenido o has detectado algna anomalia, por favor, infórmalo al correo undomain@gmail.com para ser corregido cuanto antes. El autor de esta Web no se hace responsable del contenido de terceras personas y de sites ajenos a este.

Powered by Drupal, an open source content management system