专题网站建站,wordpress 手机版菜单,网站正在升级建设中代码,免费优化网站需求#xff1a;每个小时前台生成一个追踪文件#xff0c;文件名格式为yyyymmddhh#xff0c;存放在linux服务器上#xff0c;要求每小时将上一个小时生成的文件导入数据库解决方案#xff1a;采用sqlldr可以快速的将外部文本文件加载到数据库中,根据要求创建控制文件和sh…需求每个小时前台生成一个追踪文件文件名格式为yyyymmddhh存放在linux服务器上要求每小时将上一个小时生成的文件导入数据库解决方案采用sqlldr可以快速的将外部文本文件加载到数据库中,根据要求创建控制文件和shell脚本其中控制文件如下[rootjustin justin]# more control.ctlload datacharacterset UTF8infile /justin/source_file.csvappend into table abcfields terminated by , OPTIONALLY ENCLOSED BY TRAILING NULLCOLS(ID sequence(MAX,1),desc char(4000),TIME DATE YYYY-MM-DD HH24:MI:SS)由于要采用直接路径加载所以必须在控制文件中就定义好字符集(需要同数据库保持一致)否则sqlldr会采用OS的字符集加载中文出现乱码;文本文件中没有主键ID需要在加载的时候就要为其生成所以采用sequence(MAX,1)函数#!/bin/bashORACLE_HOME/data/oracle/product/10205/db1export ORACLE_HOMEfolder/justin/--文件保存路径#get the past time valuedate1date --date1 hour ago %Y%m%d%Hdate2date --date15 day ago %Y%m%d%H#rename the file generated one hour ago to source_file.csv, which would be called by control.ctlmv $folder$date1 $foldersource_file.csv--因为每次加载的文件名称都不一样所以需要其重命名成一个固定的文件名字需要跟control.ctl中的保持一致#call sqlldr, with control as control.ctl$ORACLE_HOME/bin/./sqlldr useridjustin/***** control$foldercontrol.ctl readsize500000 rows2000 directtrue log$folder$date1-51#rename bad file if generatedif [ -f $foldersource_file.bad ]; thenmv $foldersource_file.bad $folder$date1-51.badfi#roll back the rename operationmv $foldersource_file.csv $folder$date1#if the file generated by 15 days ago still exist, then drop themif [ -f $folder$date2 ]; then--删除过期文件rm $folder$date2fiif [ -f $folder$date2-51.log ]; thenrm $folder$date2-51.logfiif [ -f $folder$date2-51.bad ]; thenrm $folder$date2-51.badfi最后将这个shell脚本加入至crontab设置每小时运行一次即可来自 “ ITPUB博客 ” 链接http://blog.itpub.net/15480802/viewspace-688368/如需转载请注明出处否则将追究法律责任。