View Full Version : Plugin Oracle??
LAW
7th February 2007, 10:04
Bonjour à tous,
Voila j'ai installé Nagios avec tout les services que je voulais mettre en place et tout fonctionne. Super!!!
Cependant il me reste un service à monitorer: c'est la base Oracle.
J'aimerais savoir mis à part "check_oracle" pour superviser une base oracle si il n'existe pas un autre plugin qui me retournerait le % d'occupation d'une tablespace etc... en mode graphique.
Quelq'un en connait????
LAW
7th February 2007, 10:56
J'ai une autre question, j'ai installé sqlplus via le apt-get. j'arrive à me connecter à la base oracle via sqlplus depuis le client.
Mais apparament tnsping ne fonctionne pas et n'existe pas dans /bin/...
Quelq'un sait comment installer le tnsping????
Il doit pas s'installer avec sqlplus ????
DonKiShoot
7th February 2007, 15:22
Ce ne serait pas fournit avec le client oracle par hasard ???
LAW
7th February 2007, 15:25
Oui j'ai lu cela, mais j'ai installé le client Oracle à partir de dépôt.
Sqlplus (client) fonctionne, j'arrive à me connecter sur ma base. Mais comprend pas pk le tnsping n'est pas installé et n'existe pas .
which tnsping : il me dit rien donc n'existe pas ..
Quelqu'un a une idée ?
La je me penche sur d'autres plugins sur d'autres sites mais c la galere.
J'ai trouvé un plugin basé sur nrpe mais la machine qui a la base oracle et une HP UX .
LAW
8th February 2007, 18:07
Bon j'ai réussi à faire fonctionner un plugin pour nagios. Je l'avais modifié pour qu'il renvoit 3 infos: TOTAL GIGO, Utilsé % et en GIGO. Tout ca sur une tablespace d'un base Oracle.
Le problème est qu'il fonctionne niquel sous console (root et nagios) mais par via nagiosweb c'est à dire que quadn je l'associe à un service sous Oreon, il me renvoie une erreur de compilation ePN.
Je crois que ce plugin n'est pas compatible avec ePN. Il est compilé avec Perl.
DOnc j'ai besoin d'aide !!! Qui utilise un plugin pour évaluer la taille de ses tablespaces sous Oracle???
Magios
9th February 2007, 09:21
Sur le site de NagiosExchange une série de plugin Nagios pour Oracle s'y trouve essaie de voir avec Check_oracle_tbl
voici le lien :
http://www.nagiosexchange.org/Search_Projects.43.0.html?tx_netnagext_pi1%5Bphras e%5D=oracle&tx_netnagext_pi1%5Bsubmit%5D=search&tx_netnagext_pi1%5Bsearch%5D=1
LAW
9th February 2007, 10:37
C'est gentil mais j'ai déja essayé, il y a qu'un seul que je pouvais utiliser, c le plugin avec une commande SQL, j'ai réussi à le faire fonctionner comme je voulais en mode console (root / nagios )!!!!! Oué!!
Mais :'( le problème est que je crois qu'il est pas compatible avec ePN; ca fait une erreur de compilation de sa part quand il est utilisé via le logiciel Nagios.
Peut etre parce qu'il est pas ce plugin n'est pas compatible avec ePN.
Le but du plugin c'est de retourner la taille total d'une tablespace, % utilisé et espace occupé. J'avais réussi à le modifier pour en faire un bon plugin mais nagios (compilation par ePN) ne veut pas de lui.
LAW
9th February 2007, 14:13
AIDEZ moi! Personne n'utilise de plugin pour verifier ses bases ORACLE Ici?????
DonKiShoot
9th February 2007, 14:38
Post inutile mais c bientot le week end :
Oracle ca pdc :)
Utilise mysql à la place ;)
ngrataloup
9th February 2007, 14:38
1 - le plugin check_oracle permet d'avoir les % de remplissage des tablespaces
pluggin : check_oracle --tablespace <ORACLE_SID> <USER> <PASS> <TABLESPACE> <CRITICAL> <WARNING>
reponse : <Nom du tablespace> OK - 53.60% used [ 464 / 1000 MB available ]
2 - pour avoir acces au tnsping, il faut que tu installes le client oracle (le client oracle 8 est compatible oracle 7,8,9 !) en download chez l'éditeur mais install un peu galère sous linux debian (pour notre part, nous sommes passé par un rpm du client oracle dispo sur le net avec une conversion via alien en .deb).
ensuite, si tu veux avoir acces à toutes les commandes oracle, tu peux renseigner les path :
soit dans le fichier /etc/profile pour toutes tes connexions en shell
soit dans le /etc/init.d/nagios pour que les chemins soient à jour lorsque nagios demarre
LAW
9th February 2007, 15:17
ok merci je vais essayer c'est gentil!!! tres sympa!!
Pour le client sqlplus ca fonctionne, j'arrive à me connecter à la base à distance.
Je vais tester ce plugin, on verra bien merci mec
LAW
9th February 2007, 16:30
Oh Super!!!!Ca fonctionne!!!
J'ai eu juste à modifer la commande SQL qui était pas adapté à ma configuration mais sinon ca fonctionner.
Je te remercie Bcp. Problème Résolu!
Maintenant que c'est fait mon maître de stage veut que je fasse un graph à la maniere de check_graph_storage .
:d
xspoon
9th February 2007, 17:11
peut etre que, si tu est large en ressources processeur, tu pourrait envisager de compiler un nagios sans les option EpN ce qui te donnerai accès à tous les plugins...
LAW
9th February 2007, 17:19
Ou lalala je pige pas trop à ce que tu me dis lol !!!! Je préfere pas trop m'étendre sur ePN, je connais tres peu de choses dessus.
Mais c pas grave, je vais essayer d'adapter le plugin check_graph_remote à une tablespace...On va vori ce que ca donnerait....
lowdata
27th August 2007, 12:22
Je cherche a recuperer l'espace restante de tablespaces et extent d'une base Oracle; Cette base se trouve sur un serveur distant, je me demandais donc a quel endroit pouvait-on renseigner l'IP de ce server avec la commande suivante :
check_oracle --tablespace <ORACLE_SID> <USER> <PASS> <TABLESPACE> <CRITICAL> <WARNING>
Car j'ai essayé comme ceci :
./check_oracle -oranames 192.168.65.24
Cannot determine ORACLE_HOME for sid 192.168.65.24
Alors que ce server a bien une base oracle qui tourne:/ Auriez vous une idée ? On a rien besoin d 'installer sur le server de bases oracle c'est bien ca ?
lowdata
28th August 2007, 10:51
Up, quelqu'un aurait une idée please ??
J'ai pourtant bien modifié le script avec la bonne variable ORACLE_HOME comme ceci :
export ORACLE_HOME = /oracle92/product/ora920
Mais toujours la meme erreur.
Magios
28th August 2007, 12:38
dans le plugin j'ai rajouté ces lignes :
#! /bin/sh
#
# latigid010@yahoo.com
# 01/06/2000
#
# This Nagios plugin was created to check Oracle status
#
ORACLE_HOME="/usr/lib/oracle/xe/app/oracle/product/10.2.0/client"
TNS_ADMIN="/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/admin"
export TNS_ADMIN=$TNS_ADMIN
export ORACLE_HOME=$ORACLE_HOME
....
ensuite je fais mes tests avec ./check_oracle --login SID
lowdata
28th August 2007, 13:06
J'ai bien ajouté la variable ORACLE_HOME, mais pas de résultat :
./check_oracle -oranames 192.168.65.2 -login XRP
Cannot determine ORACLE_HOME for sid 192.168.65.2
Tu renseigne bien l'IP également ? c'est la meme syntaxe ?
lowdata
29th August 2007, 14:23
UP. Toujours pas réussi a a faire fonctionner ce plugin :
- dans le script je renseigne bien le ORACLE_HOME
- apres je tente un :
./check_oracle -oranames 192.168.65.20 -login hexa
Cannot determine ORACLE_HOME for sid 192.168.65.20
(hexa étant le SID), et il me retourne toujours la meme erreur :/ Savez vous d'ou cela peut t il venir ? faut t il que la variable TNS_ADMIN soit également renseignée pour effectuer cette simple commande ?
Poulpatine
30th August 2007, 12:49
Salut !
Je me permet de poster ici car j'ai un pti soucis concernant un plugin de test oracle un peu customisé :
Je vous le met ici avec les commandes de debug ^^
#!/bin/bash
#
# Test de tablespaces
#
#
EXPORT IFS='^M' # on ne traite pas les espaces comme des retours chariot
export ORACLE_HOME=/opt/oracle/product/10.2.0/client_1
TNSNAMES=$ORACLE_HOME/network/admin/tnsnames.ora
LOGIN=pwetpwet
PASS=repwetpwet
REQUETE=/usr/lib/nagios/plugins/autres/tablespace.sql
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
if [[ $# -lt 6 ]]
then
echo "Usage : todo usage"
exit $STATE_UNKNOWN
fi
echo Bla1
while getopts w:c:H:h option
do
echo Bla1.5
case $option in
w)
warn=$OPTARG
;;
c)
crit=$OPTARG
;;
H)
host=$OPTARG
;;
*)
echo "Todo : usage"
exit $STATE_UNKNOWN
;;
esac
done
echo Bla2
grep -q $host $TNSNAMES
if [[ $? -eq 1 ]]
then
echo "Hote introuvable dans tnsnames.ora"
exit $STATE_UNKNOWN
fi
$ORACLE_HOME/bin/sqlplus -s $LOGIN/$PASS@$host < $REQUETE|sed -e 's/[\t]/ /g'|sed -e 's/ */ /g'|(while read i
do
occupe=`echo $i|cut -d ' ' -f 7`
if [[ $occupe -gt $crit ]]
then
echo 1 > status.tmp
echo -n "Critical : "
echo $i|cut -d ' ' -f 2,7
exit $STATE_CRITICAL
elif [[ $occupe -gt $warn ]]
then
awarn=1
echo -n "Warning : "
echo $i|cut -d ' ' -f 2,7
exit $STATE_WARNING
fi
done)
echo Bla3
exit $?
Lorsque j'exécute le script à la main, il me retourne bien le premier tablespace qui ne est remplit mais quand oreon l'exécute, le seul retour que j'ai est "Bla1".
Ce qui est assez génant, avouez le :( .
Aurais-je oublié une étape importante dans la création d'un plugin ?
Merci :)
( je précise que ce script est encore en développement, donc c'est un peu grouik grouik, si toutefois vous aviez des conseils, n'hésitez pas :) ).
lowdata
30th August 2007, 17:27
UP tjs pas de solutions, je rapele que j'ai ORACLE server qui tourne sur uns erv distant. Sur ma machine j'ai install Oracle XE, modifié le fichier check_oracle comme suit :
#! /bin/sh
#
# latigid010@yahoo.com
# 01/06/2000
#
# This Nagios plugin was created to check Oracle status
#
ORACLE_HOME="/oracle/8.1.7"
export ORACLE_HOME=$ORACLE_HOME
PROGNAME=`basename $0`
PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
REVISION=`echo '$Revision: 1.16 $' | sed -e 's/[^0-9.]//g'`
. $PROGPATH/utils.sh
........................
Je tente de le lancer via la commande :
[code]./check_oracle -oranames oracle 192.168.65.24[
Cannot determine ORACLE_HOME for sid 192.168.65.24
/code]
Une idée please ? ?
Poulpatine
30th August 2007, 17:30
Perso, je ferai directement :
#! /bin/sh
#
# latigid010@yahoo.com
# 01/06/2000
#
# This Nagios plugin was created to check Oracle status
#
export ORACLE_HOME=/oracle/8.1.7
...
;)
lowdata
31st August 2007, 10:27
bien meme comme ca ca ne passe pas. Tu mets avec ou sans guillemets en theorie ? Et quelle serait ta ligne de commande minimale a utiliser avec check_oracle ?
Poulpatine
31st August 2007, 11:38
Salut.
Dans le plugin suivant tu devrais trouver de quoi te dépanner ( la requete retourne entre autres, l'espace restant ).
#!/bin/bash
#
# Test de tablespaces
#
#
export IFS='^M' # on ne traite pas les espaces comme des retours chariot
export ORACLE_HOME=/opt/oracle/product/10.2.0/client_1
TNSNAMES=$ORACLE_HOME/network/admin/tnsnames.ora
LOGIN=pwet
PASS=pwet
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
RETURN_FILE=/opt/oreon/log/retour.tmp
EXIT=$STATE_UNKNOWN
cat /dev/null > $RETURN_FILE
if [[ $# -lt 6 ]]
then
echo "Usage : todo usage"
exit $STATE_UNKNOWN
fi
#echo Il y a $# arguments
while getopts w:c:H:h option
do
case $option in
w)
warn=$OPTARG
;;
c)
crit=$OPTARG
;;
H)
host=$OPTARG
;;
*)
echo "Todo : usage"
exit $STATE_UNKNOWN
;;
esac
done
grep -q $host $TNSNAMES
if [[ $? -eq 1 ]]
then
echo "Hote introuvable dans tnsnames.ora"
exit $STATE_UNKNOWN
fi
$ORACLE_HOME/bin/sqlplus -s $LOGIN/$PASS@$host <<EOF |sed -e 's/[\t]/ /g'|sed -e 's/ */ /g'|(while read i
set pagesize 100
set linesize 200
set head off
set feed off
col "EXT TS" format A36
col TAILLE format 999999999999
col UTILISE format 999999999999
col %UTILISE format 9999
col LIBRE format 999999999999
col %LIBRE format 9999
col %UTIL_MAXSIZE format 999
col DISPO_MAXSIZE format 999999
select 'YES '||ddf.TABLESPACE_NAME "EXT TS",
ddf.BYTES/1024 "TAILLE",
(ddf.BYTES-DFS.BYTES)/1024 "UTILISE",
round(((ddf.BYTES-dfs.BYTES)/ddf.BYTES)*100,2) "%UTILISE",
dfs.BYTES/1024 "LIBRE",
round((1-((ddf.BYTES-dfs.BYTES)/ddf.BYTES))*100,2) "%LIBRE",
F."%UTIL_MAXSIZE" "%UTIL_MAXSIZE",
F.DISPO_MAXSIZE "DISPO_MAXSIZE"
from (select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_data_files
group by TABLESPACE_NAME) ddf,
(select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_free_space
group by TABLESPACE_NAME) dfs,
(select TABLESPACE_NAME,
ROUND(100*SUM(BYTES)/SUM(MAXBYTES)) "%UTIL_MAXSIZE",
ROUND((SUM(MAXBYTES)-SUM(BYTES))/1048576) "DISPO_MAXSIZE"
from DBA_DATA_FILES
where AUTOEXTENSIBLE ='YES'
group by TABLESPACE_NAME) F
where ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME and
F.TABLESPACE_NAME=dfs.TABLESPACE_NAME
union
(
(
select 'NO '||ddf.TABLESPACE_NAME "EXT TS",
ddf.BYTES/1024 "TAILLE",
(ddf.BYTES-DFS.BYTES)/1024 "UTILISE",
round(((ddf.BYTES-dfs.BYTES)/ddf.BYTES)*100,2) "%UTILISE",
dfs.BYTES/1024 "LIBRE",
round((1-((ddf.BYTES-dfs.BYTES)/ddf.BYTES))*100,2) "%LIBRE",
0 "%UTIL_MAXSIZE",
0 "DISPO_MAXSIZE"
from (select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_data_files
group by TABLESPACE_NAME) ddf,
(select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_free_space
group by TABLESPACE_NAME) dfs,
(select TABLESPACE_NAME
from DBA_DATA_FILES
where AUTOEXTENSIBLE ='NO'
group by TABLESPACE_NAME) F
where ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME and
F.TABLESPACE_NAME=dfs.TABLESPACE_NAME
)
minus
(
select 'NO '||ddf.TABLESPACE_NAME "EXT TS",
ddf.BYTES/1024 "TAILLE",
(ddf.BYTES-DFS.BYTES)/1024 "UTILISE",
round(((ddf.BYTES-dfs.BYTES)/ddf.BYTES)*100,2) "%UTILISE",
dfs.BYTES/1024 "LIBRE",
round((1-((ddf.BYTES-dfs.BYTES)/ddf.BYTES))*100,2) "%LIBRE",
F."%UTIL_MAXSIZE" "%UTIL_MAXSIZE",
F.DISPO_MAXSIZE "DISPO_MAXSIZE"
from (select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_data_files
group by TABLESPACE_NAME) ddf,
(select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_free_space
group by TABLESPACE_NAME) dfs,
(select TABLESPACE_NAME,
ROUND(100*SUM(BYTES)/SUM(MAXBYTES)) "%UTIL_MAXSIZE",
ROUND((SUM(MAXBYTES)-SUM(BYTES))/1048576) "DISPO_MAXSIZE"
from DBA_DATA_FILES
where AUTOEXTENSIBLE ='YES'
group by TABLESPACE_NAME) F
where ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME and
F.TABLESPACE_NAME=dfs.TABLESPACE_NAME
)
);
exit;
EOF
do
occupe=`echo $i|cut -d ' ' -f 7`
if [[ $occupe -gt $crit ]]
then
echo -n "Critical : " >> $RETURN_FILE
echo -n $i|cut -d ' ' -f 2,7 >> $RETURN_FILE
elif [[ $occupe -gt $warn ]]
then
echo -n "Warning : " >> $RETURN_FILE
echo $i|cut -d ' ' -f 2,7 >> $RETURN_FILE
fi
done)
cat $RETURN_FILE|tr \\n " "
if grep -q Critical $RETURN_FILE
then
EXIT=$STATE_CRITICAL
elif grep -q Warning $RETURN_FILE
then
EXIT=$STATE_WARNING
else
echo "Ok"
EXIT=$STATE_OK
fi
rm $RETURN_FILE
exit $EXIT
C'est pas encore fini mais un peu plus propre ( et ça à l'air de pas mal marcher :) ). ( merci mon DBA pour la requête ;) ).
lowdata
31st August 2007, 12:08
ok merci....
Dans le script j'ai juste modifié la variable ORACLE_HOME....
- Je suis obligé d'avoir la variable TNSNAMES si je veux juste lister mes tablesspaces ou l'espace restant ? (car je ne trouve pas ce fichier sur mon serv oracle...)
- Y'a t il autre chose a modifier dans ton script pour qu il s adapte a mon server ?
- Enfin quelle commande lance tu pour executer ce sript ? quelle en ait la syntaxe koi... Merci d'avance de ton aide. :)
Poulpatine
31st August 2007, 12:17
Après je ne sais pas comment ton client Oracle est configuré mais je sais que le mien nécessite la présence d'un fichier tnsnames.ora. ( mais rien ne t'empeche de virer le bloc sur la vérification du tnsname ). :)
sinon le script s'utilise de la manière suivant :
./oracle_space.sh -H SERVERTNSNAME -w 80 -c 95
-H le serveur oracle
- w le seuil de remplissage d'avertissement
-c le seuil de remplissage critique
lowdata
31st August 2007, 16:17
et bien tjs le meme msg :
Cannot determine ORACLE_HOME for sid ora_server
Alors que dans le .profile du server oracle, c'est bien la meem variable renseignée que celle dans le script check_oracle :/
Tu as Oracle XE ou quelle appli ki tourne sur ta machine oreon ?
Sur ton server oracle tu as modifié quelque chose ou t'as rien touché dessus ?
Poulpatine
31st August 2007, 16:27
La machine de supervision ne contient qu'un client oracle, le serveur oracle est à part. et à part oreon ( ses pré-requis ) et le client oracle je n'ai rien de spécial d'installé sur le serveur.
lowdata
3rd September 2007, 14:55
Bon et bien merci de l'aide mais ca n'avance pas, quand je lance le script il ne se passe rien.....
./space_oracle.sh -oranames 192.168.93.33
Usage : todo usage
J'ai modifié la variable ORACLE_HOME, LOGIN et PASS. Je dois modifier autre chose dans le script ? ? (tnsnames.ora je ne le trouve pas sur le server oracle, et retour.tmp est censé etre un fichier de log ? apres execution du script je n'ai rien dedans.)
Si tu pourrais m'en dire un peu plus ^^. merci d'avance;
Poulpatine
3rd September 2007, 15:00
Bah sinon tu peux utiliser ça ( ainsi, pas de prise de tête ) :
#!/bin/bash
#
# Test de tablespaces
#
#
export IFS='^M' # on ne traite pas les espaces comme des retours chariot
export ORACLE_HOME=/opt/oracle/product/10.2.0/client_1
LOGIN=pwet
PASS=pwet
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
RETURN_FILE=/opt/oreon/log/retour.tmp
EXIT=$STATE_UNKNOWN
cat /dev/null > $RETURN_FILE
if [[ $# -lt 6 ]]
then
echo "Usage : todo usage"
exit $STATE_UNKNOWN
fi
while getopts w:c:H:h option
do
case $option in
w)
warn=$OPTARG
;;
c)
crit=$OPTARG
;;
H)
host=$OPTARG
;;
*)
echo "Todo : usage"
exit $STATE_UNKNOWN
;;
esac
done
$ORACLE_HOME/bin/sqlplus -s $LOGIN/$PASS@$host <<EOF |sed -e 's/[\t]/ /g'|sed -e 's/ */ /g'|(while read i
set pagesize 100
set linesize 200
set head off
set feed off
col "EXT TS" format A36
col TAILLE format 999999999999
col UTILISE format 999999999999
col %UTILISE format 9999
col LIBRE format 999999999999
col %LIBRE format 9999
col %UTIL_MAXSIZE format 999
col DISPO_MAXSIZE format 999999
select 'YES '||ddf.TABLESPACE_NAME "EXT TS",
ddf.BYTES/1024 "TAILLE",
(ddf.BYTES-DFS.BYTES)/1024 "UTILISE",
round(((ddf.BYTES-dfs.BYTES)/ddf.BYTES)*100,2) "%UTILISE",
dfs.BYTES/1024 "LIBRE",
round((1-((ddf.BYTES-dfs.BYTES)/ddf.BYTES))*100,2) "%LIBRE",
F."%UTIL_MAXSIZE" "%UTIL_MAXSIZE",
F.DISPO_MAXSIZE "DISPO_MAXSIZE"
from (select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_data_files
group by TABLESPACE_NAME) ddf,
(select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_free_space
group by TABLESPACE_NAME) dfs,
(select TABLESPACE_NAME,
ROUND(100*SUM(BYTES)/SUM(MAXBYTES)) "%UTIL_MAXSIZE",
ROUND((SUM(MAXBYTES)-SUM(BYTES))/1048576) "DISPO_MAXSIZE"
from DBA_DATA_FILES
where AUTOEXTENSIBLE ='YES'
group by TABLESPACE_NAME) F
where ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME and
F.TABLESPACE_NAME=dfs.TABLESPACE_NAME
union
(
(
select 'NO '||ddf.TABLESPACE_NAME "EXT TS",
ddf.BYTES/1024 "TAILLE",
(ddf.BYTES-DFS.BYTES)/1024 "UTILISE",
round(((ddf.BYTES-dfs.BYTES)/ddf.BYTES)*100,2) "%UTILISE",
dfs.BYTES/1024 "LIBRE",
round((1-((ddf.BYTES-dfs.BYTES)/ddf.BYTES))*100,2) "%LIBRE",
0 "%UTIL_MAXSIZE",
0 "DISPO_MAXSIZE"
from (select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_data_files
group by TABLESPACE_NAME) ddf,
(select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_free_space
group by TABLESPACE_NAME) dfs,
(select TABLESPACE_NAME
from DBA_DATA_FILES
where AUTOEXTENSIBLE ='NO'
group by TABLESPACE_NAME) F
where ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME and
F.TABLESPACE_NAME=dfs.TABLESPACE_NAME
)
minus
(
select 'NO '||ddf.TABLESPACE_NAME "EXT TS",
ddf.BYTES/1024 "TAILLE",
(ddf.BYTES-DFS.BYTES)/1024 "UTILISE",
round(((ddf.BYTES-dfs.BYTES)/ddf.BYTES)*100,2) "%UTILISE",
dfs.BYTES/1024 "LIBRE",
round((1-((ddf.BYTES-dfs.BYTES)/ddf.BYTES))*100,2) "%LIBRE",
F."%UTIL_MAXSIZE" "%UTIL_MAXSIZE",
F.DISPO_MAXSIZE "DISPO_MAXSIZE"
from (select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_data_files
group by TABLESPACE_NAME) ddf,
(select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_free_space
group by TABLESPACE_NAME) dfs,
(select TABLESPACE_NAME,
ROUND(100*SUM(BYTES)/SUM(MAXBYTES)) "%UTIL_MAXSIZE",
ROUND((SUM(MAXBYTES)-SUM(BYTES))/1048576) "DISPO_MAXSIZE"
from DBA_DATA_FILES
where AUTOEXTENSIBLE ='YES'
group by TABLESPACE_NAME) F
where ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME and
F.TABLESPACE_NAME=dfs.TABLESPACE_NAME
)
);
exit;
EOF
do
occupe=`echo $i|cut -d ' ' -f 7`
if [[ $occupe -gt $crit ]]
then
echo -n "Critical : " >> $RETURN_FILE
echo -n $i|cut -d ' ' -f 2,7 >> $RETURN_FILE
elif [[ $occupe -gt $warn ]]
then
echo -n "Warning : " >> $RETURN_FILE
echo $i|cut -d ' ' -f 2,7 >> $RETURN_FILE
fi
done)
cat $RETURN_FILE|tr \\n " "
if grep -q Critical $RETURN_FILE
then
EXIT=$STATE_CRITICAL
elif grep -q Warning $RETURN_FILE
then
EXIT=$STATE_WARNING
else
echo "Ok"
EXIT=$STATE_OK
fi
rm $RETURN_FILE
exit $EXIT
lowdata
3rd September 2007, 15:20
Re. Bon rectification j'ai bien un tnsnames.ora au meme endroit que toi, mais que je renseigne ce chemin ou pas je me prends le meme msg d'erreur : TODO USAGE ! et rien qui se passe apres :s Je vois pas a quoi correspond ce message :s:s ya bien juste comme option -oranames a mettre ? c'est bien la meme pour tout type de version d oracle ?
Poulpatine
3rd September 2007, 15:25
Je pense que tu te trompes de script, relis un peu mes messages plus haut. Je veux bien essayer de te dépanner mais soit un peu plus attentif :(
lowdata
3rd September 2007, 15:40
Et bien oui, au post #24 tu fournis un script avec la variable tnsnames.ora
au post #30 tu fournis un script sans la variable tnsnames.ora
et au post #31 je dis que j'ai essayé avec tes 2 scripts, avec et sans la variable tnsnames (qui existe bien sur mon serv oracle), et j'ai toujours le meme message d'erreur. ?
Sinon quand tu test un tnsping en commande sur ta machine Oreon tu as quelque chose ou command not found ? Je me demande si ce service doit etre lancé ou si il est apélé auto.
Poulpatine
3rd September 2007, 15:47
Alors tu peux relire mon post #26 ;)
Quand je fais un tnsping tout seul ça ne fonctionne pas car je n'ai pas mis l'installation d'Oracle dans mon $PATH par contre si je passe par le chemin absolu de tnsping ça marche.
lowdata
3rd September 2007, 16:08
Ok...donc apres m'etre renseigné sur les tnsnames.ora etc....tjs le meme soucis....DONC :
Un tnsping vers mon serv oracle fonctionne bien. Donc la conf de tnsnames.ora est correcte a priori. MAIS j'ai tjs ce message d'erreur :
./check_oracle -H strat1 -w 80 -c 95
Hote introuvable dans tnsnames.ora
WTF ! ? Voila le check_oracle (ORACLE_HOME et TNS_ADMIN sont bien renseignés) :
#!/bin/bash
#
# Test de tablespaces
#
#
export IFS='^M' # on ne traite pas les espaces comme des retours chariot
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
TNSNAMES=$ORACLE_HOME/network/admin/tnsnames.ora
LOGIN=system
PASS=manager
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
RETURN_FILE=/usr/local/oreon/log/retour.tmp
EXIT=$STATE_UNKNOWN
cat /dev/null > $RETURN_FILE
if [[ $# -lt 6 ]]
then
echo "Usage : todo usage"
exit $STATE_UNKNOWN
fi
#echo Il y a $# arguments
while getopts w:c:H:h option
do
case $option in
w)
warn=$OPTARG
;;
c)
crit=$OPTARG
;;
H)
host=$OPTARG
;;
*)
echo "Todo : usage"
exit $STATE_UNKNOWN
;;
esac
done
grep -q $host $TNSNAMES
if [[ $? -eq 1 ]]
then
echo "Hote introuvable dans tnsnames.ora"
exit $STATE_UNKNOWN
fi
$ORACLE_HOME/bin/sqlplus -s $LOGIN/$PASS@$host <<EOF |sed -e 's/[\t]/ /g'|sed -e 's/ */ /g'|(while read i
set pagesize 100
set linesize 200
set head off
set feed off
col "EXT TS" format A36
col TAILLE format 999999999999
col UTILISE format 999999999999
col %UTILISE format 9999
col LIBRE format 999999999999
col %LIBRE format 9999
col %UTIL_MAXSIZE format 999
col DISPO_MAXSIZE format 999999
select 'YES '||ddf.TABLESPACE_NAME "EXT TS",
ddf.BYTES/1024 "TAILLE",
(ddf.BYTES-DFS.BYTES)/1024 "UTILISE",
round(((ddf.BYTES-dfs.BYTES)/ddf.BYTES)*100,2) "%UTILISE",
dfs.BYTES/1024 "LIBRE",
round((1-((ddf.BYTES-dfs.BYTES)/ddf.BYTES))*100,2) "%LIBRE",
F."%UTIL_MAXSIZE" "%UTIL_MAXSIZE",
F.DISPO_MAXSIZE "DISPO_MAXSIZE"
from (select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_data_files
group by TABLESPACE_NAME) ddf,
(select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_free_space
group by TABLESPACE_NAME) dfs,
(select TABLESPACE_NAME,
ROUND(100*SUM(BYTES)/SUM(MAXBYTES)) "%UTIL_MAXSIZE",
ROUND((SUM(MAXBYTES)-SUM(BYTES))/1048576) "DISPO_MAXSIZE"
from DBA_DATA_FILES
where AUTOEXTENSIBLE ='YES'
group by TABLESPACE_NAME) F
where ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME and
F.TABLESPACE_NAME=dfs.TABLESPACE_NAME
union
(
(
select 'NO '||ddf.TABLESPACE_NAME "EXT TS",
ddf.BYTES/1024 "TAILLE",
(ddf.BYTES-DFS.BYTES)/1024 "UTILISE",
round(((ddf.BYTES-dfs.BYTES)/ddf.BYTES)*100,2) "%UTILISE",
dfs.BYTES/1024 "LIBRE",
round((1-((ddf.BYTES-dfs.BYTES)/ddf.BYTES))*100,2) "%LIBRE",
0 "%UTIL_MAXSIZE",
0 "DISPO_MAXSIZE"
from (select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_data_files
group by TABLESPACE_NAME) ddf,
(select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_free_space
group by TABLESPACE_NAME) dfs,
(select TABLESPACE_NAME
from DBA_DATA_FILES
where AUTOEXTENSIBLE ='NO'
group by TABLESPACE_NAME) F
where ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME and
F.TABLESPACE_NAME=dfs.TABLESPACE_NAME
)
minus
(
select 'NO '||ddf.TABLESPACE_NAME "EXT TS",
ddf.BYTES/1024 "TAILLE",
(ddf.BYTES-DFS.BYTES)/1024 "UTILISE",
round(((ddf.BYTES-dfs.BYTES)/ddf.BYTES)*100,2) "%UTILISE",
dfs.BYTES/1024 "LIBRE",
round((1-((ddf.BYTES-dfs.BYTES)/ddf.BYTES))*100,2) "%LIBRE",
F."%UTIL_MAXSIZE" "%UTIL_MAXSIZE",
F.DISPO_MAXSIZE "DISPO_MAXSIZE"
from (select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_data_files
group by TABLESPACE_NAME) ddf,
(select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_free_space
group by TABLESPACE_NAME) dfs,
(select TABLESPACE_NAME,
ROUND(100*SUM(BYTES)/SUM(MAXBYTES)) "%UTIL_MAXSIZE",
ROUND((SUM(MAXBYTES)-SUM(BYTES))/1048576) "DISPO_MAXSIZE"
from DBA_DATA_FILES
where AUTOEXTENSIBLE ='YES'
group by TABLESPACE_NAME) F
where ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME and
F.TABLESPACE_NAME=dfs.TABLESPACE_NAME
)
);
exit;
EOF
do
occupe=`echo $i|cut -d ' ' -f 7`
if [[ $occupe -gt $crit ]]
then
echo -n "Critical : " >> $RETURN_FILE
echo -n $i|cut -d ' ' -f 2,7 >> $RETURN_FILE
elif [[ $occupe -gt $warn ]]
then
echo -n "Warning : " >> $RETURN_FILE
echo $i|cut -d ' ' -f 2,7 >> $RETURN_FILE
fi
done)
cat $RETURN_FILE|tr \\n " "
if grep -q Critical $RETURN_FILE
then
EXIT=$STATE_CRITICAL
elif grep -q Warning $RETURN_FILE
then
EXIT=$STATE_WARNING
else
echo "Ok"
EXIT=$STATE_OK
fi
rm $RETURN_FILE
exit $EXIT
et mon tnsnames.ora qui fonctionne :
# tnsnames.ora Network Configuration File:
hexa=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=tcp)(HOST=192.168.65.7)(PORT=1521))
(CONNECT_DATA =
(SID=hexa)
)
)
Quiaurait une idée pour faire fonctionner ce fichu plugin ? ? Je vois vraiment pas ce qui cloche la :( Merci d'avance.
lowdata
5th September 2007, 12:29
UP ! une tite aide venant de DBA ou autre please c la galere la :(:(
Poulpatine
5th September 2007, 12:32
Te prends pas la tête sinon, et vire la partie qui vérifie l'existence dans tnsnames.ora ;).
lowdata
5th September 2007, 14:11
Te prends pas la tête sinon, et vire la partie qui vérifie l'existence dans tnsnames.ora ;).
Re. Bin je viens de commenter la ligne, ca lance le script mais il ne se passe rien et ca ne sort aucun message d'error....
suse-exp:/usr/local/nagios/libexec # ./check_oracle -H strat1 -w 80 -c 95
suse-exp:/usr/local/nagios/libexec #
La commande precedente est censée me retourner quoi quand le tnsnames.ora est commenté ? ? en tout cas ca ne marche pas :/