Mar*_*ost 1 unix oracle cron sqlplus
我想在cron中运行一个脚本,其中包含一些sqlplus命令.
问题是,当在cron中执行时,sqlplus命令由于某种原因不会被执行.如果我自己执行它,脚本运行正常.
我已经检查了一些论坛,甚至是stackoverflow.com上的主题,并找到了一些关于正确设置环境变量的技巧.但即使仔细检查后,脚本也无效.
这是我的脚本:
echo $ORACLE_HOME|grep "oracle" > /dev/null
if [ $? = 1 ] ; then
echo "Setting environment variable"
# Setting oracle environmet
. /usr/oracle/product/10.2.0/.profile
NLS_LANG='AMERICAN_GERMANY.WE8ISO8859P1'
fi
/usr/oracle/product/10.2.0/bin/sqlplus username/password @basics.sql > export.file
Run Code Online (Sandbox Code Playgroud)
basics.sql包含:
set pagesize 0
set feedback off
set heading off
set linesize 400
set NULL nll
SELECT SOME_FIELDS FROM TABLE ORDER BY FIELD;
EXIT;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
shell环境对于Oracle非常重要,在使用cron时几乎不存在.一如往常,有几种方法可以解决这个问题.
使用脚本设置环境的一种非常标准的方法是使用oraenv脚本,通常位于/ usr/local/bin中
ORACLE_SID={your_sid}
ORAENV_ASK=NO
type oraenv >/dev/null 2>&1 || PATH=/usr/local/bin:$PATH
. oraenv
SQLPATH=$HOME/sql
export SQLPATH
do your stuff
Run Code Online (Sandbox Code Playgroud)
来自cron线:
10 10 * * * $HOME/.profile;$HOME/bin/your_script >$HOME/log/your_script.log 2>&1
Run Code Online (Sandbox Code Playgroud)
这假定.profile不是交互式的并且导出所需的环境.