Oracle sqlldr使用命名管道文件加载多个表

时间:2016-09-09 15:48:20

标签: oracle unix sql-loader

我正在将数据从DB2 UDB表(几个100)移动到Oracle,对于大多数表,我将使用sqlldr。 DB2表的摘录已导出&压缩(使用本地AIX压缩)。我修复了所有数据格式,我可以使用示例快照加载所有表。问题是,当我来使用实际大小导出时,文件大小意味着我不能同时解压缩它们(空间限制)。我想看看这是否是使用命名管道来保存必须解压缩文件的最佳方法,还是我应该为每个提取文件都有一个命名管道文件?

mkfifo testUnzip
for tbl in `cat ./XXSchema_TblListing.rdr`
do nohup sqlldr userid=xxuser/pwd@dbname control=${tbl}.ctl.txt log=${tbl}results.log discard=${tbl}results.dsc direct=y data=testUnzip ERRORS=0 > ${tbl}run.out 2>&1 &
zcat ${tbl}.csv.Z  > testUnzip
done

----在以下函数的脚本中调用ADDED。我遇到的问题是如果发生故障则返回sqlldr。我在日志文件中输出但由于它没有返回,我无法返回初始调用失败然后退出。

PROCESSLOAD(){
set -x
rm -f ${tblLoad}.log
echo "truncate table $USR.${tblLoad};" |   sqlplus  $USR/$PWD@dbase >> ./TblInfo.log
mkfifo ${tblLoad}.dat
nohup sqlldr userid=$USR/$PWD@dbase control=${tblLoad}.ctl.txt log=${tblLoad}_DESCresults.log direct=y data=${tblLoad}.dat >> ${tblLoad}.log 2>&1 &
Process_ID=$!
echo "${Process_ID}"
if [[ -z ${Process_ID} ]]; then
echo "Process Running";
fi
zcat ${tblLoad}.csv.Z > ${tblLoad}.dat
if [[ $? -ne 0 ]]
then return 1
fi

0 个答案:

没有答案