Не сте казали какво всъщност се случва, но предполагам, че не сте подканени за идентификационни данни и че може би не може да намери sqlplus
. На кутия Red Hat това работи:
#!/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
Това събира стойностите от потребителя на локалната машина, за да се избегне проблемът „Псевдотерминалът няма да бъде разпределен, защото stdin не е терминал“.
След това се настройва средата на Oracle веднъж на отдалечения сървър - това, което трябва да настроите, зависи от това кой клиент използвате (особено дали използвате незабавния клиент, но ако се свързвате като oracleкод> това изглежда малко вероятно и вероятно можете да стартирате
oraenv
).
Също така го промених да изпълнява SQL*Plus с /nolog
и след това свързване
веднъж стартиран, така че идентификационните данни не са изложени в ps
изход. И преминах от старите раздели
към по-често срещаните user_tables
.
Вложените тук документи работят, но не са необходими; SQL командите вече се въвеждат на правилното място и ще бъдат видени от SQL*Plus, а не от отдалечената обвивка.
Разбира се, тъй като не знам каква грешка всъщност виждате, това е до голяма степен спекулация. Вероятно би било по-лесно клиентът да се инсталира локално и да се използва SQL*Net връзка вместо SSH, но може да има ограничения на защитната стена, за които не знаем.