从oracle到DB2的流的ETL问题

时间:2015-04-24 07:02:11

标签: oracle db2

我在Oracle中有一个ETL,用于转换数据并使用INSERT INTO将它们发送到数据库DB2上。对于行数较少的表没有问题,但对于两个表有400000行的表,存在问题。

  1. 插入操作非常慢,平均每秒50/60行。我怀疑在DB2中每行都有自动提交。

  2. 当最后一个循环结束时,程序继续执行无限时间。如果我终止执行,则所有行都在DB2 DB中正确写入。然后,如果我尝试从oracle,SQL Dev上运行Db2上的select,它会告诉我连接已关闭。

  3. 我很抱歉我的英语,我希望你帮助我。

    DECLARE
      V_MIN                NUMBER := 1;
      V_MAX                NUMBER := 40000;
      ....
    BEGIN
      BEGIN
        DELETE FROM DB2C.TABLE_DEST@RELMANAG;
        COMMIT;
      EXCEPTION
        WHEN OTHERS THEN
        dbms_output.put_line(sqlerrm);
      END;
    
     SELECT COUNT(*)
     INTO V_CONT_ORCL_FS
     FROM TABLE_ORIGIN;
    
     WHILE V_MIN <= v_cont_orcl_fs  LOOP
       FOR I IN
      (query_Cursor on TABLE_ORIGIN    )
      LOOP
        insert into ....
        EXCEPTION
        WHEN OTHERS THEN
          ROLLBACK;
          DBMS_OUTPUT.PUT_LINE(SQLERRM);
        END;
      END LOOP; --FOR
      V_MIN  := V_MAX + 1;
      V_MAX := V_MAX + 40000;
    
    
     END LOOP; --WHILE
     COMMIT;
    END;
    

    我可以尝试在SQL * PLUS上使用COPY但不能正常工作

1 个答案:

答案 0 :(得分:0)

如果要在DB2数据库中插入大量行,可以使用load command

此命令将CSV文件中的数据加载到数据库中,这正是您在这种情况下所需要的。但是,您需要首先从Oracle数据库中以适当的格式导出数据。