大家好,本人现在某公司做ods项目,有个难题请大家帮帮忙想想办法:目前要从某个系统采集数据入库,采用的是比较落后的方式:对方系统定时产生快照,都是文本文件,各字段值都是逗号分隔,每个文件大约10000条数据,每条记录有80个字段,每天产生的文件近50000个,文件都放在结果集上。现在要做的是将每天生成的文件当天入库。之前的测试:
在结果集服务器上装oracle,用utl_file读取外部文件,一天只能入大约1/4的数据;用sql*loader定时入库,一天大约能入1/2数据。
两者都远远无法达到效果。麻烦大家帮忙想想办法,有什么途径能达到效果。急用!多谢各位

解决方案 »

  1.   

    写个pro*c的程序。采用/*append*/进行导入。应该可以。
      

  2.   

    如果只说SQLLDR,有直接加载 + 并行的方式,转一些说明
    -----------------------------------------------------
    一般来说加载的时候,加载的时候parallel 与direct的参数是一块用的,
    Oracle声称此技术有100GB/小时的处理能力,direct 的参数是直接进行加载,
    它必须在服务器端进行操作,在客户端操作不行,我曾经作过系统的测试,在客户端加载大概
    400多万条的数据,通过普通的加载大概要1个多小时,在服务器端的加载只要3分钟作用,这个
    仅供参考.它与普通加载不同的地方是用直接路径加载,sql*loader收集数据,然后把内存中的数据
    格式化为数据库表中保存的数据,可以说直接从内存到磁盘的操作,比其常规的加载技术消耗的资源更少,
    时间更少.同时加载的时候,表中不能有主键,同时也不能有表中的约束条件,在直接加载的过程中对此不作这类的检查.另外,上面有说到文件数量很多5W,一个文件的记录数反倒不是很多,才1W。
    理解下来,是实时吐数 + 实时取数入库的方式吧。 小数据量 + 大并发数(文件源超多),对SQLLDR来说,不是理想的环境啊,大数据量加载才能体现出SQLLDR性能的。加载数据的性能优先、还是实时数据优先,两者取其重。
    建议,将一定时段内的文件汇总(最好的方式由供数方调整),1小时吐一次,变2小时吐一次,尽可能将文件数量降下来,才是提高SQLLDR性能的正道。
      

  3.   

    顶,我们项目加载数据都是用的sqlldr导入的,使用direct参数,速度还可以
      

  4.   

    direct 和parallel之前也测过,效果不尽如人意