############################################################## ### Pascalou45200@gmail.com ### ### V1.1 -> 01/11/2009 ### ###--------------------------------------------------------### ### LISTE DES PARAMETRES ### ### -u/-U user ### ### -p/-P Password ### ### -l/-L Listener(à distance) ### ### ou ORACLE_SID(En Local) ### ### -t/-T Nom du tablespace ### ###--------------------------------------------------------### ### -m/-M a vide (Optionel) ### ### -m pour checker tous les DBF du TBS en parametre ### ### -m Utilise la requete check_autoextend_multi.sql ### ### sinon Utilise la requete check_autoextend.sql ### ###--------------------------------------------------------### ############################################################## typeset -i NB_PARAM=$# LISTE_PARAM=$* User=""; MDP=""; Listener="" typeset -i WARNING=0 typeset -i CRITICAL=0 typeset -i TauxOccup=0 TBS="" typeset -i ResultatEntier=100 typeset -i ResultatDecimal=0 Message="" RcOk=0 RcWarning=1 RcCritique=2 RcUnknown=3 Rc=$RcOk CheminSql=$(dirname $0) RequeteSql="check_autoextend.sql" FicResultat=$CheminSql/result.log Multi=0 NbreErreur=0 Message_OK="" Message_Warning="" Message_critical="" usage(){ clear echo " ######################################################### ### LISTE DES PARAMETRES ### ### -u/-U user ### ### -p/-P Password ### ### -l/-L Listener(à distance) ### ### ou ORACLE_SID(En Local) ### ### -t/-T Nom du tablespace ### ###---------------------------------------------------### ### -m/-M (Optionel) ### ### -m pour checker tous les DBF du TBS en parametre ### ### -m Utilise la requete check_autoextend_multi.sql ### ### sinon Utilise la requete check_autoextend.sql ### #########################################################" exit 0 } ############################## ### Gestion des paramètres ### ############################## listeParam(){ for i in $LISTE_PARAM do case "$i" in -C*|-c* ) CRITICAL=`echo $i | cut -c 3-` ;; -W*|-w* ) WARNING=`echo $i | cut -c 3-` ;; -U*|-u* ) User=`echo $i | cut -c 3-` ;; -L*|-l* ) Listener=`echo $i | cut -c 3-` ;; -P*|-p* ) MDP=`echo $i | cut -c 3-` ;; -T*|-t* ) TBS=`echo $i | cut -c 3-` ;; -M*|-m* ) RequeteSql="check_autoextend_multi.sql"; Multi=1 ;; -H*|-h* ) usage ;; esac done } ExecuteRequete(){ echo "$ORACLE_HOME/bin/sqlplus -s $User/$MDP@$Listener @$CheminSql/$RequeteSql $FicResultat $TBS" > $CheminSql/Commande.ksh chmod 777 $CheminSql/Commande.ksh $CheminSql/Commande.ksh if [ -f $CheminSql/Commande.ksh ] then rm -Rf $CheminSql/Commande.ksh fi } #### Lecture du resultat de la requete LitResultat (){ Compteur=0 while read LigneTexte; do Caractere=$(echo $LigneTexte | cut -b 1) case $Caractere in / ) Compteur=`expr $Compteur + 1` CheminCompletFichier=$(echo $LigneTexte | tr -s " " | cut -d" " -f1) RepertoireFichier=$(dirname $CheminCompletFichier) #path NomFichierDBF=$(basename $CheminCompletFichier) #filename Valeur=$(echo $LigneTexte | tr -s " " | cut -d" " -f2) #value typeset -i ValEntiere=$(echo $Valeur | cut -d"." -f1) #entire value typeset -i ValDecimale=$(echo $Valeur | cut -d"." -f2) #as decimal Pourcentage=$ValEntiere","$ValDecimale"%" #in percentage #echo 'Rc: '$Rc' ; ValEntiere : '$ValEntiere' ; WARNING : '$WARNING' CRITICAL : '$CRITICAL' NomFichierDBF : '$NomFichierDBF ############################################# #### Construction du message pour nagios #### ############################################# ################ ### Est ce OK ? ################ if [ $ValEntiere -lt $WARNING ] then Message_OK=$(echo 'OK : Tous les DBF Autoextend du tablespace '$TBS' sont OK') #OK: All DBF Autoextend tablespace '$ TBS' are OK fi ##################### # Est ce un Warning ? ##################### if [[ $ValEntiere -ge $WARNING ]] then case $Multi in 1) if [[ $ValEntiere -lt $CRITICAL ]] then if [[ $Rc -ge $RcOk ]] then # Message_Warning=$(echo $Message_Warning " Warning : Le DBF "$NomFichierDBF" est occupe a "$Pourcentage " ; ") # else # echo 'Rc: '$Rc' ; ValEntiere : '$ValEntiere' ; CRITICAL : '$CRITICAL'WARNING : '$WARNING Message_Warning=$(echo " Warning : Le DBF "$NomFichierDBF" est occupe a "$Pourcentage " ; " $Message_Warning) if [[ $Rc -lt $RcCritique ]] then Rc=$RcWarning fi fi fi ;; 0) if [[ $ValEntiere -lt $CRITICAL ]] then if [[ $Rc -ge $RcOk ]] then Message_Warning=$(echo 'Warning : Augmentation des fichiers Autoextend du TBS '$TBS' à '$Pourcentage) Rc=$RcWarning if [[ $Rc -lt $RcCritique ]] then Rc=$RcWarning fi fi fi ;; esac fi ###################### # est ce un critical ? ###################### if [ $ValEntiere -ge $CRITICAL ] then case $Multi in 1) Message_Critical=$(echo 'KO : Le DBF '$NomFichierDBF' est occupe a '$Pourcentage ' ; '$Message_Critical ) Rc=$RcCritique ;; 0) Message_Critical=$(echo 'KO : Augmentation des fichiers autoextend du TBS '$TBS' à '$Pourcentage' ; ') Rc=$RcCritique ;; esac fi ;; * ) ;;## On ignore les autres lignes esac done < $FicResultat case $Rc in $RcOk)Message=$(echo $Message_OK) ;; $RcWarning)Message=$(echo $Message_Warning) ;; $RcCritique) Message=$(echo $Message_Critical" "$Message_Warning) ;; esac # est ce une erreur dans les seuils ? if [ $CRITICAL -lt $WARNING ] then case $CRITICAL in 0) Message="Unknown : Le Seuil Critique n'a pas ete renseigne" ;; *) Message="Unknown : Le Seuil Critique est inférieur au seuil Warning" ;; esac Rc=$RcUnknown fi if [[ -f $CheminSql/result.log ]] then rm $CheminSql/result.log fi } listeParam ExecuteRequete LitResultat echo $Message exit $Rc