Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Übergeben der Variablen user,pass,sid in sqlplus comman

Sie haben nicht gesagt, was tatsächlich passiert, aber ich vermute, dass Sie nicht zur Eingabe der Anmeldeinformationen aufgefordert werden und dass sqlplus möglicherweise nicht gefunden werden kann . Auf einer Red Hat-Box funktioniert das:

#!/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

Dies sammelt die Werte vom Benutzer auf dem lokalen Rechner, um das Problem „Pseudo-Terminal wird nicht zugewiesen, weil stdin kein Terminal ist“ zu vermeiden.

Es richtet dann die Oracle-Umgebung einmal auf dem Remote-Server ein - was Sie einstellen müssen, hängt davon ab, welchen Client Sie verwenden (insbesondere, ob Sie den Instant-Client verwenden, aber wenn Sie sich als oracle das scheint unwahrscheinlich, und Sie können wahrscheinlich oraenv ausführen ).

Ich habe es auch optimiert, um SQL*Plus mit /nolog auszuführen und dann connect einmal ausgeführt, sodass die Anmeldeinformationen nicht im ps angezeigt werden Ausgang. Und ich bin von den alten tabs gewechselt zu den häufigeren user_tables .

Die verschachtelten Heredocs funktionieren, sind aber nicht notwendig; die SQL-Befehle sind bereits an der richtigen Stelle eingetragen und werden von SQL*Plus und nicht von der Remote-Shell gesehen.

Da ich natürlich nicht weiß, welchen Fehler Sie tatsächlich gesehen haben, ist dies größtenteils Spekulation. Es wäre wahrscheinlich einfacher, den Client lokal zu installieren und eine SQL*Net-Verbindung anstelle von SSH zu verwenden, aber es könnte Firewall-Einschränkungen geben, von denen wir nichts wissen.