加载到oracle的备选方案

加载到oracle的备选方案,oracle,Oracle,我正在考虑将大量数据加载到我的oracle数据库中 传入的数据类似于CSV,只需稍加解析即可转换为CSV 加载过程中可能会拒绝某些行,但我不希望其他插入回滚 我正在考虑以下方法之一: 使用sqlloader 使用 使用存储过程 有人能给我指出每个方法的优点和缺点吗?也许建议我考虑其他的替代方案? 谢谢 编辑: 对不起,我应该澄清一下。我打算创建一个外部表,然后选择进入数据库。我的理解是,对于大量类似CSV的数据,这是一种很好的方法。我会使用外部表方法 请参见我已经编写了Perl脚本来实现这一点,

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

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

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

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

  • 使用sqlloader
  • 使用
  • 使用存储过程
  • 有人能给我指出每个方法的优点和缺点吗?也许建议我考虑其他的替代方案?

    谢谢

    编辑:


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

    我会使用外部表方法


    请参见

    我已经编写了Perl脚本来实现这一点,并使用了SQLldr


    我想说的是,如果您可以访问机器本身,并且您的CSV中没有复杂的内容(CSV可能会很麻烦),那么就使用sqlldr。花时间计算控制文件是值得的,因为它速度很快,而且它一定会出现在您遇到的每个Oracle框中。

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

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


    简短回答:如果使用“where”子句查询此表,请使用sqlloader生成一个表。如果没有,请尝试这两种方法并评估性能。

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


    如果选择SQL加载器方法,则可以使用它自动执行任务,而不是手动创建表和控制文件。

    使用SQL*加载器而不是外部表的唯一原因是:

  • 如果我无法从服务器访问数据文件(例如,即使使用预处理脚本从ftp站点获取数据文件)
  • 如果外部表有阻止它的限制(例如无法加载流格式的文件)
  • 外部表更易于使用,更灵活(加载、合并、预处理脚本等过程中的多表插入、连接和/或聚合),而且是更好的体验。并行DML也比SQL*加载器简单得多