Blackhold

ADRCI

Posted on març 25th, 2010 by admin

[purge_adrci.sh]

ADRCI es un programa que sirve para gestionar logs, incidencias, alertas y trazas de aplicaciones de ORACLE, como por ejemplo las bases de datos. Es una herramienta útil para identificar y empaquetar las incidencias que nos puedan dar las bases de daos en algún momento y mandarlas fácilmente a Oracle para analizarlas.

purge_ADRCI.sh es un script que busca cuales son los homes de las bases de datos ORACLE instaladas en nuestro servidor y limpia los ficheros generados, como logs, incidencias, alertas y trazas mas antiguos de x dias (en este script definido en 30 dias).

el script usa adrci en modo batch (aunque también funciona en modo de terminal virtual).

oracle@intbd01:~> adrci exec=”show homes”
ADR Homes:
diag/rdbms/salnitre/salnitre1
diag/asm/+asm/+ASM1
diag/clients/user_oracle/host_1234_12
diag/tnslsnr/salnitre01/listener_salnitre01

este comando nos muestra dónde están los datos de las aplicaciones que tenemos instaladas.

echo “[ADRCI] purgando el home $url_home de los reports mas antiguos de $dias dias” >> $LOGD
adrci exec=”set homepath $url_home;purge -age $minutos -type ALERT” >> $LOGD
adrci exec=”set homepath $url_home;purge -age $minutos -type INCIDENT” >> $LOGD
adrci exec=”set homepath $url_home;purge -age $minutos -type TRACE” >> $LOGD
adrci exec=”set homepath $url_home;purge -age $minutos -type CDUMP” >> $LOGD
adrci exec=”set homepath $url_home;purge -age $minutos -type HM” >> $LOGD

esta parte del script busca cada uno de los distintos tipos de bases de datos que almacena el adrci y los mas antiguos de $minutos, los borra. Por desgracia las trazas de la versión 11.1 no las borra, así que añadiremos otra línea que lo hace manualmente:

