Contar el número de errores en el alert.log desde un día y hora determinados







Para contar el número de errores total de un fichero tipo alert log no hay demasiados problemas, lo podemos hacer mediante sun simple:

cat alert_$ORACLE_SID.log | grep ORA- | wc -l

El problema surge cuando queremos verificar sólo a partir de un punto, para por ejemplo, verificar cada hora si ha habido un error en la BBDD o no.

Para esto, la estrategia a seguir es hacer un tail -numero_lineas alert_$ORACLE_SID.log, el problema lo tenemos en que hemos de calcular el número de líneas que ha generado el alert en la última hora.
Establecemos una variable con el nombre de "fechaInicio" que definirá la hora a partir de la cual queremos sacar el número de errores en el alert de la siguinte forma.

$ fechaInicio=`date +"%a %b %d %H"`

Wed Nov 06 18

Ojo, es muy importante que fechaInicio se genere exactamente con el formato de fecha de nuetro alert.log, porque sino no nos filtrará correctemente.

Con lo cual, nuestro script localizará la linea de inicio de la hora así:
lineaInicio=`grep -n "$fechaInicio" alert_$ORACLE_SID.log | head -1 | cut -d':' -f1`
posteriormente obtenemos el total de lineas del fichero alert.log así
lineaTotal=`wc -l alert_$ORACLE_SID.log | awk '{ print $1 }'`

restamos las dos cantidades:
let lineDif=$lineaTotal-$lineaInicio
y así le podemos suministrar al tail esta cantidad, para que saque desde esa línea hasta ahora.
tail -$lineDif alert_$ORACLE_SID.log | grep ORA-
Así quedaría nuestro script final. (Le he añadido un if para que compruebe que el fichero existe)
if [ -f alert_$ORACLE_SID.log ]
then
fechaInicio=`date +"%a %b %d %H"`
lineaInicio=`grep -n "$fechaInicio" alert_$ORACLE_SID.log | head -1 | cut -d':' -f1`
lineaTotal=`wc -l alert_$ORACLE_SID.log | awk '{ print $1 }'`
let lineDif=$lineaTotal-$lineaInicio
num_ora=`tail -$lineDif alert_$ORACLE_SID.log | grep "^ORA-" | wc -l | sed 's/ //g'`
else
num_ora=0
fi 

Comentarios

Entradas populares de este blog

Ampliar tablespace Oracle

Oracle máximo de sesiones

Bloqueos en Oracle