One of our batch job get the following error when calling sqlldr to load text file into database.
% 9205/bin/sqlldr *****/*****@***** control=testsqlldr.ctl data=.....
SQL*Loader: Release 9.2.0.5.0 - Production on Tue Aug 7 18:00:35 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL*Loader-704: Internal error: ulconnect: OCIInitialize [1804]
I treat this error as ORA-01804, then query it with oerr utility.
01804, 00000, "failure to initialize timezone information"
// *Cause: The timezone information file was not properly read.
// *Action: Please contact Oracle Customer Support.
But we did not use timestamp data type, when I run sqlldr alone, everything is fine. After 30 minutes, I suddenly found that the sqlldr binary we called is version 9205, while the Oracle home environment variable is still 8174.
% env | grep ORACLE_HOME
ORACLE_HOME=/export/home/oracle/products/8174x64
Why they specify the full path in the script? They want to use direct path load mode (this require same sqlldr version with server side). Finally I suggest to change the bind size and read size parameters to tuning the performance. After correct the sqlldr path in the script, everything is working fine.
