我想通过crontab执行脚本从项目的多个文件加载数据。手动执行时脚本运行良好,但当脚本由crontab例程执行时,sqlldr不会提交结果,而是移动到下一次迭代,导致无数据加载。
sqlldr行在循环中工作正常。
任何改变脚本的帮助,以获得所需的结果将非常受欢迎
请在代码段下方找到
ORACLE_HOME=/oracle/oracle/product/10g/db_1
$ORACLE_HOME/bin/sqlldr
export ORACLE_HOME
totaltotalFileNumber=1000
count=1
while [ $count -lt $totalFileNumber ]
do
$ORACLE_HOME/bin/sqlldr $DBUser/$DBPassword@testdb control=$controlFilePath direct=true parallel=true
count=`expr $count + 1`
done
-----------CTL file content------------
options(errors=20000)
LOAD DATA
INFILE '/settlement/(fileName).unl'
BADFILE '/settlement/(fileName).BAD'
DISCARDFILE '/settlement/(fileName).DIS'
append
INTO TABLE MO_SMSC
FIELDS TERMINATED BY "," optionally enclosed by '"'
Trailing NULLCOLS
(
colA,
colB,
colC,
colD,
colE
)
答案 0 :(得分:0)
您可能应该使用source $HOME/.bashrc
来源cron
命令设置您的环境变量,例如像这样的东西:
00 22 * * 0-6 source $HOME/.bashrc ; $PATH_TO_SCRIPT/my_sqlload_script.sh
答案 1 :(得分:0)
每当您手动尝试执行.sh文件时,您正在使用linux / unix中的会话,当登录时会自动执行.bash_profile / .profile文件,这些文件会启动某些变量,如DBUSER等。
从cronjob执行.sh文件时,不会自动执行此.bash_profile / .profile文件。因此,您需要在.sh文件中自己调用它。
在.sh文件的第一行尝试类似[for RHEL]的内容:
. $HOME/.bash_profile