unix linux windows 下的sqlldr使用及crontab部署和下发邮件

28 篇文章 0 订阅
10 篇文章 0 订阅

 

1.1         sqlldr使用

说明:简单计算sqlldr的使用规则

1.     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为数据装载方式,还有其他选项:

             ainsert,为缺省方式,在数据装载开始时要求表为空

             bappend,在表中追加新记录

             creplace,删除旧记录,替换成新装载的记录

             dtruncate,同上

注意:当加载大量数据时(大约超过10GB),最好抑制日志的产生:

 SQL>ALTER   TABLE   RESULTXT   nologging;   

  这样不产生REDO LOG,可以提高效率。然后在CONTROL文件中load data上面

  加一行:unrecoverable     此选项必须要与DIRECT共同应用。

2.     windows测试

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'

3.     unix测试

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的环境变量配置
ORACLE_BASE=/home/oracle/app/oracle
ORACLE_HOME=/home/oracle/app/oracle/product/9.2.0
ORACLE_SID=orc3
PATH=$PATH:$ORACLE_HOME/bin:/usr/local/bin:$ORACLE_HOME/bin
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH

#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 ------邮箱:hiho1128@126.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值