Oracle 11gR2加载多个文件:sqlldr还是外部表?

时间:2012-01-01 16:19:49

标签: oracle sql-loader oracle11gr2

我有471个文件,总计约100GB。这些文件是“\ t”分开的,交易数据采用以下格式:

char(10) not null,
char(8) not null,
char(1) not null,
char(4) not null,
number not null,
char(1) not null,
char(1) not null,
char(1) not null,
number not null

文件中事务的顺序很重要,需要保留,理想情况下使用主键ID。最初,我用sqlldr加载这些文件但是需要很长时间。我最近了解了外部表格。从战略角度看,哪种方法更好?外部表如何工作?谢谢。

1 个答案:

答案 0 :(得分:3)

外部表和SQL * Loader的记录解析非常相似,所以通常情况下 在相同的记录格式中没有重大的性能差异。然而, 在以下情况下,外部表可能更合适:

  • 您希望在数据加载到数据库时对其进行转换。
  • 您希望加载数据,并且需要对登台表进行其他索引。
  • 您希望使用透明并行处理,而无需先拆分外部数据。

但是,在以下情况下,请使用SQL * Loader获得最佳负载性能:

  • 您想远程加载数据。
  • 数据不需要转换,并且不需要并行加载数据。

为了提高SQL * Loader的性能,我们提出了以下建议。

  • 您的负载上没有任何索引和/或约束(主键) 加载过程中的表格
  • 在命令行中添加以下选项:DIRECT = TRUE。这将 通过使用直接路径加载器绕过大多数RDBMS处理 而不是传统的路径加载器。但是,有一些情况 当你不能使用直接负载。这些限制可以从中获得 Oracle Server实用程序指南
  • 使用固定宽度数据而不是分隔数据。对于分隔数据,每个 记录需要扫描分隔符
  • 尽量避免字符集转换,因为转换既是时间又是cpu 密集
  • 对于传统路径,请使用READSIZE和BINDSIZE参数 READSIZE将在每次读取系统调用时获取更大的数据块。该 BINDSIZE参数指定绑定数组的大小,而后者依次指定绑定数组的大小 指定每批将加载的行数

来源:http://download.oracle.com/otndocs/products/database/enterprise_edition/utilities/pdf/sql_loader_faq.pdf