加载到oracle的替代方案

时间:2009-07-06 23:30:20

标签: oracle

我正在考虑将大量数据加载到我的oracle数据库中。

传入的数据类似于CSV,只需稍加解析即可转换为CSV格式。

可能是某些行在加载过程中被拒绝,但我不希望其他插入回滚。

我正在考虑以下方法之一:

  1. 使用sqlloader
  2. 使用external table
  3. 使用存储过程
  4. 任何人都可以为我指出每种方法的优点/缺点,并建议我应该考虑其他任何替代方案吗?

    感谢。

    编辑:

    抱歉,应该澄清2.我打算创建一个外部表,然后选择进入数据库。我的理解是,对于大量类似CSV的数据,这是一种很好的方法吗?

5 个答案:

答案 0 :(得分:2)

我使用SQL * Loader而不是外部表的唯一原因是:

  1. 如果我无法从服务器访问数据文件(例如,使用预处理脚本从ftp站点获取数据文件),
  2. 如果外部表具有阻止它的限制(例如,无法加载流格式化文件)。
  3. 外部表更容易使用,更灵活(加载期间的多表插入,连接和/或聚合,合并,预处理脚本等),以及全面的更好的体验。并行DML也比SQL * Loader更容易

答案 1 :(得分:1)

我编写了Perl脚本来执行此操作并使用SQLldr。

我想说如果您可以访问本机并且您的CSV中没有并发症(CSV可能会很麻烦),那么请使用sqlldr。值得花时间计算控制文件,因为它很快就会出现在你遇到的每个Oracle盒子上。

答案 2 :(得分:1)

这实际上取决于您在Oracle中拥有数据后对数据执行的操作。如果您要经常查询它,使用sqlloader会更有效。通过将数据放入常规Oracle表,您可以添加索引,主键等。此外,由于数据由Oracle管理,性能可能更好,因为数据被组织成更严格定义的结构。

当您要在一组外部数据上不经常查询数据时,外部表非常方便。它省去了复制存储(文件和oracle表空间)和/或等待sqlloader完成批处理作业的麻烦。但是,我通常会将它们用于完整的表读取,因为Oracle无法找到特定的行。

简短回答:如果使用“where”子句查询此表,请使用sqlloader创建表。如果没有,请尝试两者并评估效果。

答案 3 :(得分:0)

我会使用外部表方法。

请参阅asktom

答案 4 :(得分:0)

SQL Loader和外部表方法非常相似,它们都满足您的要求,因为如果某些行被拒绝,它们不会丢弃整个数据集。

如果选择SQL Loader方法,则可以使用oracle-csv-loader自动执行任务,而不是手动创建表和控制文件。