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

SQLLdr data loading not working through cronjob

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

您可能应该使用 source $HOME/.bashrc 来在 cron 命令中设置您的环境变量,例如像这样:

00 22 * * 0-6 source $HOME/.bashrc ;  $PATH_TO_SCRIPT/my_sqlload_script.sh

每当您手动尝试执行 .sh 文件时,您正在使用来自 linux/unix 的会话,该会话在登录时会自动执行 .bash_profile/.profile 文件,这些文件会启动一些变量比如DBUSER等

当从 cronjob 执行 .sh 文件时,此 .bash_profile/ .profile 文件不会自动执行。所以你需要在.sh文件中自己调用。

在 .sh 文件的第一行尝试这样的东西 [for RHEL]:

. $HOME/.bash_profile