我在Oracle中有一个ETL,用于转换数据并使用INSERT INTO将它们发送到数据库DB2上。对于行数较少的表没有问题,但对于两个表有400000行的表,存在问题。
插入操作非常慢,平均每秒50/60行。我怀疑在DB2中每行都有自动提交。
当最后一个循环结束时,程序继续执行无限时间。如果我终止执行,则所有行都在DB2 DB中正确写入。然后,如果我尝试从oracle,SQL Dev上运行Db2上的select,它会告诉我连接已关闭。
我很抱歉我的英语,我希望你帮助我。
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但不能正常工作
答案 0 :(得分:0)
如果要在DB2数据库中插入大量行,可以使用load command。
此命令将CSV文件中的数据加载到数据库中,这正是您在这种情况下所需要的。但是,您需要首先从Oracle数据库中以适当的格式导出数据。