6f429244e498457b8400e72e4af683b0 Alberto Blog: Space log files problems

mercoledì 30 novembre 2011

Space log files problems

Un aspetto importante, non secondario che un DBA deve sempre tener conto è la dimensione dei file di log di Oracle, per esempio il listener.log.
Nei database altamente transazionali questo file può raggiungere anche in pochi giorni dimensioni elevate.
Nel log file listener si trovano moltissime informazioni riguardanti la sicurezza, chi si connette al DB e i possibili errori di connessione, anche se come tutti sappiamo non è un'attività entusiasmante tenere controllato questo file soprattutto se raggiunge una dimensione molto elevata.
Così ho pensato di creare uno script sempre su Solaris che schedulato 1 volta al giorno oppure in base alla crescita del file, si occupi almeno di tenere monitorata la dimensione:

#!/usr/bin/ksh
MAX_SIZE="200000000" 

FILE="/network/log/listener.log" 
FILEO="/network/log/listener.old"
FILEZ="/network/log/listener_`date +%Y_%m_%d`.gz"
LOGFILE="/tmp/Sitlistener.log"

SIZE="$(ls -al $ORACLE_HOME$FILE | awk '{print $5}')"


if [ "$SIZE" -gt "$MAX_SIZE" ] ; then
echo "$SIZE"
echo " \n$(date) Run listener space procedure, size "$SIZE" .">> $LOGFILE 
lsnrctl set log_status off >> $LOGFILE >&1
status=$?
if [ ${status} -eq 0 ]
then
echo $status
else
echo " \n$(date) Problem listener log_status off.">> $LOGFILE 
mailx -s " Problem listener log_status off." alberto@abc.com < $LOGFILE
exit 1
fi
mv $ORACLE_HOME$FILE $ORACLE_HOME$FILEO >> $LOGFILE >&1
status=$?
if [ ${status} -eq 0 ]
then
echo $status
else
echo " \n$(date) Problem rename listener.">> $LOGFILE 
mailx -s " Problem rename listener." alberto@abc.com < $LOGFILE
exit 1
fi
lsnrctl set log_status on >> $LOGFILE >&1
status=$?
if [ ${status} -eq 0 ]
then
echo $status
else
echo " \n$(date) Problem listener log_status on.">> $LOGFILE 
mailx -s " Problem listener log_status on." alberto@abc.com < $LOGFILE
exit 1
fi
gzip -c $ORACLE_HOME$FILEO > $ORACLE_HOME$FILEZ >&1
status=$?
if [ ${status} -eq 0 ]
then
echo $status
else
echo " \n$(date) Problem gzip old listener.">> $LOGFILE 
mailx -s " Problem gzip old listener." alberto@abc.com < $LOGFILE
exit 1
fi
rm $ORACLE_HOME$FILEO >> $LOGFILE >&1
status=$?
if [ ${status} -eq 0 ]
then
echo $status
else
echo " \n$(date) Problem delete old listener.">> $LOGFILE 
mailx -s " Problem delete old listener." alberto@abc.com < $LOGFILE
exit 1
fi
else
echo " \n$(date) Check listener space, no Problem." $LOGFILE
fi

Questo script esegue in una prima fase il controllo della dimensione del listener.log e se lo trova superiore ad MAX_SIZE esegue rispettivamente:

1)Imposta set log status off del file ossia il listener smette di scrivere in questo file.
2)Rinomina il file listener in listener.old
3)Imposta set log status on del file, il listener riprendere a scrivere su un nuovo file.
4)La compressione del file attraverso il Gzip.
5)Cancella il file listener.old precedentemente compresso

Lo script inoltre va a popolare un log file.
L'exit status viene sempre controllato in modo tale da terminare lo script se l'exit status non fosse uguale a 0 mandando una mail.
Se le dimensioni del log non superano quella del MAX_SIZE ovviamente lo script non esegue niente ma viene comunque popolato il file di log dello script.
Una volta finito lo script nel path $ORACLE_HOME/network/log si visualizza una situazione simile con il comando ls- al:

drwxr-xrwx   2 oracle   dba            6 Nov 29 16:29 .
drwxr-xrwx  13 oracle   dba           13 Jun 30  2010 ..
-rw-r-----   1 oracle   dba      3165694 Nov 30 12:26 listener.log
-rw-r--r--   1 oracle   dba      19469262 Nov 29 16:17 listener_2011_11_29.gz
-rw-r-----   1 oracle   dba      1605299 Nov 30 06:45 sqlnet.log

Nessun commento:

Posta un commento