IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL*PLUS][Bash] requête sur base montée [Oracle]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut [SQL*PLUS][Bash] requête sur base montée
    Bonjour !

    Je suis actuellement en train de développer une supervision de nos SGBD Oracle (en bash, grâce à l'outil de Monitoring Xymon) et j'ai un problème :

    La plupart de mes scripts vont aller chercher des informations dans v$instance et v$database (entre autres) et je n'ai pas eu de problèmes à créer un rôle et un utilisateur spécifique, lui grant uniquement ce dont il a besoin et taper sur la base ouverte.
    Seulement, le script actuel sur lequel je travaille doit savoir si la base est ouverte ou juste montée. (select status from v$instance)

    Le problème est que si cette requête marche parfaitement pour le role sysdba sans login, impossible pour mon utilisateur de récupérer l'information "MOUNTED" si la base n'est pas ouverte, mes autres scripts ne fonctionnent plus non plus avec la base dans cet état, voici le message d'erreur que j'obtiens sur toutes les requêtes exécutées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ERROR: ORA-01033: ORACLE initialization or shutdown in progress Process ID: 0 Session ID: 0 Serial number: 0 SP2-0306: Invalid option. Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]] where  ::= [/][@]  ::= [][/][@] SP2-0306: Invalid option. Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]] where  ::= [/][@]  ::= [][/][@] SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus
    Est-ce parce que mon rôle n'est pas adapté à ce type de requête ? Y a t-il possibilité d'autoriser l'accès sysdba sans lui assigner explicitement ce rôle ? La voici en entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    req=$(sqlplus -s $DB_USER/$DB_PASSWORD@$HOSTNAME:$ORACLE_PORT/$ORACLE_SID << EOF
    set echo off;
    set feedback off;
    set heading off;
    select status from v\$instance;
    exit;
    EOF
    );
    Merci pour vos réponses, j'espère avoir été clair dans la description de mon problème.

    Cdt,
    Dorian.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut résolution
    Pardonnez mon doublon mais j'ai trouvé une solution que je pense conserver (sauf si je trouve mieux) : Assigner à mon utilisateur le rôle sysdba et me connecter en tant que tel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    req=$(sqlplus -s -L $DB_USER/$DB_PASSWORD@$HOSTNAME:$ORACLE_PORT/$ORACLE_SID as sysdba << EOF ... EOF
    Je passe le sujet en résolu.

  3. #3
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Bonjour

    Pour de la supervision, il est préférable de travailler localement plutôt qu'à distance ( si vous avez un listener tombé ou non démarré le script ne fonctionnera pas ), de plus rendre votre code modulaire, en sortant le SQL du Shell BASH aide à la maintenabilité.

    Si je devais l'écrire ça donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req=$( sqlplus -s -L / as sysdba @ script.sql )
    et pour le script sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    whenever sqlerror exit failure
    set head off feed off pages 0 emb off lines 32767 trimspool on
    select status from v$instance ;
    exit success
    Mais je ne l'écrirais certainement pas car il existe des tas d'outils, libres et gratuits qui font le travail ( Nagios par exemple ou si vraiment vous êtes désespéré, OEM ) pourquoi réinventer la roue et générer de la dette technique inutile ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Problème requête sur 2 tables
    Par temperature dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 20/04/2006, 12h05
  2. Réponses: 1
    Dernier message: 04/04/2006, 10h28
  3. problèmes requètes sur vieilles versions de SQL TALK (1993)
    Par totogenie dans le forum Langage SQL
    Réponses: 11
    Dernier message: 24/01/2006, 17h58
  4. Requête sur base de données ACCESS
    Par JLamotte dans le forum Access
    Réponses: 1
    Dernier message: 21/11/2005, 10h50
  5. Réponses: 2
    Dernier message: 17/11/2004, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo