什么是更高效的INSERT命令或SQL Loader进行批量上传 - ORACLE 11g R2

时间:2014-01-11 06:27:51

标签: sql oracle sql-loader oracle11gr2

作为新流程要求的一部分,我们将创建表格,其中包含大约3000 - 4000条记录。我们在txt文件上以纯文本形式提供这些记录的副本。

在表格中加载这些记录给我留下了两个选择

  1. 使用shell脚本生成包含这些记录的INSERT语句的SQL文件

    • 使用awk,shell变量和循环来创建这个sql的sql和脚本执行,我们可以轻松执行
  2. 使用SQL Loader。

    • 重新记录记录列表和ctl文件生成唯一依赖。
  3. 在占用数据库资源方面,以上两个选项中的哪一个最有效率,在要执行此操作的客户端服务器上的利用率。

    我确实知道记录的数量相当少,但我们可能不得不用更多的记录(接近60,000)重复此活动,在这种情况下,我希望从一开始就配置最好的选项。

3 个答案:

答案 0 :(得分:4)

SQL*Loader是更有效的方法。它为您提供更多控制。您可以选择执行DIRECT加载和NOLOGGING,这将减少重做日志的生成,并且当禁用索引时(作为直接加载的一部分),加载会更快。缺点是,如果负载中断,则索引保留为unusable

但是,考虑到优势,SQL*Loader是最好的方法。当你拥有数百万条记录并且并行运行如此多的加载作业时,你会感受到不同之处。我听到DBA抱怨日志大小,当我们进行CONVENTIONAL INSERT语句加载时,有200多个此类作业并行运行。数据量越大,您在性能上看到的差异就越大。

答案 1 :(得分:2)

SQL * Loader比数千个单独的INSERT语句更有效。但即使有60,000行,这两种方法都应该在几秒钟内完成。

答案 2 :(得分:2)

在您提到的两个选项中,SQL * Loader绝对是最佳选择 - 更快,更高效。

但是,我会选择另一种方法 - external tables。拥有SQL * Loader的所有好处,并允许您将外部csv文件视为普通数据库表。