Oracle
 sql >> Database >  >> RDS >> Oracle

Passando utente variabile, pass, sid nel comando sqlplus

Non hai detto cosa succede effettivamente, ma suppongo che non ti vengano richieste le credenziali e che forse non riesce a trovare sqlplus . Su una scatola Red Hat funziona:

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

Questo sta raccogliendo i valori dall'utente sulla macchina locale per evitare che il problema "Pseudo-terminale non verrà allocato perché stdin non è un terminale".

Sta quindi configurando l'ambiente Oracle una volta sul server remoto:ciò che devi impostare dipende dal client che stai utilizzando (in particolare se stai utilizzando il client istantaneo, anche se ti stai connettendo come oracle sembra improbabile e probabilmente puoi eseguire oraenv ).

L'ho anche ottimizzato per eseguire SQL*Plus con /nolog e poi connect una volta in esecuzione, quindi le credenziali non sono esposte in ps produzione. E sono passato dalle vecchie tabs alle più comuni user_tables .

Gli heredoc annidati funzionano ma non sono necessari; i comandi SQL sono già stati inseriti nel posto giusto e verranno visualizzati da SQL*Plus anziché dalla shell remota.

Naturalmente, dal momento che non so quale errore stavi effettivamente vedendo, questa è in gran parte una speculazione. Probabilmente sarebbe più semplice installare il client in locale e utilizzare una connessione SQL*Net anziché SSH, ma potrebbero esserci restrizioni del firewall di cui non siamo a conoscenza.