Linux の変数に sqlplus 値を保存しようとしています。
スクリプトは手動でトリガーされた場合は正常に動作します。ただし、スクリプトが crontab から呼び出されると、変数の値は保存されません。
コード:
#!/bin/ksh
~/.profile
v=`sqlplus -s <<!
<<DB details>>
select sysdate from dual;
!
`
echo "$v"
答え1
sqlplus
crontab エントリから実行するとイライラすることがあります。crond
分岐したシェルが「rc」ファイルを読み取らないため、非常にまばらな PATH 変数が取得されます。
「.profile」ファイルでORACLE_HOMEを設定していますか?PATHに$ORACLE_HOME/binを含め、ORACLE_HOMEとPATHをエクスポートしていますか?まずそれをチェックしてください。また、あなたのコードには、ksh
問題となっている実行中ない調達ファイル~/.profile
。スクリプトはそのファイルを「ソース」にする必要があります。また、TNS_ADMIN の設定とエクスポートについては、次のように迷信があるようです。
export TNS_ADMIN=$ORACLE_HOME/network/admin
/nolog
のオプションを使用して「ヒア ドキュメント」にデータベース ユーザー ID とパスワードを含めると、 をsqlplus
実行するすべてのユーザーにそれらの詳細が公開されるのを防ぐことができますps
。
sqlplus -s /nolog 2>&1 << END_ZERO_ROW_CHECK
connect $USER_NAME/$PASSWORD@$SID_INSTANCE
whenever oserror exit failure
whenever sqlerror exit failure
...
END_ZERO_ROW_CHECK