Load data --加载数据
append into table TEST --数据表TEST
fields terminated by ':' --每行日志以“:”分隔
trailing nullcols
(----下面为表中属性
DNAME "nvl(:DNAME,'-')", --如果DNAME为null,则插入默认值“-”
MENO,
ID "SEQ_TEST.nextval" --调用序列
)
在这里需要注意:如果要使用序列,就不能加DIRECT=TRUE
执行命令:
sqlldr userid=帐号/密码@SID control=f:\test.ctl data=f:\test.log
参考链接:
http://hi.baidu.com/danghj/blog/item/393dca1baf79faddad6e75dd.html
http://topic.csdn.net/u/20090901/16/6f47eca3-169b-4ecc-9e6c-063055d9a392.html
http://wxy0327.itpub.net/post/16888/96826
http://chinapkw.iteye.com/blog/568948
========================================================20101119补充
如何定时使用shell导入数据
vi import_data.sh
内容:
. /home/oracle/.bash_profile
lastLogDate=`date -d "-1 minute" +%Y%m%d.%H.%M`
/data/oracle/10.2.0.1/bin/sqlldr userid=webtrace/webtrace@webtrace control=/data/jsp/wt.39.net/WebRoot/clt/import_data_to_db.ctl data=/data/jsp/wt.39.net/log4j/trace/base.log.$lastLogDate log=/data/oracle/info/trace_info.log.$lastLogDate bad=/data/oracle/bad/trace_bad.log.$lastLogDate
先获取上一分钟 再执行sqlldr
其中sqlldr的参数的意思是:
control为控制脚本路径
data为源数据文件路径
bad为插入失败的数据日志,用于后期重新执行插入用
log为插入执行日志
最后写个定时任务
定时任务我是在oracle用户下用crontab做
这里需要注意
1.import_data.sh和 import_data_to_db.ctl 这两个文件是在resin用户下的,那么需要chmod 755,这样oracle账户下才能执行,否则会出现无权限
2.用sh直接执行shell和在crontab直接执行shell是有区别的,由于我对shell还是入门级,问了朋友很久才知道,要在shell文件内增加oracle的环境变量
即. /home/oracle/.bash_profile 这句话,否则在执行sqlldr会报如下异常:
Message 2100 not found; No message file for product=RDBMS...... facility=UL
3.如果你不确定crontab是否有执行任务可以这么设置,
*/1 * * * * /data/jsp/xxxx/WebRoot/task/import_data_to_db.sh >/data/oracle/mc.log 2>/data/oracle/mc.err
这样如果有异常你可以到/data/oracle/mc.log这里查看
参考网址:
http://hi.baidu.com/danghj/blog/item/393dca1baf79faddad6e75dd.html
http://linjianqing.iteye.com/blog/501563
http://bbs.chinaunix.net/archiver/?tid-851346.html
http://www.lslnet.com/linux/dosc1/38/linux-277903.htm
另外在ctl控制文件中,如果要根据判断条件有选择的插入数据,
eg:
我要判断值不为空才插入
Load data
append into table TEST
WHEN DNAME != ''
fields terminated by '`'
trailing nullcols
(
ID "SEQ_TEST.nextval",
DNAME,
MENO
)
多了个when
具体的例子可看这个网址:
http://space.itpub.net/7607759/viewspace-623965
http://www.itpub.net/threadqui.php?id=3&tid=869886(3楼)
http://hi.baidu.com/danghj/blog/item/393dca1baf79faddad6e75dd.html
===============================2011-03-21==============================================
今天发现一个问题 导入数据总是有一两条发现导入不进去 报了个
Field in data file exceeds maximum length 异常
查了一下才知道原来ctl文件,默认的值长度只是255,但是我这个字段刚好是超过,郁闷,需要指定字段值的长度,如下
REFER_URL char(3000) "nvl(:REFER_URL,'-')",