# eliminacion manual de los fitcheros y directorios de traza
echo “[ADRCI] limpiando los ficheros de traza” >> $LOGD
find /ORACLE/$url_home/trace/*_ora*trc -mtime +$dias -exec rm {} ; >> $LOGD
find /ORACLE/$url_home/trace/cdmp_* -mtime +$dias -exec rm -Rf {} ; >> $LOGD

Una vez ha hecho esto, hay 4 tipo de errores posibles.

1. Que no se hayan borrado ficheros mas antiguos de $dias, esto pasa cuando la maquina se sobresatura y empieza a crear directorios, el ADRCI no borra los ficheros generados dentro de directorios, luego el script te avisará en qué directorio quedan ficheros antiguos por borrar.

2. No se encuentra oraenv.sh: oraenv.sh define las variables de entorno, este fichero tiene que estar en ~ (/ORACLE/home/oracle/), si no el script no sabrá donde ir a buscarlo. Si no se define este fichero cron no encuentra adrci y adrci no encontrará donde se encuentran los homes de oracle.

3. No hay ADR homes: esto quiere decir que no hay ningún producto de oracle instalado en la maquina o no están definidas las variables de entorno que hacen referencia a orahome.

4. No se encuentra adrci: o no está instalado, o las variables de entorno no están definidas correctamente, comprueba que oraenv.sh está en su sitio.

Para cualquier otra duda consultar los comentarios del script:

#!/bin/bash

#————— variables de entorno —————————————–
. /ORACLE/home/oracle/oraenv.sh

DLOG=$HOME/log
LOGD=$DLOG/purge_ADRCI.log
LOGH=$DLOG/purge_ADRCI.historico

# definir la vida de los ficheros (los ficheros mas antiguos de $dias se borraran)
dias=30
((minutos=$dias*24*60))

MAIL=mi@mail.com

#//////////////////////////////////////////////////////////////////////////////////////////////
#/////////////////////////// CUERPO PROGAMA ///////////////////////////////////////////
#//////////////////////////////////////////////////////////////////////////////////////////////

cd /ORACLE/home/oracle

echo -e “**************** INICIO PURGA DE LOS ARDCI ORACLE | ” `date` ” ****************” > $LOGD

adrci exec=”show homes” |grep -v : |while read url_home
do
echo “[ADRCI] purgando el home $url_home de los reports mas antiguos de $dias días” >> $LOGD
adrci exec=”set homepath $url_home;purge -age $minuts -type ALERT” >> $LOGD
adrci exec=”set homepath $url_home;purge -age $minuts -type INCIDENT” >> $LOGD
adrci exec=”set homepath $url_home;purge -age $minuts -type TRACE” >> $LOGD
adrci exec=”set homepath $url_home;purge -age $minuts -type CDUMP” >> $LOGD
adrci exec=”set homepath $url_home;purge -age $minuts -type HM” >> $LOGD

# eliminación manual de los ficheros y directorios de traza
echo “[ADRCI] limpiando los ficheros de traza” >> $LOGD
find /ORACLE/$url_home/trace/*_ora*trc -mtime +$dias -exec rm {} ; >> $LOGD
find /ORACLE/$url_home/trace/cdmp_* -mtime +$dias -exec rm -Rf {} ; >> $LOGD

# ERROR 1 # aún hay ficheros mas antiguos a la fecha
# solución: comprueba los derechos sobre los ficheros
ERROR=”COMPLETED”
ERROR11=`find /ORACLE/$url_home/trace/*_ora*trc -mtime +$dias |wc -l`
ERROR12=`find /ORACLE/$url_home/alert/* -mtime +$dias |wc -l`
ERROR13=`find /ORACLE/$url_home/incident/* -mtime +$dias |wc -l`
ERROR14=`find /ORACLE/$url_home/cdump/* -mtime +$dias |wc -l`
ERROR15=`find /ORACLE/$url_home/hm/* -mtime +$dias |wc -l`

if [[ $ERROR11 -ne 0 || $ERROR12 -ne 0 || $ERROR13 -ne 0 || $ERROR14 -ne 0 || $ERROR15 -ne 0 ]]; then
ERROR=”MAL [ERROR 1]”
fi

echo -e “error?: ” $ERROR >> $LOGD
echo -e “trazas: ” $ERROR11 >> $LOGD
echo -e “alerts: ” $ERROR12 >> $LOGD
echo -e “incidentes: ” $ERROR13 >> $LOGD
echo -e “cdumps: ” $ERROR14 >> $LOGD
echo -e “hm: ” $ERROR15 >> $LOGD

done

if [ `cat $LOGD |grep “MAL” |wc -l` -ne 0 ]; then
ERROR=”MAL [ERROR 1]”
ERROR1=1
else
ERROR=”COMPLETED”
ERROR1=0
fi

# ERROR 2 # no existe oraenv.sh
# solución: cambiar la ubicación del script oraenv.sh o crear un vinculo simbólico a ~ con un fichero llamado así
ERROR2=`cat $DLOG/purge_ADRCI.cron.log |grep “oraenv” |grep “No such file or directory” |wc -l`

if [ $ERROR2 -ne 0 ]; then
ERROR=”MAL [ERROR 2]”
fi

# ERROR 3 # No ADR homes, adrci se ha ejecutado pero por algún motivo no encuentra los homes.
# solución: comprobar las variables de entorno o que haya bases de datos instaladas
ERROR3=`cat $DLOG/purge_ADRCI.log |grep “No ADR homes” |wc -l`

if [ $ERROR3 -ne 0 ]; then
ERROR=”MALAMENT [ERROR 3]”
fi

# ERROR 4 # No se encuentra adrci
# solución: comprobar las variables de entorno, mirar si si `echo $PATH` muestra lo mismo que hay en oraenv.sh
ERROR4=`cat $DLOG/purge_ADRCI.cron.log |grep “adrci: command not found” |wc -l`

if [ $ERROR4 -ne 0 ]; then
ERROR=”MAL [ERROR 4]”
fi

# ERROR N # Descripción
# solución: solución al problema n

# Para identificar los errores
echo “error: ” $ERROR >> $LOGD
echo “error1 (ficheros antiguos): ” $ERROR1 >> $LOGD
echo “error2 (oraenv): ” $ERROR2 >> $LOGD
echo “error3 (no adrci homes): ” $ERROR3 >> $LOGD
echo “error4 (no adrci exec): ” $ERROR4 >> $LOGD

echo -e “**************** FINALIZA LA PURGA DE LOS ADRCI ORACLE | $ERROR | ” `date` ” *******” >> $LOGD
echo -e “////////////////////////////////////////////////////////////////////////////” >> $LOGD

if [ “$ERROR” != “COMPLETED” ]; then
echo -e “[ERROR DETECTADO] Recogiendo logs…”
cat $DLOG/purge_ADRCI.cron.log >> $LOGD
echo -e “[ERROR DETECTADO] logs recogidos correctamente.” >> $LOGD
echo -e “[ERROR DETECTADO] consultad el script purge_ADRCI.sh para mas información” >> $LOGD
echo -e “[ERROR DETECTADO] se manda un correo electrónico a: $MAIL” >> $LOGD
cat $LOGD |mailx -s “ALERTA `hostname` : ADRCI ] $ERROR” $MAIL
fi

cat $LOGD >> $LOGH

This entry was posted on dijous, març 25th, 2010 at 01:27 and is filed under bash, bbdd. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Response

« »

guy fawkes