Oracle
 sql >> Base de données >  >> RDS >> Oracle

Passage de la variable user, pass, sid dans la commande sqlplus

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.