sql >> Databáze >  >> RDS >> Oracle

Předávání proměnné user,pass,sid v příkazu sqlplus

Neřekli jste, co se vlastně stalo, ale předpokládám, že nejste vyzváni k zadání přihlašovacích údajů a že možná nemůže najít sqlplus . Na krabici Red Hat to funguje:

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

Toto je shromažďování hodnot od uživatele na místním počítači, aby se předešlo problému 'Pseudoterminál nebude přidělen, protože stdin není terminál'.

Poté jednou na vzdáleném serveru nastaví prostředí Oracle – to, co musíte nastavit, závisí na tom, kterého klienta používáte (zejména zda používáte okamžitého klienta, i když pokud se připojujete jako oracle to se zdá nepravděpodobné a pravděpodobně můžete spustit oraenv ).

Také jsem to vylepšil tak, aby spouštěl SQL*Plus s /nolog a poté connect po spuštění, takže přihlašovací údaje nejsou v ps vystaveny výstup. A přešel jsem ze starých tabs na běžnější user_tables .

Vnořené heredocs fungují, ale nejsou nutné; příkazy SQL se již zadávají na správném místě a budou je vidět spíše SQL*Plus než vzdálený shell.

Samozřejmě, protože nevím, jakou chybu jste ve skutečnosti viděli, je to z velké části spekulace. Pravděpodobně by bylo jednodušší nechat klienta nainstalovat lokálně a používat připojení SQL*Net místo SSH, ale mohou existovat omezení brány firewall, o kterých nevíme.



  1. Hierarchická databáze pro výběr / vložení příkazu (SQL Server)

  2. Oracle:Vytvořte složený klíč obsahující tři klíče Foregin

  3. Psaní dotazu na dědičnost napsaného v SQL pomocí vnitřního spojení?

  4. Prohlášení o stavu - Php Mysqli