sql >> Base de Datos >  >> RDS >> Oracle

Pasando usuario variable, contraseña, sid en sqlplus comman

No ha dicho lo que realmente sucede, pero supongo que no se le solicitan las credenciales y que tal vez no pueda encontrar sqlplus . En una caja de Red Hat esto funciona:

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

Esto es recopilar los valores del usuario en la máquina local para evitar el problema 'Pseudo-terminal no se asignará porque stdin no es un terminal'.

Luego está configurando el entorno de Oracle una vez en el servidor remoto; lo que debe configurar depende del cliente que esté usando (particularmente si está usando el cliente instantáneo, aunque si se está conectando como oracle eso parece poco probable, y probablemente puedas ejecutar oraenv ).

También lo modifiqué para ejecutar SQL*Plus con /nolog y luego connect una vez que se ejecuta, por lo que las credenciales no se exponen en el ps producción. Y he cambiado de las antiguas tabs a las user_tables más comunes .

Los heredocs anidados funcionan pero no son necesarios; los comandos SQL ya se están ingresando en el lugar correcto y serán vistos por SQL*Plus en lugar del shell remoto.

Por supuesto, dado que no sé qué error estaba viendo en realidad, esto es en gran parte especulación. Probablemente sería más sencillo tener el cliente instalado localmente y usar una conexión SQL*Net en lugar de SSH, pero podría haber restricciones de firewall que no conocemos.