2017-07-27 18 views
1

crontabでスクリプトを実行して、プロジェクトの複数のファイルからデータをロードしたいとします。スクリプトは手動で実行するとうまく実行されますが、スクリプトがcrontabルーチンによって実行されると、sqlldrは結果をコミットしませんが、次の反復に移動し、結果としてデータがロードされません。SQLLdrデータがcronjobで動作しない

sqlldr行は、ループ外で正常に動作します。

望ましい結果が得られるようにスクリプトを変更することで任意のヘルプは非常に

を理解されるであろうあなたはおそらくセットアップにsource $HOME/.bashrcで環境変数をソースすべきコードセグメント

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/[email protected] 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

は.SHファイルの1行目に[RHELのためにこのような何かを試してみてください? –

+0

コード/データの前に4つの空白を付けます。 [edit-help](http://stackoverflow.com/editing-help)を見てください。 – Cyrus

+0

制御ファイルの内容を表示 –

答えて

0

あなたは手動でのログイン時に自動的にいくつかの変数を開始.bash_profileの/ .profileファイルのファイルを実行し、あなたのLinux/UNIXからのセッションを使用している.SHファイルを実行しようとするたびに

このcronジョブから.shファイルを実行すると、この.bash_profile/.profileファイルは自動的に実行されません。そのため、.shファイルで自分自身で呼び出す必要があります。あなたは、 `` $ DBPassword`、 `$ controlFilePath`を$ DBUser`を設定している

. $HOME/.bash_profile 
0

下に見つけてください。 cronコマンド(例:このような何か:

00 22 * * 0-6 source $HOME/.bashrc ; $PATH_TO_SCRIPT/my_sqlload_script.sh 
関連する問題