Hoy vamos a ver una entrada sencillita en la que haremos un bash-script que nos limpie de manera ordenada el contenido del diag
El comando ADRCi permite la ejecución de comandos batch bien sea mediante la cláusula exec o bien contenidos en un fichero de texto separados por punto y coma.
Lo que vamos ha hacer es ejecutar para cada uno de los homes del la base de datos, asm y listener, el comando purge para cada uno de los tipos de elementos que guarda el diagnostics_dest
En nuestro caso, usaremos el modo script pero podíamos haber puesto todos los comandos en una línea separada por puntos y coma y el funcionamiento sería el mismo.
El script que vacia el diagnostics_dest para todo lo anterior a X días es:
#!/bin/bash
#
# Script que purga del ADRCLI para $1 DIAS
#
#
#
#
export ORAENV_ASK=NO
. oraenv 1>/dev/null
# Salida de debug
DEBUG=0
#Comprobamos que se ha llamado de manera correcta
if [ $# -ne 1 ]; then
echo "Uso Purgar_logs DIAS "
exit 3;
fi
# Inicializamos valores para el script
export TEMPORAL=/var/tmp/purgar_temporal_$$.log
export DIAS=$(($1*1440))
## Comenzamos la ejecucion
if [ $DEBUG -eq 1 ]; then
echo "DEBUG: ORACLE_BASE=$ORACLE_BASE"
echo "DEBUG: TEMPORAL= ${TEMPORAL} "
echo "DEBUG: Dias= $2 en min $DIAS"
fi
# Comenzamos las iteraciones
adrci_homes=( $(adrci exec="show homes" | grep -e rdbms -e asm -e tnslsnr))
for adrci_home in ${adrci_homes[@]}
do
#Generamos el fichero de comandos
echo "set home ${adrci_home} ;" > ${TEMPORAL}
echo "echo \"Purgamos en ${adrci_home} \"" >> ${TEMPORAL}
echo "purge -age ${DIAS} -type ALERT ;" >> ${TEMPORAL}
echo "purge -age ${DIAS} -type TRACE ;" >> ${TEMPORAL}
echo "purge -age ${DIAS} -type INCIDENT ;" >> ${TEMPORAL}
echo "purge -age ${DIAS} -type HM ;" >> ${TEMPORAL}
echo "purge -age ${DIAS} -type utscdmp;" >> ${TEMPORAL}
echo "purge -age ${DIAS} -type cdump;" >> ${TEMPORAL}
echo "exit; " >> ${TEMPORAL}
if [ $DEBUG -eq 1 ]; then
echo "DEBUG: "
echo "DEBUG: adrci SCRIPT=${TEMPORAL}"
echo "DEBUG: EL etemporal es "
echo "DEBUG: -inicio temporal-"
cat ${TEMPORAL}
echo "DEBUG: -fin temporal-"
fi
adrci SCRIPT=${TEMPORAL}
rm ${TEMPORAL}
done #Fin del bucle
Como véis, es extremadamente sencillo, y bastante mas limpio que hacer el borrado a mano