sh脚本如下,其中使用到了 sqlloader控制文件(此文件在下方展示)
echo "begin"
source /etc/profile
#export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
YYYY=`date "+%Y"`
MM=`date "+%m"`
DD=`date "+%d"`
day_get_file="*$YYYY$MM$DD.tar.gz"
echo "$day_get_file"
#压缩文件名称
GZ_DL="szyxt_dl_day_$YYYY$MM$DD*.tar.gz"
#解压之后生成的csv文件名称
DL="szyxt_dl_day_$YYYY$MM$DD.csv"
echo "$DL"
#对应的sqlloader ctl文件名称
CTL_DL="JF_DL.ctl"
#定义当前sh文件存放位置为basepath
basepath=$(cd `dirname $0`; pwd)
#cd 到此目录
cd $basepath
#删除当前目录下所有的 txt 和gz 格式的文件
rm *.csv *.gz -f
#登录ftp 获取文件
ftp -inv 127.0.0.1 <<EOF
user username password
bin
lcd $basepath
cd 文件存放路径
mget $day_get_file
bye
EOF
echo "cat tar file."
cat $GZ_DL |tar xz
echo "tar over."
sqlldr dbuser/dbpwd@servername control=$CTL_DL data=$DL direct=true rows=1000 errors=1000 skip=0
#run sqlplus exec procedure
sqlplus dbuser/dbpwd@servername <<EOF
set echo on
set timing on
set time on
exec 存储过程名;
quit
EOF
find *.txt -mtime +2 -exec rm -f {} \;
find *.gz -mtime +2 -exec rm -f {} \;
find *.log -mtime +2 -exec rm -f {} \;
find *.bad -mtime +2 -exec rm -f {} \
echo "end"
sqlloader控制文件JF_DL.ctl如下
-- SQL Loader Control and Data File created by TOAD
-- Variable length, terminated enclosed data formatting
--
-- The format for executing this file with SQL Loader is:
-- SQLLDR control=<filename> Be sure to substitute your
-- version of SQL LOADER and the filename for this file.
--
-- Note: Nested table datatypes are not supported here and
-- will be exported as nulls.
LOAD DATA
CHARACTERSET 'UTF8' --指定csv 文件编码格式,方式入库乱码
TRUNCATE INTO TABLE JF_DL --使用 truncate 方式入库:还可以append
Fields terminated by "#DELIM#" --字段分隔符是 #DELIM#
TRAILING NULLCOLS
(
MONTH_ID,
DAY_ID date "yyyy-mm-dd hh24:mi:ss", --日期类型需要指定格式
DEVICE_NUMBER,
FW_LEVEL char(1000), --sqlloader文本长度默认是255的如果超过255 需要手动指定长度
CUST_NO,
CUST_NAME,
USER_NO,
ACCT_NO,
GROUP_ID,
TOTAL_FEE,
CALLING_TYPE,
DISCNT_CODE,
DISCNT_NAME
)
在服务器上 编辑crontab 设置定时任务即可完成定时执行
crontab -e
00 00 * * * sh /test/download.sh >/test/run.log #每天0点执行sh 并输出日志到 run.log
本文介绍了一个使用sh脚本结合SQLLoader实现从FTP下载文件、解压、转换CSV并自动化批量导入Oracle数据库的过程。该脚本还包含了定时任务的设置方法。

被折叠的 条评论
为什么被折叠?



