如何在Oracle中批量插入

时间:2014-07-03 06:46:21

标签: sql database oracle

我必须将大量数据从一个数据库实例加载到其他数据库实例,要求仅使用DBlink。

使用SQLLDR我能够实现每秒200K记录的速度,并希望使用DBLink复制相同的内容。

使用直接路径插入(追加提示)每秒最多可提供40k条记录。 但由于插入直接路径获取表级别,我无法打开多个会话以将其扩展到200K。

由于常规插入非常慢,我可能需要打开30到40个会话才能满足所需的速度。有没有办法在同一个表中实现并行直接路径插入?还是有其他方法或数据库调整哪个可以帮助我增加每秒的插入次数?

注意:我已经尝试过分区表,但锁仍然在桌面而不在分区上。

1 个答案:

答案 0 :(得分:2)

我通过使用insert append with partition子句找到了解决方案。 如果insert子句包含分区信息,则锁定在分区而不在表上。

写了一下这样的查询:

将/ * + append * /插入目标分区(ptnName)select * from source @ dblink where(partition filtering condition)。

我在目标表中创建了8个分区,并启动了8个会话以加载到各个分区。它让我获得了与SQLLDR速度相匹配的性能。