我正在尝试将 sqlplus 值存储到 Linux 中的变量中。
手动触发时脚本工作正常。但是当从 crontab 调用脚本时,变量中的值不会被存储。
代码:
#!/bin/ksh
~/.profile
v=`sqlplus -s <<!
<<DB details>>
select sysdate from dual;
!
`
echo "$v"
答案1
sqlplus
从 crontab 条目运行可能会令人沮丧。你会得到一个非常稀疏的 PATH 变量,因为分叉出来的 shellcrond
不会读取“rc”文件。
在你的“.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