J'ai ecris un shell contenant une commande SQLPLUs,
Je voudrais executer ce shell par rsh (AIXà) mais sur le serveur remote il me dit
SQLPLUS NOT FOUND
Que dois je faire ?
Version imprimable
J'ai ecris un shell contenant une commande SQLPLUs,
Je voudrais executer ce shell par rsh (AIXà) mais sur le serveur remote il me dit
SQLPLUS NOT FOUND
Que dois je faire ?
OK?Code:rsh tonhost "ORACLE_HOME=/app/oracle/product/10.2 /app/oracle/product/10.2/bin/sqlplus"
L'utilisateur avec lequel tu te connectes à ton serveur (en RSH) ne doit pas connaître le chemin du binaire sqlplus ....
Cela peut provenir de plusieurs choses :
- l'utilisateur unix ne possède pas les variables d'environnement ORACLE ==> tu peux le vérifier avec la commande : env|grep ORA
- Le PATH de ton utilisateur ne connait pas le chemin des binaires ORACLE
Affiche le et regarde si le chemin des binaires y est :
echo $PATH
==> cherche notamment : $ORACLE_HOME/bin
Tant que tes variables d'environnement ne seront pas ok et que ton PATH ne sera pas renseigné avec les chemins Oracle, ta commande sqlplus ne marchera pas ...
J'ai modifie mon shell proctest.sh sur le serveur 2 :
#!/bin/ksh
/opt/oracle/.profile
echo "ORACLE_HOME" $ORACLE_HOME
sqlplus stat/stat @/opt/infocentre/prod/sql/test.sql
exit
mais quand j'envoie la commande depuis le serveur 1
rsh 182.25.8.1 -l prod /opt/infocentre/prod/ctl/proctest.sh
il ne veut pas executer /opt/oracle/.profile et ainsi il ne trouve jamais sqlplus !
La methode de laurentschneider fonctionne mais je ne peux pas envoyer que SQLPLUS mais en fait un shell qui execute ce SQLPLUS
Merci
essaye :
rsh 182.25.8.1 -l prod '/opt/infocentre/prod/ctl/proctest.sh'
Et toujours pareil, voila la reponse :
rsh 172.25.8.1 -l oracle '/opt/infocentre/prod/ctl/proctest.sh'
/opt/infocentre/prod/ctl/proctest.sh[4]: sqlplus: introuvable.
et que donne :
quand tu te connectes prod sur cette machine ?Code:
1
2
3
4 echo $HOME $ORACLE_HOME $PATH grep ORACLE_HOME /opt/oracle/.profile which sqlplus
hlvekhe1:prod:/home/prod > echo $HOME $ORACLE_HOME $PATH
/home/prod /opt/oracle/product/7.3.4 /usr/bin:/etc:/usr/sbin:/usr/ucb:/home/prod/bin:/usr/bin/X11:/sbin:.:/usr/lbin:/usr/local/bin:/opt/oracle/product/7.3.4/bin:.
hlvekhe1:prod:/home/prod > grep ORACLE_HOME /opt/oracle/.profile#
The following removes trailing colon from PATH and adds ORACLE_HOME/bin.
*$ORACLE_HOME/bin*) ;;
*:) PATH=$PATH$ORACLE_HOME/bin ;;
*) PATH=$PATH:$ORACLE_HOME/bin ;;
ORAKITPATH=$ORACLE_HOME/forms30/admin/resource:$ORACLE_HOME/oraterm/admin/resource
FORMS30PATH=$ORACLE_HOME/forms30/admin/resource
MENU5PATH=$ORACLE_HOME/forms30/admin/resource
ORATERMPATH=$ORACLE_HOME/forms30/admin/resource
hlvekhe1:prod:/home/prod > which sqlplus
/opt/oracle/product/7.3.4/bin/sqlplus
C'est comme si il ignorait que le user en RSH est prod et de meme pour le user Oracle
et que donne :
Les quotes permettent de se situer dans le contexte distant contrairement aux guillemets, néanmoins, il faut charger le profile.Code:rsh 182.25.8.1 -l prod '. /opt/oracle/.profile; /opt/infocentre/prod/ctl/proctest.sh'
Essaye ceci pour voir la différence :
Code:
1
2 rsh 182.25.8.1 -l prod 'hostname' rsh 182.25.8.1 -l prod "hostname"
Essaye ceci :
rsh 182.25.8.1 -l /opt/oracle/. .profile;/opt/infocentre/prod/ctl/proctest.sh
Le ". .profile" permet d'executer ton .profile dans ton shell courant ....
Si tu lances : .profile, cela ouvre un sous shell dans lequel s'execute .profile ... a la fin de l'execution, ton sous shell se ferme, donc tu perds tes variables d'environnement.
Si tu lances : . .profile, tu execute .profile dans ton shel courant, du coup tes variables d'environnement seront conservées ....
Bon courage.
copiteur ;)
Pour info les 2 dernieres solutions n'etaient toujours pas bonnes finalement dans le proctest.sh voila comment j'ai solutionné:
J'ai code comme cela :
su - prod -c "sqlplus stat/stat /opt/infocentre/prod/sql/test.sql"
et une simple commade rsh :
rsh 172.25.8.1 '/opt/infocentre/prod/ctl/proctest.sh'
Merci