Linux中Sqlldr自动导入并更新数据

需求:定时将上月的数据导入到oracle中,并更新指定的列。

原理:利用oracle中的sqlldrLinux的定时任务crontab实现

 

步骤:

1.       文件命名约定。

由于要实现自动的导入,文件的命名要有一定的规则。要导入的数据文件名为filename+year+month   如: filename201401.txt

 

2.       数据文件内容

180000122     2014-1-4 16:05:53

180000123     2014-1-4 18:53:20

 

3.       编写sqlldr的控制文件

 load data

 infile test_tab201312.txt

append into table TEST_TAB

fields terminated by   X'09'

TRAILING NULLCOLS

(CALLNUM,STARTEDAT)

 

4.       编写脚本实现数据的导入

 #!/bin/bash

 

#  获取上两个月的年份和月份格式如:201312

v_oldfile_name=`date -d '-2 month' +%Y%m`

 

#  获取上一个月的年份和月份格式如:201401

v_file_name=`date -d '-1 month' +%Y%m`

 

# 替换sqlldr控制文件中要导入的文件名

sed -i "s/$v_oldfile_name/$v_file_name/" test_tab.ctl

 

# sqlldr导入数据,并更新

sqlplus scoot/tiger  <

 

select  count(1)  from test_tab;

 

! sqlldr  scott/tiger  control=test_tab.ctl   errors=1 rows=1000 readsize=33554432 bindsize=33554432

 

update test_tab set  sdate= trunc(startedat)  where sdate is null ;

 

commit;

analyze  table test_tab  compute statistics; 

select sysdate from dual;

exit;

EOF

 

5.       将以上脚本保存,并加入到crontab中即可。

你可能感兴趣的:(Linux中Sqlldr自动导入并更新数据)