実際に何が起こるかは言われていませんが、資格情報の入力を求められていないのではないかと思います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/$PASS@$SID
ssh oracle@10.116.12.26 << 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環境を1回設定します-設定する必要があるものは、使用しているクライアントによって異なります(特に、インスタントクライアントを使用しているかどうかに依存しますが、接続しoracle
ている場合はそうではないようです)おそらく実行できますoraenv
)。
また、SQL*Plus を実行してから一度実行するように微調整した/nolog
のでconnect
、資格情報がps
出力に表示されません。tabs
そして、古いものからより一般的なものに切り替えましたuser_tables
。
ネストされたヒアドキュメントは機能しますが、必須ではありません。SQL コマンドはすでに適切な場所に入力されており、リモート シェルではなく SQL*Plus によって認識されます。
もちろん、実際にどのようなエラーが表示されたのかはわかりませんので、これは主に憶測です。クライアントをローカルにインストールし、SSH ではなく SQL*Net 接続を使用する方がおそらく簡単ですが、私たちが知らないファイアウォールの制限がある可能性があります。