通过sh脚本从ftp获取数据并sqlloader入库

本文介绍了一个使用sh脚本结合SQLLoader实现从FTP下载文件、解压、转换CSV并自动化批量导入Oracle数据库的过程。该脚本还包含了定时任务的设置方法。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值