sql >> Database >  >> RDS >> Oracle

Variabele gebruiker, pass, sid doorgeven in sqlplus-commando

Je hebt niet gezegd wat er werkelijk gebeurt, maar ik vermoed dat je niet om de inloggegevens wordt gevraagd en dat het misschien sqlplus niet kan vinden . Op een Red Hat-doos werkt dit:

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

Dit verzamelt de waarden van de gebruiker op de lokale computer om te voorkomen dat de 'Pseudo-terminal wordt niet toegewezen omdat stdin geen terminal is'-probleem.

Vervolgens wordt de Oracle-omgeving eenmaal op de externe server ingesteld - wat u moet instellen, hangt af van de client die u gebruikt (met name of u de instant-client gebruikt, maar als u verbinding maakt als oracle dat lijkt onwaarschijnlijk, en je kunt waarschijnlijk oraenv . uitvoeren ).

Ik heb het ook aangepast om SQL*Plus uit te voeren met /nolog en dan connect eenmaal actief, zodat de inloggegevens niet zichtbaar zijn in de ps uitvoer. En ik ben overgestapt van de oude tabs naar de meer algemene user_tables .

De geneste heredocs werken maar zijn niet nodig; de SQL-commando's worden al op de juiste plaats ingevoerd en worden door SQL*Plus gezien in plaats van door de externe shell.

Omdat ik niet weet welke fout je eigenlijk zag, is dit natuurlijk grotendeels speculatie. Het zou waarschijnlijk eenvoudiger zijn om de client lokaal te installeren en een SQL*Net-verbinding te gebruiken in plaats van SSH, maar er kunnen firewallbeperkingen zijn waarvan we niets weten.



  1. Datumkolomberekening in PostgreSQL-query

  2. Base64-gecodeerde gegevens opslaan als BLOB- of TEXT-gegevenstype

  3. Bouw dynamisch een voorbereid statement met call_user_func_array()

  4. Hoe de grootte van de blob in PHP of SQL krijgen