Presentación de Oracle Logminer, una herramienta para muchos desconocida que nos permite no solo deshacer o recuperar transacciones en la Base de Datos validada con COMMIT, pero no deseada o errónea sino que además también nos sirve como una herramienta de auditoria
2. El LogMiner es un paquete que viene por defecto instalado con el
motor de la BBDD (RDBMS) y su función es la de poder
interpretar el contenido de los ficheros de REDO de una manera
cómoda y sencilla.
Logminer nos permite realizar una recuperación lógica granular
deshaciendo cambios específicos efectuados por una o mas
transacciones. De esta manera se minimiza la necesidad de realizar
una recuperación hasta un punto en el tiempo cuando se produce
un error de aplicación lógica
¿Qué es LogMiner?
3. LogMiner procesa los ficheros de redo log y traduce su contenido
en sentencias SQL que representan las operaciones lógicas
realizadas en la Base de Datos.
Después, la vista V$LOGMNR_CONTENTS lista las sentencias
SQL reconstruidas que representan las operaciones originales
(columna SQL_REDO) y las sentencias SQL correspondientes para
deshacer las operaciones (columna SQL_UNDO).
LogMiner contiene un procedimiento para extraer la informacion
del diccionario de datos a un archivo de texto del Sistema
Operativo denominado archivo de diccionario de LogMiner.
¿Qué es LogMiner?
4. 1. El primer paso para analizar los archivos log consiste en crear el
archivo de diccionario
- Inicializar el parámetro de la BBDD UTL_FILE_DIR con el
directorio en que el Oracle creara el archivo de diccionario
- Ejecutar el procedimiento BUILD del paquete
DBMS_LOGMNR_D para generar este archivo. Este
procedimiento esta incluido dentro del fichero
?/rdbms/admin/dbmslogmnrd.sql (ejecutar con el usuario SYS).
SQL> exec DBMS_LOGMNR_D.BUILD('orc1dict.ora','/oracle/database');
¿Como funciona
LogMiner?
5. 2. LogMiner puede analizar tanto los ficheros de de archivelog
como los ficheros de redolog online. Para poder realizar este
análisis se proporciona una lista de los archivos que se van analizar
con el procedimiento DBMS_LOGMNR.ADD_LOG_FILE.
¿Como funciona
LogMiner?
6. Para agregar otros archivos a la lista ya creada, se utiliza el
argumento ADDFILE.
SQL>exec
DBMS_LOGMNR.ADD_LOG_FILE('/oracle/database/ORC1/log2orc1.ora',
DBMS_LOGMNR.ADDFILE);
Para desechar los nombres de archivo suministrados anteriormente
y crear una nueva lista de archivos de análisis, se incluye el
argumento NEW al dar el nombre al primer archivo de la lista.
SQL> exec
DBMS_LOGMNR.ADD_LOG_FILE('/oracle/database/ORC1/log1orc1.ora',
DBMS_LOGMNR.NEW);
¿Como funciona
LogMiner?
7. 3. Una vez creada la lista de los archivos que se deben de analizar,
puede iniciarse el análisis mediante el procedimiento
START_LOGMNR. Los parámetros que acepta este procedimiento
son:
STARTSCN = Limite inferior del rango SCN que se va analizar
ENDSCN = Limite superior del rango SCN que se va analizar
STARTTIME = Valor de fecha que indica el limite inferior del
rango de tiempo de análisis
ENDTIME = Valor de fecha que indica el limite superior del
rango de tiempo de análisis
DICTFILENAME = Nombre del archivo de diccionario LogMiner.
¿Como funciona
LogMiner?
8. exec DBMS_LOGMNR.START_LOGMNR(
dictfilename => '/oracle/database/orc1dict.ora',
starttime => to_date('01/01/2004:08AM','DD/MM/YYYY:HHAM'),
endtime => to_date('01/01/2004:10AM','DD/MM/YYYY:HHAM'));
Extrae los detalle de las transacciones realizadas entre las hora
especificadas
¿Como funciona
LogMiner?
9. 4. Utilize el procedimiento END_LOGMNR para liberar los
recursos utilizados en la operación de análisis
SQL> exec DBMS_LOGMNR.END_LOGMNR;
5. La vista del diccionario V$LOGMNR_CONTENTS se puede
consultar en la sesión que ha realizado el analisis para ver la
información de registro. Otras sesiones no pueden ver los datos al
consultar esta vista. Si otras sesiones deben el resultado, o si se
deben de realizarse varios pases del contenido de la vista, se
debería de almacenar la información de la vista en una tabla.
¿Como funciona
LogMiner?
10. Descripción de la vista V$LOGMNR_CONTENTS
SCN = Numero de cambio del sistema
TIMESTAMP = Registro de hora
THREAD# = Numero de thread
LOG_ID = Identificador del registro
XIDUSN = Numero del segmento undo identificador de transacción
XIDSLOT = Numero de ranura del identificador de transacción
XIDSQN = Numero de secuencia del identificador de transacción
ABS_FILE = Numero de archivo absoluto del bloque de datos
REL_FILE = Numero de archivo relativo del bloque de datos
DATA_BLK# = Numero de bloque de datos
DATA_OBJ# = Numero del objeto del bloque de datos
DATA_OBJD# = Numero del objeto de datos del bloque de datos
¿Como funciona
LogMiner?
11. Descripción de la vista V$LOGMNR_CONTENTS (II)
SEG_OWNER = Nombre del propietario del segmento
SEG_NAME = Nombre del segmento
SEG_TYPE_NAME = Tipo del segmento
TABLE_SPACE = Nombre del tablespace del segmento
ROW_ID = Identificador de fila
SESSION# = Numero de sesión
SERIAL# = Numero de serie
USERNAME = Nombre del usuario
ROLLBACK = Solicitud de rollback
OPERATION = Operación
SQL_REDO = Redo de SQL
SQL_UNDO = Undo de SQL
INFO = Mensaje informativo
STATUS = Estado
¿Como funciona
LogMiner?
12. SCN proporciona la información apropiada para realizar una
recuperación hasta un punto en el tiempo, como RECOVER
UNTIL SCN.
TIMESTAMP proporciona la informacion exacta para realizar una
recuperación hasta un punto en el tiempo, como RECOVER
UNTIL TIME
SEG_OWNER y SEG_NAME identifican el objeto y el propietario
en el que tuvo lugar la operación DML
USERNAME identifican el usuario que ejecuto la sentencia
SQL_REDO repite la sentencia que se ejecuto
SQL_UNDO explica como deshacer la operación realizada en la
sentencia especificada en SQL_REDO
¿Como funciona
LogMiner?
13. Para obtener información acerca de los log analizados hay que
consultar las siguientes vistas dinámicas:
V$LOGMNR_DICTIONARY (TIMESTAMP, FILENAME),
V$LOGMNR_LOGS (LOG_ID, FILE_NAME, LOW_SCN, HIGH_SCN, LOW_TIME,
HIGH_TIME)
v$LOGMNR_PARAMETERS => Argumentos que se proporcionaron durante
el análisis
¿Como funciona
LogMiner?
14. Ejemplo practico:
1. Crear el diccionario de logminer
exec DBMS_LOGMNR_D.BUILD( DICTIONARY_FILENAME =>'dictionary.ora',
DICTIONARY_LOCATION => '/opt/oracle/PRETRA/utl_file/migracion');
2. Añadir logs al diccionario (repetir esto para cada log)
exec
DBMS_LOGMNR.add_logfile('/opt/oracle/PRETRA/utl_file/PRETRA1_1_29323
_591900604.arc');
¿Como funciona
LogMiner?
15. Ejemplo practico (II)
3. Arrancar el logminer para poder consultar las vistas
exec DBMS_LOGMNR.START_LOGMNR(DICTFILENAME =>
'/opt/oracle/PRETRA/utl_file/migracion/dictionary.ora');
4. Consulta para ver la información cargada
select to_char(timestamp,'DD-MM-YYYY HH24:MI:SS'), seg_owner, table_name,
operation, sql_redo
from v$logmnr_contents
where trim(sql_redo) is not null;
¿Como funciona
LogMiner?
16. Ejemplo practico (III):
OPERATION SQL_REDO SQL_UNDO
===============================================================================
DELETE delete from "OE"."ORDERS" insert into "OE"."ORDERS"
where "ORDER_ID" = '2413' ("ORDER_ID","ORDER_MODE",
and "ORDER_MODE" = 'direct' "CUSTOMER_ID","ORDER_STATUS",
and "CUSTOMER_ID" = '101' "ORDER_TOTAL","SALES_REP_ID",
and "ORDER_STATUS" = '5' "PROMOTION_ID")
and "ORDER_TOTAL" = '48552' values ('2413','direct','101',
and "SALES_REP_ID" = '161' '5','48552','161',NULL);
and "PROMOTION_ID" IS NULL
and ROWID = 'AAAHTCAABAAAZAPAAN';
¿Como funciona
LogMiner?