Anda belum mengatakan apa yang sebenarnya terjadi, tetapi saya kira Anda tidak dimintai kredensial, dan mungkin itu tidak dapat menemukan sqlplus
. Pada kotak Red Hat ini berfungsi:
#!/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
Ini mengumpulkan nilai dari pengguna di mesin lokal untuk menghindari masalah 'Terminal semu tidak akan dialokasikan karena stdin bukan terminal'.
Kemudian mengatur lingkungan Oracle sekali di server jarak jauh - apa yang perlu Anda atur tergantung pada klien mana yang Anda gunakan (terutama apakah Anda menggunakan klien instan, meskipun jika Anda terhubung sebagai oracle
itu tampaknya tidak mungkin, dan Anda mungkin dapat menjalankan oraenv
).
Saya juga telah mengubahnya untuk menjalankan SQL*Plus dengan /nolog
lalu connect
setelah berjalan, sehingga kredensial tidak terekspos di ps
keluaran. Dan saya telah beralih dari tabs
yang lama ke user_tables
yang lebih umum .
Heredocs bersarang berfungsi tetapi tidak diperlukan; perintah SQL sudah dimasukkan di tempat yang tepat dan akan dilihat oleh SQL*Plus daripada shell jarak jauh.
Tentu saja, karena saya tidak tahu kesalahan apa yang sebenarnya Anda lihat, ini sebagian besar merupakan spekulasi. Mungkin akan lebih mudah untuk menginstal klien secara lokal dan menggunakan koneksi SQL*Net daripada SSH, tetapi mungkin ada batasan firewall yang tidak kami ketahui.