SQLLdr数据加载无法通过cronjob工作

时间:2017-07-27 05:54:00

标签: bash oracle cron sql-loader

我想通过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
 )

2 个答案:

答案 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