说明:简单计算sqlldr的使用规则
控制文件:input.ctl,内容如下: load data --1、控制文件标识 infile 'test.txt' --2、要输入的数据文件名为test.txt append into table test --3、向表test中追加记录 fields terminated by X'09' --4、字段终止于X'09',是一个制表符(TAB),可以按照自己喜欢的来加于区分 (id,username,password,sj) -----定义列对应顺序 其中append为数据装载方式,还有其他选项: a、insert,为缺省方式,在数据装载开始时要求表为空 b、append,在表中追加新记录 c、replace,删除旧记录,替换成新装载的记录 d、truncate,同上 注意:当加载大量数据时(大约超过10GB),最好抑制日志的产生: SQL>ALTER TABLE RESULTXT nologging; 这样不产生REDO LOG,可以提高效率。然后在CONTROL文件中load data上面 加一行:unrecoverable 此选项必须要与DIRECT共同应用。 |
windx下:(一个完整测试成功的例题) 1.修改temp.ctl文件,将需要导入的号码写入文件中,文件格式(文件另存为编码要是ASNI)如下 LOAD DATA INFILE * INTO TABLE T_TEMP REPLACE FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (MOBILE) BEGINDATA 13050543564 --注释:这是需要插入数据的记录,但每行最后不要留空格 13050543575
2.将文件temp.ctl拷贝到C:盘根目录下,在Windows命令行模式下执行如下语句: sqlldr userid=lnltcproduct/lnltcproductpass@lnlt control='C:/temp.ctl' |
linux下:(一个完整部署成功的例题) --说明:插入t_spm_bill_info_temp_SMS表,通过文件load_SMS.ctl进行加载,同时对插入的数据 进行判断符合条件的处理 [root@caiwu gejun]# cat update_loadctl_SMS.sh #!/bin/sh #使用于SQLLoader的部署文件 echo "LOAD DATA">/data/gejun/load_SMS.ctl echo "INFILE '/data/gejun/t_temp_`date -d '2 days ago' +%Y%m%d`_SMS.cvs'">>/data/gejun/load_SMS.ctl echo "APPEND INTO TABLE t_spm_bill_info_temp_SMS">>/data/gejun/load_SMS.ctl echo "FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '/"'">>/data/gejun/load_SMS.ctl echo "(SRC_TERMINAL_ID,DEST_TERMINAL_ID,SEND_TIME)">>/data/gejun/load_SMS.ctl #oracle sqlldr的环境变量配置 #SQLLoader的执行 exec sqlldr userid=cplatformdata/cplatformdata@orc3 control='/data/gejun/load_SMS.ctl' #处理临时表和插入陕西当月数据表,主要是处理根据不同月份插入不同月份表里 echo "insert into t_spm_bill_info_`date "+%m"`17 t(SRC_TERMINAL_ID,DEST_TERMINAL_ID, SEND_TIME,MESSAGE_TYPE) select temp.src_terminal_id,temp.dest_terminal_id,temp.send_time,'SMS' from t_spm_bill_info_temp_SMS temp,sx_n_t_s_segment segs where substr(temp.src_terminal_id,1,7)=segs.segment_code;">sx_number.sql echo "commit;">>sx_number.sql echo "truncate table t_spm_bill_info_temp_SMS;">>sx_number.sql su - oracle -c "/data/gejun/sx_number.sql >>back222.log"
[root@caiwu gejun]# cat sx_exec.sh #邮件下发 #!/bin/sh today=sx_exec_`date +%Y%m%d` now_time=`date +%Y-%m-%d-%T` sx_dir=/data/gejun log=$sx_dir/sx_exec.log sx_mail=" xxx@xxx" echo -e "****************************************$now_time******************************" sqlplus 'scott/tiger'<<! set timing on set serveroutput on set head off spool $log @ $sx_dir/sx_number.sql spool off exit ! mail $sx_mail -s $today'插入处理后的陕西当月表,清空sx_number_11_temp表的运行信息'<$log end_time=`date +%Y-%m-%d-%T` echo -e "*********************************结束脚本 $end_time***************************" --##说明:在执行SQLLder的目录下会产生load_MMS.log 和t_temp_`date -d '2 days ago' +%Y%m%d`_SMS.bad文件 分别说明.log是记录各个运行情况,而.bad是记录没有插入成功的记录情况 |
###版权-----found2008 ------邮箱:[email protected]