使用SQLLDR导入日志

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,'-')",

你可能感兴趣的:(oracle,jsp,linux,.net,bash)