背景
最近需要将Greenplum 里近3亿记录的表迁移Oracle 测试性能。通过Python里的pandas.to_csv将order订单表按日期生成碎片化CSV文件,再通过Oracle SQLLDR工具将碎片化的CSV文件导入Oracle;
- 碎片文件目录如下

SQLLDR 导入Oracle 脚本
#!/bin/sh
source /home/oracle/.bash_profile
startDate="$1"
endDate="$2"
echo "起始日期:$startDate"
echo "结束日期:$endDate"
#将日期转成秒
startDateTime=`date -d "$startDate" +%s`
endDateTime=`date -d "$endDate" +%s`
#两个日期秒数差
diff=`expr $endDateTime - $startDateTime`
#计算天数(一天24*60*60=86400秒)
diffCount=$(expr $diff/86400)
#利用相差的天数输出两个日期之间所有日期
for((i=0;i<=$[diffCount];i++))
do
# 当前日期
cDate=`date -d "$startDate $i day" +%Y-%m-%d`
# 下个日期
nDate=`date -d "$cDate 1 day" +%Y-%m-%d`
echo "SQL Load Data : $cDate" >> two.log
# sqlldr 导入
sqlldr userid=two/'two' control=/home/oracle/two/two.ctl log=/home/oracle/two/two_${cDate}.log
# 替换two.ctl 旧的日期目录
sed -i "s/$cDate/$nDate/g" two.ctl
done
SQLLDR 控制文件 :two.ctl
OPTIONS(ROWS=10000,BINDSIZE=32250000,READSIZE=322500000,skip=1) LOAD DATA CHARACTERSET UTF8 INFILE '/home/oracle/two/2023-06-01/order.csv' INTO TABLE busi_order APPEND FIELDS TERMINATED BY ';' trailing nullcols ( id char(500), create_time TIMESTAMP "YYYY-MM-DD HH24:MI:SS", update_time TIMESTAMP "YYYY-MM-DD HH24:MI:SS" 字段略...... )
调用
sh two.sh 20230601 20231231 &
感言
记录工作中的一些实用脚本,希望能给大家带来一些帮助,感觉有所帮助请关注公众号
公众号:布衣530

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




