我正在考虑将大量数据加载到我的oracle数据库中。
传入的数据类似于CSV,可以通过一些解析将其转换为CSV。
在加载过程中,可能会拒绝某些行,但我不希望其他插入回滚。
我正在考虑下列办法之一:
有人能为我指出每一种方法的优缺点,并提出其他我应该考虑的选择吗?
谢谢。
编辑:
对不起,应该澄清2。我打算创建一个外部表,然后选择到数据库中。我的理解是,对于大量类似CSV的数据,这是一种很好的方法吗?
发布于 2013-04-30 21:14:23
我使用SQL*Loader而不是外部表的唯一原因是:
外部表更容易使用,更灵活(在加载、合并、预处理脚本等过程中,多表插入、连接和/或聚合),只是有了更好的体验。并行DML也比SQL*Loader简单得多。
发布于 2009-07-07 04:58:37
为此,我编写了Perl脚本,并使用了SQLldr。
我想说的是,如果您能够访问机器本身,并且您没有复杂的CSV (CSV可能是一个痛苦),那么使用sqlldr。花时间处理控制文件是值得的,因为它速度快,并且一定会出现在您遇到的每个Oracle框上。
发布于 2009-07-07 17:24:14
这实际上取决于您在Oracle中使用数据后要做什么。如果您要频繁地查询它,那么使用sql加载程序将更有效。通过将数据导入普通Oracle表,您可以添加索引、主键等。另外,由于数据是由Oracle管理的,所以性能可能会更好,因为数据被组织成一个更严格定义的结构。
当您不频繁地在一组外部数据上查询数据时,外部表是非常方便的。它省去了复制存储(文件和oracle表空间)和/或等待sqlloader完成批处理作业的麻烦。但是,我通常会将它们用于完整的表读取,因为Oracle无法找到特定的行。
简单回答:如果您使用"where“子句查询此表,请使用sqlloader创建一个表。如果没有,尝试这两种方法并评估性能。
https://stackoverflow.com/questions/1089674
复制相似问题