Announcement

Collapse
No announcement yet.

Interroger un serveur orcale

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Interroger un serveur orcale

    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 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)
    Last edited by shadowy83; 15 May 2007, 12:02.

  • #2
    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
    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_HOM E/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

    Comment


    • #3
      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 = "[email protected][0]);

      exit $exit_code;
      ]

      Comment


      • #4
        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)

        Comment


        • #5
          Originally posted by couak View Post
          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

          Comment


          • #6
            essaie de voir ton environnement sous nagios quand tu exécutes un perl

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

            Comment


            • #7
              Originally posted by couak View Post
              essaie de voir ton environnement sous nagios quand tu exécutes un perl

              Code:
              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 ?
              Code:
              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;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=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:*.bz2=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 $
              Last edited by shadowy83; 13 June 2007, 16:51.

              Comment


              • #8
                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 ?

                Comment


                • #9
                  Originally posted by couak View Post
                  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
                  Code:
                  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
                  Last edited by shadowy83; 13 June 2007, 21:43.

                  Comment


                  • #10
                    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

                    Comment


                    • #11
                      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

                      Comment


                      • #12
                        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 !
                        Last edited by shadowy83; 15 June 2007, 14:43.

                        Comment

                        Working...
                        X