Créer un .bat avec des commandes Oracle

Résolu/Fermé
smooncef Messages postés 96 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 18 avril 2008 - 17 avril 2008 à 11:35
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 18 avril 2008 à 09:27
Bonjour,

Je souhaiterais créer des routines sous windows en attaquant une base de données Oracle 10g
Mais je dois peut-être mal m'y prendre!
J'espère avoir plus de d'aide sur ce forum.

Voici mon programme batch en partie :

@SET CHAINECONNECT=%ORAUSER%/%ORAPASSWD%@%ORASID%
:creation
@SET REPONSE=
@CLS
@ECHO ------------------------------------------------------------------------
@ECHO                       Etes-vous certain ? Y or N
@ECHO ------------------------------------------------------------------------
@SET /P REPONSE=Reponse : 
@IF '%REPONSE%' == '' GOTO creation
@IF /I %REPONSE% == y GOTO suite2
@IF /I %REPONSE% == n GOTO commencement

:suite2
@SET ORABASE=
@SET ORAPASS=
@SET /P ORABASE=Nom de la base souhaite : 
@SET /P ORAPASS=Mot de passe souhaite : 
@IF %ORABASE% == '' GOTO commencement
@IF %ORAPASS% == '' GOTO commencement
@GOTO gocreat

:gocreat
SQLPLUS %CHAINECONNECT%
CREATE USER %ORABASE% IDENTIFIED BY %ORAPASS%;
GRANT all privilege to %ORABASE% with admin option;
GRANT dba to %ORABASE%;
GRANT connect to %ORABASE%;
GRANT "EXP_FULL_DATABASE" TO "%ORABASE%" with admin option;
GRANT "IMP_FULL_DATABASE" TO "%ORABASE%" with admin option;
GRANT "DBA" TO "%ORABASE%" with admin option;
GRANT "CONNECT" TO "%ORABASE%" with admin option;
GRANT "RESOURCE" TO "%ORABASE%" with admin option;
GRANT "AQ_ADMINISTRATOR_ROLE" TO "%ORABASE%" WITH ADMIN OPTION;
GRANT "DELETE_CATALOG_ROLE" TO "%ORABASE%" WITH ADMIN OPTION;
GRANT "EXECUTE_CATALOG_ROLE" TO "%ORABASE%" WITH ADMIN OPTION;
GRANT "RECOVERY_CATALOG_OWNER" TO "%ORABASE%" WITH ADMIN OPTION;
GRANT "SELECT_CATALOG_ROLE" TO "%ORABASE%" WITH ADMIN OPTION;
GRANT "SNMPAGENT" TO "%ORABASE%" WITH ADMIN OPTION;
ALTER USER "%ORABASE%" DEFAULT ROLE ALL;
QUIT;
@ECHO ------------------------------------------------------------------------
@ECHO         Creation de la base %ORABASE% effectue avec succes
@ECHO ------------------------------------------------------------------------
%SLEEP4%
@GOTO commencement


Le soucis est que lorsque je lance mon programme, le SQLPLUS %CHAINECONNECT% se conencte bien, mais lorsqu'il doit lancer les commandes de CREATE ; GRANT ... ça reste figé, ça ne bouge pas, et lorsque je tape QUIT ça lance les CREATE et GRANT ...

Avez vous des idées !

Merci d'avance.
A voir également:

4 réponses

smooncef Messages postés 96 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 18 avril 2008 3
17 avril 2008 à 14:41
Personne n'aurait une idée ?
1
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
17 avril 2008 à 15:17
mettre toutes les commandes Oracle CREATE, GRANT, etc dans un fichier, oracle.txt et faire une redirection

SQLPLUS %CHAINECONNECT% < oracle.txt
1
smooncef Messages postés 96 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 18 avril 2008 3
17 avril 2008 à 16:53
Ce n'est pas possible autrement que de passer par un fichier texte ou un fichier sql !!!!

Du coup je me débrouille comment pour que mes variables saisies soient prisent en compte dans un fichier externe !?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
18 avril 2008 à 09:27
pour n'exécuter qu'une fois la commande, tu peux aussi envoyer tout les echo dans un fchier:
@ECHO CREATE USER %ORABASE% IDENTIFIED BY %ORAPASS%; >> oracle.txt
...
SQLPLUS < oracle.txt
1
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
17 avril 2008 à 17:30
et comme ça

( echo CREATE USER %ORABASE% IDENTIFIED BY %ORAPASS%;
echo GRANT all privilege to %ORABASE% with admin option;
...
echo QUIT; ) | SQLPLUS %CHAINECONNECT%
0
smooncef Messages postés 96 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 18 avril 2008 3
18 avril 2008 à 09:19
Salut,

Effectivement, moi qui ai l'habitude de faire du KornShell je n'ai pas pensé à le faire façon UNIX.
Bon effectivement, le fait de faire :
( echo CREATE USER %ORABASE% IDENTIFIED BY %ORAPASS%;
echo GRANT all privilege to %ORABASE% with admin option;
...
echo QUIT; ) | SQLPLUS %CHAINECONNECT%

à la fin de ma requete aurait été judicieux, oui mais voilà, façon UNIX sur windows ce n'est pas encore ça.

Mais tu m'a mis sur la voie de la solution, et voici la solution :

@ECHO CREATE USER %ORABASE% IDENTIFIED BY %ORAPASS%;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT all privilege to %ORABASE% WITH ADMIN OPTION;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT dba to %ORABASE%;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT connect to %ORABASE%;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT "EXP_FULL_DATABASE" TO "%ORABASE%" WITH ADMIN OPTION;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT "IMP_FULL_DATABASE" TO "%ORABASE%" WITH ADMIN OPTION;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT "DBA" TO "%ORABASE%" WITH ADMIN OPTION;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT "CONNECT" TO "%ORABASE%" WITH ADMIN OPTION;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT "RESOURCE" TO "%ORABASE%" WITH ADMIN OPTION;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT "AQ_ADMINISTRATOR_ROLE" TO "%ORABASE%" WITH ADMIN OPTION;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT "DELETE_CATALOG_ROLE" TO "%ORABASE%" WITH ADMIN OPTION;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT "EXECUTE_CATALOG_ROLE" TO "%ORABASE%" WITH ADMIN OPTION;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT "RECOVERY_CATALOG_OWNER" TO "%ORABASE%" WITH ADMIN OPTION;|SQLPLUS -s %CHAINECONNECT%
@ECHO GRANT "SELECT_CATALOG_ROLE" TO "%ORABASE%" WITH ADMIN OPTION;|SQLPLUS -s %CHAINECONNECT%
@ECHO ALTER USER "%ORABASE%" DEFAULT ROLE ALL;|SQLPLUS -s %CHAINECONNECT%


En effet, il faut mette en début de chaque lignes un "echo" ; et en fin de chaque lignes mon "|SQLPLUS -s %CHAINECONNECT%" sans les parenthèses de début et de fin.
Du coup mon script est prêt à fonctionner.

Merci du coup de main Dubcek.
0