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

PL/SQL Oracle Discussion :

Lancer un exécutable en PL/SQL [FAQ]


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé Avatar de Doctor Z
    Inscrit en
    Mars 2004
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 88
    Par défaut Lancer un exécutable en PL/SQL
    Bonjour à tous,

    Comment puis-je faire pour qu'un script me génère l'export d'une base de
    données ?

    Par avance, merci.

    [Modération, Orafrance : Titre modifié pour illustrer plus exactement la problèmatique]

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Et bien, il faut que votre script invoque l'utilitaire d'export (EXP)

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    ce qui sera particulièrement retor en PL/SQL puisqu'il faut développer une procédure java qui permet d'exécuter un exécutable sur le systéme

  4. #4
    Membre confirmé Avatar de Doctor Z
    Inscrit en
    Mars 2004
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 88
    Par défaut
    OK, donc en faisant un script de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BEGIN
    EXP system/manager OWNER=moi ...
    END ;
    je pourrais évoquer de manière automatique l'export ?

    Sinon dans la section DECLARE du bloc PL/SQL, je définit plusieurs
    variables, de manière à paramétrer mon export, comment pourrais-je
    faire ensuite pour demander à l'utilisateur quelle base dois-je exporter ?
    (en fait, je cherche l'instruction PL/SQL qui me permette de demander à
    l'utilisateur de rentrer une valeur ...).

    Par ailleurs, un script PL/SQL doit-il être enregistré sous avec l'extension .SQL ?

    Par avance, merci beaucoup !

  5. #5
    Membre confirmé Avatar de Doctor Z
    Inscrit en
    Mars 2004
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 88
    Par défaut
    Citation Envoyé par orafrance
    ce qui sera particulièrement retor en PL/SQL puisqu'il faut développer une procédure java qui permet d'exécuter un exécutable sur le systéme
    Bonjour,

    Tu peux développer un peu plus, s'il te plait ?

    Merci.

  6. #6
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    A mon avis, il serait beaucoup plus simple de faire cela en script OS (Bat ou shell) afin de générer le parfile et l'appel de l'export....

  7. #7
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Oui, ou de coder simplement l'appel de EXP dans un script Sql*lus avec la commande HOST() ou !

  8. #8
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    http://www.developpez.net/forums/viewtopic.php?t=180815

    Mais je reste convaincu que le PL/SQL n'est pas fait pour éxécuter des programmes OS

    à lire aussi : http://asktom.oracle.com/pls/ask/f?p=4950:8:8518670148420852553::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:952229840241

  9. #9
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967

  10. #10
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Et pour être tout à fait complet, voila la doc Oracle :
    http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96612/d_pipe2.htm#1003387

  11. #11
    Membre confirmé Avatar de Doctor Z
    Inscrit en
    Mars 2004
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 88
    Par défaut
    OK, en fait dans ce cas de figure spécifique, l'utilisation du PL/SQL sera plus compliquée que de passer par un fichier batch ... ?

  12. #12
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Si vous pouvez le faire par batch, à mon avis c'est préférable et plus simple à mettre en place, à comprendre et à maintenir...

  13. #13
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Bien sûr, c'est TOUJOURS plus difficile

    Le PL/SQL n'a d'intérêt que pour éxécuter des taches spécifiques à Oracle et en aucun cas lancer des programmes divers.

    Pour info j'ai testé ceci sous Unix :

    Installation :

    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
    27
    $ more host.csh
    #!/bin/csh -f
     
    sqlplus apps/apps <<"EOF" | grep '^#' | sed 's/^.//' > tmp.csh
     
    set serveroutput on
     
    declare
            status  number;
            command varchar2(255);
    begin
            status := dbms_pipe.receive_message( 'HOST_PIPE' );
            if ( status <> 0 ) then
                    dbms_output.put_line( '#exit' );
            else
                    dbms_pipe.unpack_message( command );
                    dbms_output.put_line( '##!/bin/csh -f' );
                    dbms_output.put_line( '#' || command );
                    dbms_output.put_line( '#exec host.csh' );
            end if;
    end;
    /
    spool off
    "EOF"
     
    chmod +x tmp.csh
    exec tmp.csh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SQL> create or replace procedure host( cmd in varchar2 )
      2  as
      3      status number;
      4  begin
      5      dbms_pipe.pack_message( cmd );
      6      status := dbms_pipe.send_message( 'HOST_PIPE' );
      7      if ( status <> 0 ) then raise_application_error( -20001, 'Pipe error' );
      8      end if;
      9  end;
     10  /
    Execution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ ./host.csh&
    [1]     1859672
    $
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> exec host('touch ok.orafrance');
     
    Procédure PL/SQL terminée avec succès.
     
    SQL> exec host('dir')
     
    Procédure PL/SQL terminée avec succès.
    Résultat :

    Sous linux :

    tmp.csh: dir: introuvable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ ls -ltr ok*
    -rw-r--r--   1 oracle   dba              0 01 fév 11:24 ok.orafrance
    Donc, ça marche parfaitement bien

  14. #14
    Membre confirmé Avatar de Doctor Z
    Inscrit en
    Mars 2004
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 88
    Par défaut
    Merci beaucoup pour toutes ses précisions.
    Je vais consulter les différents liens proposés et analyser le tout.

    Merci encore.

  15. #15
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Citation Envoyé par orafrance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ls -ltr ok*
    -rw-r--r--   1 oracle   dba              0 01 fév 11:24 ok.orafrance
    Donc, ça marche parfaitement bien Smile
    JAMAIS je ne mettrais ça en place directement !!!
    Parce que l'utilisateur (au sens Oracle) qui le lance a l'air (fort logiquement, d'ailleurs) de se retrouver en tant qu'utilisateur "oracle" sur le système UNIX, et donc membre du groupe DBA, ....
    En environnement opérationnel, c'est plus que limite....

  16. #16
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    c'est clair que c'est TRES dangereux et que bien entendu, une telle manipulation nécessite de bien restreindre les droits d'exécution de la procedure HOST... en fait, c'est exactement pareil que pour UTL_FILE qui peut être TRES dangereux si une directory comme ORACLE_HOME est créée

    Par ailleurs, j'en profite pour rappeller que le privilège ALTER ANY USER est aussi très dangereux puisqu'il permet de se connecter à n'importe quel compte (donc SYS ou SYSTEM) sans que personne puisse s'en rendre compte

  17. #17
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Bon les gars, à quand un petit papier sur les 10 règles d'or sur la sécurité ?

  18. #18
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    si seulement il n'y en avait que 10

  19. #19
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    au moins celles qui permettent de ne pas être califfe à la place du califfe !

  20. #20
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    à toi l'honneur

Discussions similaires

  1. [JVM][8.1.7] Erreur d'exécution de initjvm.sql
    Par Escuzze dans le forum Oracle
    Réponses: 4
    Dernier message: 01/07/2005, 15h39
  2. Réponses: 1
    Dernier message: 23/02/2005, 11h23
  3. Exécuter un fichier .sql
    Par joul's dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/02/2005, 12h18
  4. Exécuter un script SQL
    Par borgfabr dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/03/2004, 08h47
  5. [VB6] Lancer un service, par exemple Sql Server
    Par fea dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/10/2002, 14h07

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