Hoy voy a describir cómo utilizar LogMiner para revisar lo que hay dentro de los archive en una base de datos diferente a la que generó le archived log (basado en la nota How to Setup LogMiner [ID 111886.1] de metalink)
Lo primero que necesitamos de la base de datos original:
1. El archivo Archive
2. El diccionario de la base de datos, para obtenerlo haremos esto:
2.1 Asegurarnos que existe un directorio definido en el UTL_FILE_DIR y que tenemos permisos de escritura.
Vamos a utilizar este ejemplo:
UTL_FILE_DIR = /oracle/logs
2.2 Ejecutar el procedimiento DBMS_LOGMNR_D.BUILD, para generar el diccionario de la base de datos de la cual queremos ver el contenido de sus archives. Le tenemos que pasar dos parámetro el nombre del fichero y el directorio en el que queremos que se genere:
Por ejemplo:
EXECUTE DBMS_LOGMNR_D.BUILD( - DICTIONARY_FILENAME =>'dictionary.ora', - DICTIONARY_LOCATION => '/oracle/logs'); (No os olvidéis de poner el guión ‘-‘ al final de cada línea cuando se ejecuta un comando PL/SQL de más de una línea en SQL*PLUS)
Una vez que tenemos los dos archivos, el archived log y el diccionario nos vamos a una instancia Oracle 8.1.X o superior.
Especificar los ficheros en la base de datos donde los vamos a analizar (diferente de la original). Lo primero que hay que hacer es lo siguiente:
1. Crear una lista con los archive a analizar. Con el primer archivo se debe especificar tenemos que añadir la opción NEW (crea un nueva lista). Ejemplo:
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( - LOGFILENAME => '/oracle/logs/log1.f', - OPTIONS => dbms_logmnr.NEW);
2. Si se van a añadir más archivos:
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( - LOGFILENAME => '/oracle/logs/log2.f', - OPTIONS => dbms_logmnr.ADDFILE);
3. Para borrar uno de la lista:
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( - LOGFILENAME => '/oracle/logs/log2.f', - OPTIONS => dbms_logmnr.REMOVEFILE);
4. Empezar a utilizar logminer, con el diccionario que se ha creado en la anterior base de datos:
EXECUTE DBMS_LOGMNR.START_LOGMNR( - DICTFILENAME =>'/oracle/dictionary.ora');
Empezar a utilizarlo para una fecha en concreto:
EXECUTE DBMS_LOGMNR.START_LOGMNR( - DICTFILENAME => '/oracle/dictionary.ora', - STARTTIME => to_date('01-Jan-1998 08:30:00', 'DD-MON-YYYY HH:MI:SS'), - ENDTIME => to_date('01-Jan-1998 08:45:00', 'DD-MON-YYYY HH:MI:SS'));
Para un SCN en concreto:
EXECUTE DBMS_LOGMNR.START_LOGMNR( - DICTFILENAME => '/oracle/dictionary.ora', - STARTSCN => 100, - ENDSCN => 150);
5. El contenido de los archive se encuentrará en la tabla V$LOGMNR_CONTENTS ordenado por SCN.