Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2005, 10h32   #1
Nouveau Membre du Club
 
Avatar de Doctor Z
 
Inscription : mars 2004
Messages : 88
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 88
Points : 26
Points : 26
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]
__________________
Doctor Z
----------
Deus gosta do povo luso.
Olivença, l'oubliée.
Doctor Z est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 10h36   #2
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Et bien, il faut que votre script invoque l'utilitaire d'export (EXP)
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 10h44   #3
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 10h49   #4
Nouveau Membre du Club
 
Avatar de Doctor Z
 
Inscription : mars 2004
Messages : 88
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 88
Points : 26
Points : 26
OK, donc en faisant un script de ce type :
Code :
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 !
__________________
Doctor Z
----------
Deus gosta do povo luso.
Olivença, l'oubliée.
Doctor Z est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 10h50   #5
Nouveau Membre du Club
 
Avatar de Doctor Z
 
Inscription : mars 2004
Messages : 88
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 88
Points : 26
Points : 26
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.
__________________
Doctor Z
----------
Deus gosta do povo luso.
Olivença, l'oubliée.
Doctor Z est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 10h54   #6
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
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....
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 10h56   #7
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Oui, ou de coder simplement l'appel de EXP dans un script Sql*lus avec la commande HOST() ou !
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 10h59   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 11h10   #9
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Avec DBMS_PIPE expliqué par Tom Kyte

Si tu as accés au support Metalink voila d'autres méthodes :

Dynamic SQL and System Commands Using DBMS_PIPE

Calling Operating System Commands from PL/SQL using External Procedures
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 11h12   #10
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 11h16   #11
Nouveau Membre du Club
 
Avatar de Doctor Z
 
Inscription : mars 2004
Messages : 88
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 88
Points : 26
Points : 26
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 ... ?
__________________
Doctor Z
----------
Deus gosta do povo luso.
Olivença, l'oubliée.
Doctor Z est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 11h26   #12
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Si vous pouvez le faire par batch, à mon avis c'est préférable et plus simple à mettre en place, à comprendre et à maintenir...
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 11h29   #13
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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 :
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 :
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 :
1
2
3
$ ./host.csh&
[1]     1859672
$
Code :
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 :

Citation:
tmp.csh: dir: introuvable.
Code :
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 11h34   #14
Nouveau Membre du Club
 
Avatar de Doctor Z
 
Inscription : mars 2004
Messages : 88
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 88
Points : 26
Points : 26
Merci beaucoup pour toutes ses précisions.
Je vais consulter les différents liens proposés et analyser le tout.

Merci encore.
__________________
Doctor Z
----------
Deus gosta do povo luso.
Olivença, l'oubliée.
Doctor Z est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 14h06   #15
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Citation:
Envoyé par orafrance
Code :
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....
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 14h12   #16
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 14h21   #17
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Bon les gars, à quand un petit papier sur les 10 règles d'or sur la sécurité ?
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 14h21   #18
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
si seulement il n'y en avait que 10
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 14h23   #19
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
au moins celles qui permettent de ne pas être califfe à la place du califfe !
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2005, 14h27   #20
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
à toi l'honneur
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h01.


 
 
 
 
Partenaires

Hébergement Web