Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Passando a variável user,pass,sid no comando sqlplus


Você não disse o que realmente acontece, mas suponho que você não seja solicitado a fornecer as credenciais e talvez não consiga encontrar sqlplus . Em uma caixa Red Hat isso 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

Isso está coletando os valores do usuário na máquina local para evitar o problema 'Pseudo-terminal não será alocado porque stdin não é um terminal'.

É então configurar o ambiente Oracle uma vez no servidor remoto - o que você precisa definir depende de qual cliente você está usando (particularmente se você estiver usando o cliente instantâneo, embora se você estiver se conectando como oracle isso parece improvável, e você provavelmente pode executar oraenv ).

Também o ajustei para executar o SQL*Plus com /nolog e então conectar uma vez em execução, para que as credenciais não sejam expostas no ps resultado. E mudei das antigas guias para as user_tables mais comuns .

Os heredocs aninhados funcionam, mas não são necessários; os comandos SQL já estão sendo inseridos no lugar certo e serão vistos pelo SQL*Plus ao invés do shell remoto.

Claro, já que não sei qual erro você estava realmente vendo, isso é em grande parte especulação. Provavelmente seria mais simples ter o cliente instalado localmente e usar uma conexão SQL*Net em vez de SSH, mas pode haver restrições de firewall que não conhecemos.