数据预先准备好,使用SQLLDR工具,你的要求就可以实现了。

解决方案 »

  1.   

    从数据量,及效率角度来说,进行数据库的合理优化,或者提高数据库机器配置就可以了
    首先数据库需要作优化,比如增加回滚段使用数组插入,vb/ado应该可以实现以时间作为分区条件,建立表分区,使用bitmap索引,提高大数据量的插入及查询
    避免重建索引
      

  2.   

    用sql loader
    我们现在做到了每分钟插入100万条纪录,份为12个streams
      

  3.   

    那么如何从program中启动sql loader呢?
      

  4.   

    通常大量数据的倒入是以批处理方式进行的,最容易的方式是使用操作的shell scripts来处理,比如在windows架构下可以用dos的批命令,大致的过程如下:
    1、准备数据,通常是平板文件
    2、在操作系统下直接调用SQLLDR,并把结果送到LOG文件中
    3、检察LOG文件中是否有错误,通常是通过搜索错误字符串(ORA-)的方式,UNIX下用GREP命令非常方便,DOS下自己编一个小程序来处理也不难。
    4、如果发现错误,给维护者发出警报,可以通过MAIL或者在数据库中做纪录。
      

  5.   

    sqlldr只是一种数组插入的方式而已
    sqlldr是使用array->stream->数据库 的方式来插入使用oci调用sqlldr相关函数,
    去除一些不必要的功能,你的程序会比sqlldr还快
      

  6.   

    大数据量的入库,用SQLLDR最好
      

  7.   

    利用SQLLOADER肯定没错,专为大批量插入来做的!
      

  8.   

    我觉得,这个问题,主要在于考虑性能的问题,因为数据库导入的这个程序,会定时地操作数据库,所以频度和数据量就是个要重点考虑的问题了。所以我觉得,应该有一个Service Server来处理数据插入的请求,这个Service server应该提供:
    1 接受模块:接受客户端的数据(以一定的格式),接受好了,马上存入消息对列中,并且通知客户端,ok。注意,并不要马上就去操作数据库。这是接受模块的主要工作。
    2 数据库存储:负责从对列中取出数据,并且插入数据库中,并且尽可能的协调资源争用。客户端程序,负责从那个时时系统中获得数据,并且加工,同服务通讯。接收数据的模块,应该可以是个一个多线程的应用,可以提高并发性。而数据库操作模块,应该保持一个线程,这样,会少很多争用资源的情况。在具体实现上,Web Service是一种选择,.net和WebLogic,Oracle Application Server等都可以快速构建Web Service;当然,自己开发一个也可以,就是要做很多工作。
    应用队列系统的好处,可以有效地协调响应,速度上可以提高很多。最重要的,“存储再处理”的原则,可以提高系统的可靠性,如果写数据库正好失败可以再作;系统突然断电,重启后,数据还在队列系统中。我的个人想法,欢迎大家讨论,指正。