View Full Version : Interroger un serveur orcale
shadowy83
05-15-2007, 12:46 PM
Bonjour, je cherche à interroger une base de donnée oracle sur un serveur nt afin de connaitre le nbre de personne qui sont connectés a une base et connaitre le nbre de ligne d'une base.
J'ai trouvé sur le site de nagiosexchange un plug in check oracle generic (http://www.nagiosexchange.org/Oracle.153.0.html?&tx_netnagext_pi1[p_view]=795) qui semble pouvoir faire des requetes hélas je n'ai pas pu le faire fonctionner. Enfaite je n'arrive pas a installer le client oracle qui semble disponible que pour certains os red hat sus...
voila ma config
Fedora 6
nagios 2.8
oreon 1.3.3
voilà si qq un a des pistes a me donner je suis preneur :) (sachant que je ne suis pas encore très aguérri)
shadowy83
06-08-2007, 12:21 PM
Bon j'ai un peu avancé et résolu qq pb mais il m'en reste un lol
Déjà pour installer le client Oracle complet vous pouvez vous aider du tutorial :
Oracle sur fedora 6 (http://www.oracle-base.com/articles/10g/OracleDB10gR2InstallationOnFedora6.php)
Ensuite j'ai utilise le dbi de CPAN et definit les variables ORACLE_HOME ds le /etc/profil.d
Tout fonctionne en ligne de commande mais pas dans nagios alors je sais pas s'il charge pas les variables ORACLE_HOME pourtant en me login avec nagios cela fonctionne.
$USER1$check_oracle_generic -SID=MARS -dbuser=baba-dbpassword=baba -w=50 -c=100 -q="select count(*) from client where emis='F' and codedest='TEST'"
Aussi j'ai tente de rajouter des ligners ds le script d'oracle_generic avec les variables :
$ENV{ORACLE_HOME}="/usr/local/oracle/product";
$ENV{ORACLE_BASE}="/usr/local/oracle";
$ENV{ORACLE_HOME}="/usr/local/oracle/product";
$ENV{ORACLE_SID}="TSH1";
$ENV{ORACLE_TERM}="Xterm";
$ENV{PATH}="$PATH:$ORACLE_HOME/bin";
$EN{LD_LIBRARY_PATH}="$LD_LIBRARY_PATH:$ORACLE_HOME/lib";
Nagios m'affiche ce message : **ePN failed to compile /usr/local/nagios/libexec/check_oracle_generic: "Global symbol "$PATH" requires explicit package name at (eval 2) line 37,
Données de Performance Global symbol "$ORACLE_HOME" requires explicit package name at (eval 2) line 44.
avant la modification il me disait presque la même chose mais il indiquait $SID aulieu de $ORACLE_HOME.
Après quelques recherches j'ai tenté de rajouter oracle home dans la commande : ORACLE_BASE=/usr/local/oracle/;export ORACLE_BASE;ORACLE_HOME=$ORACLE_HOME;export ORACLE_home;PATH=$ORACLE_HOME/bin:$PATH; export PATH;LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH;ORACLE_SID=TSH1; export ORACLE_SID;CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH;/usr/local/nagios/libexec/check_oracle_generic -SID=hexa -dbuser=kalam01 -dbpassword=kalam01 -w=50 -c=100 -q="select count(*) from client where emis='F' and codedest='TEST'"
Là il ne m'indique pas d'erreur mais affiche no output
Je commence à ne plus avoir d'idées
shadowy83
06-08-2007, 12:36 PM
je vous rajoute le contenu du script perl check_oracle_generic :
#!/usr/bin/perl -s
###############################################
#
#
# Description : perl script for executing a generic SQL command
# the script retrieve the first row of the first col
# result must be numeric
#
# Author : David Ligeret (david.ligeret at gmail.com)
#
###############################################
#
# Usage : perl -s check_cmd_adoc -SID=<SID> -dbuser=<dbuser> -dbpassword=<dbpassword> -w=<warning> -c=<critical> -q=<query>
# -SID : Oracle SID
# -dbuser : Oracle user
# -dbpassword : Oracle password
# -w : amount for warning
# -c : amount for critical
# -q : SQL query
#
###############################################
#
# History :
# - 20061121 (ligeret) : initial release
#
###############################################
#
# TODO :
#
###############################################
use DBI;
# Nagios specific
use lib "/usr/local/nagios/libexec";
use utils qw(%ERRORS $TIMEOUT);
my $ERRORS =
{
'OK' => 0,
'WARNING' => 1,
'CRITICAL'=> 2,
'UNKNOWN' => 3
};
# Globals
my $version = '0.1';
# if you already have a TNS_ADMIN environment variable do not
# comment following line
# otherwise you can uncomment and overwrite the variable if you want
# to specify the tnsnames.ora file directory
#$ENV{TNS_ADMIN} = '/usr/local/instantclient_10_2';
# Functions
sub usage
{
print qq{Usage : $0 -SID=<SID> -dbuser=<dbuser> -dbpassword=<dbpassword> -w=<warning>
-SID : Oracle SID
-dbuser : Oracle user
-dbpassword : Oracle password
-w : mount for warning
-c : amount for critical
-q : SQL query
}
}
# check user's inputs
sub check_arguments
{
if (!$SID || !$dbuser || !$dbpassword || !$w || !$c || !$q)
{
print ("Invalid argument(s) !\n");
&usage;
exit $ERRORS->{'UNKNOWN'};
}
}
# print help
if (defined($h))
{
&usage;
exit $ERRORS->{'OK'};
}
&check_arguments;
# establish DB connection
unless ($dbhandle = DBI->connect ("dbi:Oracle:$SID", $dbuser, $dbpassword))
{
print ("CRITICAL: $DBI::errstr");
exit $ERRORS->{'CRITICAL'};
}
# execute query
my $statement = $dbhandle->prepare($q);
unless ($statement->execute())
{
print ("Execution error");
exit $ERRORS->{'UNKNOWN'};
}
# retrieve result
my @row = $statement->fetchrow_array();
$statement->finish();
my $exit_code = 0;
if (@row[0] >= $c)
{
print "CRITICAL: ";
$exit_code = 2;
}
elsif (@row[0] >= $w)
{
print "WARNING: ";
$exit_code = 1;
}
else
{
print "OK: ";
}
printf ("result = ".@row[0]);
exit $exit_code;
]
couak
06-13-2007, 09:57 AM
essayes en décommentant la ligne avec TNS_ADMIN et en mettant le répertoire TNS_ADMIN de ton client oracle (le rép. contenant sqlnet.ora et/ou tnsnames.ora)
shadowy83
06-13-2007, 11:37 AM
essayes en décommentant la ligne avec TNS_ADMIN et en mettant le répertoire TNS_ADMIN de ton client oracle (le rép. contenant sqlnet.ora et/ou tnsnames.ora)
merci J'ai tenté de rajouté les variables mais ca ne change rien ou pire ça m'ajoute des erreurs
avec $ENV{TNS_ADMIN} = q{/usr/local/oracle/product/bin };
ou $ENV{TNS_ADMIN} = q{/usr/local/oracle/product/bin };
J'ai toujour le même message d'erreur et quand j'ajoute
$ENV{ORACLE_HOME} = q{ /usr/local/oracle/product };
là j'ai une erreur même en ligne de commande
DBI connect('mars','bala',...) failed: ERROR OCIEnvNlsCreate. Check ORACLE_HOME env var, NLS settings, permissions, etc. at ./check_oracle_generic line 145
CRITICAL: ERROR OCIEnvNlsCreate. Check ORACLE_HOME env var, NLS settings, permissions, etc.
J'ai fait un chmod 777 /usr/local/oracle -R mais celle ne change rien
couak
06-13-2007, 02:09 PM
essaie de voir ton environnement sous nagios quand tu exécutes un perl
perl -e 'foreach $item (keys(%ENV)) { print "$item = $ENV{$item}\n" }'
Quand j'avais développé ce script, je l'avais testé avec un instant client Oracle 10g et un client Oracle Express
Les variables d'environnement oracle n'ont pas à être modifiées, sauf si on sait ce que l'on fait
shadowy83
06-13-2007, 05:17 PM
essaie de voir ton environnement sous nagios quand tu exécutes un perl
perl -e 'foreach $item (keys(%ENV)) { print "$item = $ENV{$item}\n" }'
Quand j'avais développé ce script, je l'avais testé avec un instant client Oracle 10g et un client Oracle Express
Les variables d'environnement oracle n'ont pas à être modifiées, sauf si on sait ce que l'on fait
Merci j'ai fait ta manip et l' ENV me semble normal non ?
HOME = /home/nagios
SSH_ASKPASS = /usr/libexec/openssh/gnome-ssh-askpass
ORACLE_HOME = /usr/local/oracle/product
LD_LIBRARY_PATH = /usr/local/oracle/product/lib:/lib:/usr/lib
LESSOPEN = |/usr/bin/lesspipe.sh %s
MAIL = /var/spool/mail/root
ORACLE_BASE = /usr/local/oracle
PWD = /usr/local/nagios/libexec
LANG = fr_FR.UTF-8
USER = nagios
ORACLE_SID = TSH1
G_BROKEN_FILENAMES = 1
LOGNAME = nagios
ORACLE_TERM = xterm
SHLVL = 2
HOSTNAME = athena.chifsr.fr
INPUTRC = /etc/inputrc
_ = /usr/bin/perl
PATH = /usr/local/oracle/product/bin:/usr/sbin:/usr/local/oracle/product/bin:/usr/sbin:/usr/local/oracle/product/bin:/usr/sbin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/oracle/product/bin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
LS_COLORS = no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd =40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;4 1:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.b tm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar= 01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01 ;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.b z2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio= 01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01 ;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
SHELL = /bin/bash
TMPDIR = /tmp
HISTSIZE = 1000
TERM = vt100
CLASSPATH = /usr/local/oracle/product/jre:/usr/local/oracle/product/jlib:/usr/local/oracle/product/rdbms/jlib
TMP = /tmp
Si tu vois ce qui cloche hormis moi biensur lol ça m'aiderait bcp, il me reste que 3 semaines de stage ;)
ps : j'ai voulu ajouter une commande dans oreon echo $ORACLE_HOME et le site ne me retourne que $
couak
06-13-2007, 06:01 PM
1) ton evironnement c'est celui du user exécuté par nagios ?
2) as-tu fais des manip sur ton client ou ton environnement oracle après démarrage de nagios ?
3) as-tu d'autres scripts perl tournant avec nagios ?
shadowy83
06-13-2007, 10:39 PM
1) ton evironnement c'est celui du user exécuté par nagios ?
2) as-tu fais des manip sur ton client ou ton environnement oracle après démarrage de nagios ?
3) as-tu d'autres scripts perl tournant avec nagios ?
1) je me suis log avec mon compte nagios pour tester en ligne de commande et j'ai tappé la ligne de commande que tu m'as transmis. Normalement j'ai déclarer mes variables EN dans un fichier aoracle.sh qui les charges dans tous les comptes au login (/etc/profile.d/aoracle.sh. J'ai lu sur des forums que ca pourrait être par ordre alphabetique que les fichiers sont chargé donc je l'ai renommé aoracle.sh
voilà le contenu
ORACLE_BASE=/usr/local/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product; export ORACLE_HOME
ORACLE_SID=TSH1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
Quand j'ai tenté d'ajouter l'ocale home dans le script, j'ai eu ce message d'erreur
2) tu veux savoir si j'ai restart pour prendre en compte les changements ? si c'est ça oui je le fais a chaque changement. J'ai testé telement de truc que je sais même plus ce que j'ai fait lol. Du coup j'ai remis le fichier oracle_generic original
3) oui certainement mais j'ai pas en tête les fichiers tu penses que ca peut venir de ça ?
Merci de ton aide :)
couak
06-14-2007, 12:44 AM
question conne : tu as bien lancé au moins une fois "ldconfig" ?
sinon je vois pas ce qui cloche hormis un environnement mal configuré dans nagios
En effet, si ca marche en ligne de commande y'a pas de raisons à ce que cela ne marche pas avec nagios car cela veut dire que ton client oracle est OK, DBI et DBD Oracle sont OK, et que ton environnement possède le minimum pour tourner
Le script n'utilise rien de spécial, à partir du moment où tout ce qui a été énoncé plus haut fonctionne
Tu peux toujours essayer d'appeler ta commande en invoquant directement l'interpréteur perl plutôt que d'avoir un exécutable appelant perl dans la ligne de shebang mais ca m'étonnerai que ca change grand chose
Mais essaies toujours un "perl -s check_oracle_generic ..." dans la définition de ta commande
Je ne pourrais pas te dire "utilises d'autres scripts perl utilisant dbd et oracle" car je n'en connais pas d'autres : les plugins sur nagiosexchange sont basés sur le client sqlplus sauf deux (check_oracle_cachehitratio et check_oracle_tbs) mais malheuresement pour toi ils sont basés sur le même modèle car énorme copier/coller
Si ca peut te rassurer, check_oracle_generic marche très bien chez moi :) à l'origine je l'avais écrit pour superviser le nombre de commandes bloqués et /ou en attente de traitement dans un prologiciel de prise de commandes
shadowy83
06-14-2007, 06:30 PM
je vais tester le ldconfig enfaite je connaissais pas cette commande, là j'ai un pb avec mon serveur donc je tente demain.
Suffit de faire ldconfig sans argument ? merci encore une fois de ton aide j'espere que c bien ça :)
shadowy83
06-15-2007, 02:55 PM
j'ai tenté le ldconfig puis le perl -s mais aucun des 2 fonctionnent. Avec le perl -s j'ai un message ds nagios (No output!)
Est ce qu il faut faire une manip sur le php ou apache ? sinon j'a tenté d'ajouter dans /etc/ld.so.conf la ligne suivante > /usr/local/oracle/product/lib
mais celà ne fonctionne pas j'ai le message d'erreur ldconfig: /usr/local/oracle/product/lib/libexpat.so.0 is not a symbolic link
sinon peut etre que c cpan qu'il faut que j'ajoute ?
Mouarf je sens que je vais pas y arriver lol merci de votre (ton aide) aide !