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:
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:
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