前一阵公司CDM软件的短信模块要改善数据导出速度,简单的说就是给出一个sql查询并将这个查询的结果导出到客户端机器的磁盘上.
说到这个功能我第一个想到的就是plsql developer自带的文本导出功能.虽然功能上完全满足,不过由于短信业务的数据需求特别大,50W数据导出的情况也经常发生,显然plsql developer文本导出速度是个瓶颈,50W大约5~10分钟左右.
网上查了下,无非两种办法一种是spool,另外一种是利用Utl_file包.spool的速度和plsql developer相比没有什么优势故不考虑.Utl_file包速度倒是不错,50W导出成csv也就1分钟吧,可是偏偏有个硬伤,导出的文件只能是在服务器的硬盘.如果是这样还得花时间把数据从服务器转移到客户端,显然安全性也是个问题.
没办法继续google,baidu.突然有一篇文件的名字吸引了我 "Pro*C实现导出Oracle表为文本文件",迫不及待的打开查看.原来是某个作者也遇到和我一样的情况,不过他似乎幸运点,求助了Tom,Tom给了他一段pro*C的实现源码,轻松搞定.速度快到30分钟导出7GB.NND居然这么快.可惜本人pro*C菜鸟水平,写这么个东西实在耗时.等以后慢慢研究.
再次google,整整找了3个小时,依然无果,就在我要绝望的时候,幸运女神再次眷顾了我.搜到了一个叫ociuldr的软件,仔细看了下介绍发现原来还有个升级版本 sqluldr,是个控制台程序,下载使用了下,哇! 超级强大,50W数据导出7秒.而且可以设置的属性也比较丰富,瞅了下软件作者名字.居然是anysql,itpub名是d.b.c.a.牛人就是牛人,赶紧Orz.用了别人的东西当然也得给别人广告下:http://www.anysql.net/product 这个是他的产品中心,多数都是免费使用的,确实不错.
折腾了那么久终于有了收获,立刻将sqluldr集成到CDM软件测试了下.效果相当好,10W以下的数据眨下眼睛就出来了.哈哈,连进度条都不用做了.
通过这次的经历,也让我渐渐对oci和pro*C编程产生了浓厚的兴趣. 继续学吧,前面的路还很长...
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22134244/viewspace-1024294/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22134244/viewspace-1024294/