Oracle 11gR2加载多个文件: sqlldr or external tables?

标签 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 加载这些文件,但需要很长时间。我最近了解了外部表。从战略角度来看,哪种方法更好?外部表如何工作?谢谢。

最佳答案

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

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

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

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

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

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

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

关于Oracle 11gR2加载多个文件: sqlldr or external tables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8694089/

相关文章:

mysql - Oracle sqlldr - 处理输入数据集中的空值

.net - OracleBulkCopy 与 SQL*Loader 性能对比

linux - Linux 服务器上 Oracle.DataAccess.dll 文件的路径

sql - 如何在单个插入语句中执行多个 insert into..select 查询?

sql - 如何使用Oracle从firstname.lastname@email.com中提取姓氏?

oracle - 外部表与 SQLLoader

oracle - 使用 SQL/MM Still Image 将 BLOB 图像与存储为 ORDImage 的图像进行比较

Oracle 11G - 加入时未使用 PK 索引,求助于全扫描

sql - 根据查询请求生成 Oracle SQL 文件

oracle - 将 InitialLOBFetchSize 与 EntityFramework 结合使用