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

Linux Discussion :

Shell Ksh sous Hp-UNIX combo ORACLE


Sujet :

Linux

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 106
    Points : 104
    Points
    104
    Par défaut Shell Ksh sous Hp-UNIX combo ORACLE
    Bonjour,

    Je ne sais pas si c'est ici ou je devrais poster ce sujet mais je suis sorti par la grande porte en le postant dans les deux forums (Unix et Oracle)

    Mon problème :

    Je suis entrain d'écrire uyn script (Ksh) qui se connecte à une base de données sous le moteur ORACLE (8.1.7).

    Pour l'instant tout va bien, mais quand j essaye d'éxecuter une commande automatiqument (dans mon script) le sqlplus ne les prend pas, je crois que c un problème de processus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/bin/ksh
     
    sqlplus $Var_Con
     
    host echo "SELECT * from cat;"
     
    host echo "Términé"
    la premirer commande s execute et j ai le prompt sqlplus mais les deux autres sensées s executer dans ce prompt sont en attente de la fin du processus sqlplus.

    Qlq1 a une idée?

    Merci d'avance.
    Amine

  2. #2
    Membre averti Avatar de temar
    Profil pro
    Étudiant
    Inscrit en
    Août 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 316
    Points : 300
    Points
    300
    Par défaut
    Salut,

    Multipost ? pas bien, tu vas te faire enguirlander toi

    Sinon, concernant ton problème, tout ce que je peux te dire, c'est que c'est logique qu'il attende la fin de sqlplus pour faire la suite, mais je pourrai pas te dire comment résoudre le problème

    Ne connaissant rien à Oracle, je me renseigne : sqlplus ça fait quoi ? C'est la connection a la base ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 106
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par temar
    Salut,

    Multipost ? pas bien, tu vas te faire enguirlander toi

    Sinon, concernant ton problème, tout ce que je peux te dire, c'est que c'est logique qu'il attende la fin de sqlplus pour faire la suite, mais je pourrai pas te dire comment résoudre le problème

    Ne connaissant rien à Oracle, je me renseigne : sqlplus ça fait quoi ? C'est la connection a la base ?

    Merci, en fait sqlplus permet de lancer une connexion a une base ORACLE en utilisant l interpreteur sqlplus (SQL propre à ORACLE)
    Amine

  4. #4
    Membre averti Avatar de temar
    Profil pro
    Étudiant
    Inscrit en
    Août 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 316
    Points : 300
    Points
    300
    Par défaut
    Citation Envoyé par insupien
    Merci, en fait sqlplus permet de lancer une connexion a une base ORACLE en utilisant l interpreteur sqlplus (SQL propre à ORACLE)
    Ca lance simplement la connection ou ça lance vraiment un interpreteur ?
    Tu dis que tu obtiens un prompt d'oracle, donc cela semble logique que la suite de ton script shell ne soit pas exécutée, tant que tu n'as pas quitté l'interpreteur Oracle.

    Ne faudrait-il pas passé la suite des commandes à réaliser dans ce meme interpreteur Oracle ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 106
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par temar
    Ca lance simplement la connection ou ça lance vraiment un interpreteur ?
    Tu dis que tu obtiens un prompt d'oracle, donc cela semble logique que la suite de ton script shell ne soit pas exécutée, tant que tu n'as pas quitté l'interpreteur Oracle.

    Ne faudrait-il pas passé la suite des commandes à réaliser dans ce meme interpreteur Oracle ?

    Oui justement, le but etant d 'automatiser l operation à l aide du script.

    y a t il pas une maniere d executer deux processus en mm temps? le Pipe "|" me permettera t il de combiné les flux?
    Amine

  6. #6
    Membre averti Avatar de temar
    Profil pro
    Étudiant
    Inscrit en
    Août 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 316
    Points : 300
    Points
    300
    Par défaut
    Tu aurais fait ça en C, je t'aurais dit de faire un fork()

    J'avais pensé qu'en créant un sous-shell, ça passerait, mais en fait le problème sera le même que celui que tu as actuellement. Tu ne récupèreras pas la main pour exécuter les commandes suivantes de ton script, tant que le sous-shell ne sera pas terminé...

    Ya-t-il un expert en script shell dans l'assistance ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 106
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par temar
    Tu aurais fait ça en C, je t'aurais dit de faire un fork()

    J'avais pensé qu'en créant un sous-shell, ça passerait, mais en fait le problème sera le même que celui que tu as actuellement. Tu ne récupèreras pas la main pour exécuter les commandes suivantes de ton script, tant que le sous-shell ne sera pas terminé...

    Ya-t-il un expert en script shell dans l'assistance ?

    c'est vrai qu avec le fork() y aurait le mm probleme.

    Cependant je suis contraint de faire du KSH/SQL/PLSQL!
    Amine

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 106
    Points : 104
    Points
    104
    Par défaut
    Personne n a une idée par ici?!!
    Amine

  9. #9
    Membre averti Avatar de temar
    Profil pro
    Étudiant
    Inscrit en
    Août 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 316
    Points : 300
    Points
    300
    Par défaut
    Je ne sais pas si ça peut t'aider, mais j'ai lu un truc sur le ksh, qui dit :

    Groupement de commandes

    * Exécution dans un sous-shell : (cmd1;cmd2)
    * Exécution dans le shell courant : {cmd1;cmd2}
    Sinon, essaye en lançant le sqlplus en arrière plan...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 51
    Points : 54
    Points
    54
    Par défaut
    Normalement tu peux lancer des requetes avec ksh
    Mais tu dois utiliser le principe du @ soit avec cette méthod
    /product/oracle/product/9.2.0/bin/sqlplus -s USER/PASS@${ORACLE_SID} << EOR
    @/product/oracle/admin/scripts/requete

    EOR

    Sinon comme ceci
    sqlplus -s user/pass@schema @/vcoe0a.v0a/data/script/requete.sql

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 106
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par Mimo
    Normalement tu peux lancer des requetes avec ksh
    Mais tu dois utiliser le principe du @ soit avec cette méthod



    Sinon comme ceci
    Merci je vais essayer ca demain matin!

    et pour le code que je t ai filé ca marhce?
    Amine

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 106
    Points : 104
    Points
    104
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlplus -s user/pass@schema @/vcoe0a.v0a/data/script/requete.sql
    cette commande marche super bien le seul soucis est que aprres execution il ne me donne pas la main c a d il attend la fin du processus!!! donc je suis obligé de me deconnecter du serveur !!!!
    Amine

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 106
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par insupien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlplus -s user/pass@schema @/vcoe0a.v0a/data/script/requete.sql
    cette commande marche super bien le seul soucis est que aprres execution il ne me donne pas la main c a d il attend la fin du processus!!! donc je suis obligé de me deconnecter du serveur !!!!

    Personne n a une idée???
    Amine

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Tu dois finir tes scripts SQL par un exit. L'ideal étant de mettre "exit sql.sqlcode"
    qui te permet de récuper le code d'erreur sqlplus au niveau du shell. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    $ sqlplus system
     
    SQL*Plus: Release 8.1.7.0.0 - Production on Tue Aug 1 17:24:33 2006
     
    (c) Copyright 2000 Oracle Corporation.  All rights reserved.
     
    Enter password: 
     
    Connected to:
    Oracle8i Enterprise Edition Release 8.1.7.4.0 - 64bit Production
    JServer Release 8.1.7.4.0 - 64bit Production
     
    SQL> select dfkhgs from aqwzsx;
    select dfkhgs from aqwzsx
                       *
    ERROR at line 1:
    ORA-00942: table or view does not exist
     
     
    SQL> exit sql.sqlcode
    Disconnected from Oracle8i Enterprise Edition Release 8.1.7.4.0 - 64bit Production
    JServer Release 8.1.7.4.0 - 64bit Production
    $ echo $?
    174
    $
    Une autre solution consiste a tout mettre dans le shell sous la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sqlplus /nolog << EOF
    connect USER/PASSWD
    select col1, col2 from table where col1 = "$VAR";
    exit sql.sqlcode
    EOF
    Le shell va comprendre que de l'indirection EOF ( << EOF) les lignes ne sont plus pour lui jusqu'a ce qu'il retrouve la chaine de caractere "EOF" (souvent mise pour End Of File).
    L'interret de cette forme, c'est que l'on peut passer directement des variables shell au SQL.

    C'est tout

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 106
    Points : 104
    Points
    104
    Par défaut
    Merci
    Amine

  16. #16
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par Arlequin44
    Tu dois finir tes scripts SQL par un exit. L'ideal étant de mettre "exit sql.sqlcode"
    Surtout pas!

    Unix ne supporte que 255 code d'erreurs (1 à 255)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    lsc@chltlxlsc1:~/t> sqlplus u/u
     
    SQL*Plus: Release 10.2.0.2.0 - Production on Wed Aug 2 10:05:39 2006
     
    Copyright (c) 1982, 2005, Oracle.  All Rights Reserved.
     
     
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
    With the Partitioning, OLAP and Data Mining options
     
    U@LSC01> create table t as select * from dual;
    create table t as select * from dual
                                    *
    ERROR at line 1:
    ORA-01536: space quota exceeded for tablespace 'USERS'
     
     
    U@LSC01> show sqlcode
    sqlcode 1536
    U@LSC01> exit sql.sqlcode
    Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
    With the Partitioning, OLAP and Data Mining options
    lsc@chltlxlsc1:~/t> echo $?
    0
    comme 1536 modulo 256 égale 0, le code de retour est 0 !

    @+
    Laurent

  17. #17
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :|sqlplus user/pw @script
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo @script|sqlplus user/pw
    permet aussi de ne pas attendre sur l'entrée standard. Pour une gestion des erreurs, tu peux faire dans ton script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    whenever sqlerror exit failure
    ce qui aurait l'effet de quitter immédiatement avec une erreur (non-nulle ) en cas d'échec d'une commande

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    Bien vu l' "exit failure", j'avais complètement zappé que le code d'erreur UNIX ne pouvait dépasser 255.

    A+

  19. #19
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    oui, exit sql.sqlcode, je l'avais déjà vu dans de nombreux scripts

    A+
    Laurent

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

Discussions similaires

  1. Crontab sous le shell ksh
    Par constant_op dans le forum Administration système
    Réponses: 2
    Dernier message: 06/09/2012, 11h14
  2. Shell ksh sous Redhat 6.3
    Par constant_op dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 28/08/2012, 00h29
  3. Problèmes avec requêtes Oracle sous Cron Unix
    Par wahabbad dans le forum Oracle
    Réponses: 1
    Dernier message: 02/08/2011, 14h21
  4. Programmation script shell ksh unix
    Par Gourou Dsecours dans le forum Administration système
    Réponses: 3
    Dernier message: 09/10/2009, 16h58

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