Vous n'avez pas dit ce qui se passe réellement, mais je suppose que vous n'êtes pas invité à fournir les informations d'identification et qu'il ne peut peut-être pas trouver sqlplus
. Sur une boîte Red Hat, cela fonctionne :
#!/bin/bash
echo Please enter an Oracle Username:
read USERNAME
echo "Please enter the Oracle Username's Password:"
read -s PASS
SID=XE
conn_str=$USERNAME/[email protected]$SID
ssh [email protected] << EOF
# set these for your specific environment
ORACLE_HOME=<path to ORACLE_HOME>
PATH=$PATH:$ORACLE_HOME/bin # or without .../bin depending on client
TNS_ADMIN=<path to tnsnames.ora directory, if not default>
sqlplus -s /nolog
connect $conn_str
select * FROM user_tables;
exit
EOF
Il s'agit de collecter les valeurs de l'utilisateur sur la machine locale pour éviter le problème "Le pseudo-terminal ne sera pas alloué car stdin n'est pas un terminal".
Il configure ensuite l'environnement Oracle une fois sur le serveur distant - ce que vous devez définir dépend du client que vous utilisez (en particulier si vous utilisez le client instantané, mais si vous vous connectez en tant que oracle
cela semble peu probable, et vous pouvez probablement exécuter oraenv
).
Je l'ai également modifié pour exécuter SQL*Plus avec /nolog
puis connect
une fois en cours d'exécution, les informations d'identification ne sont donc pas exposées dans le ps
production. Et je suis passé des anciens tabs
aux user_tables
les plus courantes .
Les heredocs imbriqués fonctionnent mais ne sont pas nécessaires; les commandes SQL sont déjà saisies au bon endroit et seront vues par SQL*Plus plutôt que par le shell distant.
Bien sûr, puisque je ne sais pas quelle erreur vous voyiez réellement, il s'agit en grande partie de spéculations. Il serait probablement plus simple d'installer le client localement et d'utiliser une connexion SQL*Net plutôt que SSH, mais il pourrait y avoir des restrictions de pare-feu que nous ignorons.