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