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

ant*_*_ml 5 oracle oracle11gr2 sql-loader

我有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
Run Code Online (Sandbox Code Playgroud)

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

Den*_*nis 3

外部表和SQL*Loader的记录解析非常相似,因此通常情况下,相同的记录格式不会有太大的性能差异。但是,\n外部表在以下情况下可能更合适:

\n\n
    \n
  • 您希望在将数据加载到数据库时对其进行转换。
  • \n
  • 您想要加载数据,并且需要对临时表进行额外的索引。
  • \n
  • 您希望使用透明的并行处理,而不必先拆分外部数据。
  • \n
\n\n

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

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

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

\n\n
    \n
  • 在加载过程中,加载表上没有任何索引和/或约束(主键)\n
  • \n
  • 在命令行中添加以下选项:DIRECT=TRUE。这将通过使用直接路径加载器而不是传统的路径加载器来绕过大部分 RDBMS 处理。但是,在某些情况下,\n您可以\xe2\x80\x99t 使用直接加载。这些限制可以从\nOracle Server Utilities Guide 获取
  • \n
  • 使用固定宽度数据而不是分隔数据。对于分隔数据,需要扫描每条记录的分隔符
  • \n
  • 尽量避免字符集转换,因为转换需要大量时间和 CPU \n
  • \n
  • 对于常规路径,请使用 READSIZE 和 BINDSIZE 参数。
    \nREADSIZE 将在每次读取系统调用时获取更大的数据块。\nBINDSIZE 参数指定绑定数组的大小,而该数组又\n指定每批加载的行数
  • \n
\n\n

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

\n