最近在做项目的时候需要每天将一个SQLSERVER表中数据导入到ORACLE的一张表中,这个程序是每天临晨2点执行的.首先说明一下,SQLSERVER表中的数据有一万多条,而且每天都有增加.由于两张表分属不同的数据库,所以就用JAVA写了方法,先将SQLSERVER表中数据读出来写如到一个LIST中,然后再通过FOR循环遍历这个LIST,在FOR循环中执行ORACLE的INSERT语句,将数据写入到ORACLE的一张表中.虽然数据量不是特别大,但是执行了一万多遍这个循环,最后数据没有导完就内存溢出了.估计是这个循环太大了,不知道有没有好的方法.

解决方案 »

  1.   

    可以分页从sqlserver中取出数据(肯定会有一定规则的),然后进行插入oracle的操作。
      

  2.   

    sqlserver好像提供了这样的迁移工具
      

  3.   

    如果要从程序中处理,可以考虑在SQL Server数据库的表中增加创建日期和修改日期,当天创建的和当天修改的数据才需要同步到Oracle中,那么没有改变的数据不需要处理(当然前提是运行这样的程序前先将所有的数据导入到Oracle,Sql Server也自带这样的工具的。)
      

  4.   

    sqlserver 的 transformation 工具很好用的。
      

  5.   

    程序循环中间commit一下就没问题了,每1000条commit一次就ok。
    内存溢出可能是你java的代码有问题,看是否是对象建立的太多了?
      

  6.   

    我觉得用sql server的DTS直接导入ORACLE就可以了,然后做个任务定时执行
      

  7.   

    不同数据库之间用etl来抽取处理。