【问题标题】:Will a bulk loader preserve order of rows while inserting大容量加载器在插入时会保留行的顺序吗
【发布时间】:2014-06-13 06:43:03
【问题描述】:

如果我使用 sql 批量加载器将 10 000 行从平面文件加载到 oracle 数据库中,这些行是否会按照它们在文件中出现的顺序插入?例如,假设有一个唯一的键列,每插入一行就会自动递增 1。

所以我可以预测文件中的第一行将成为数据库中的第一行(也就是该列的值为 1)

【问题讨论】:

  • 最好的方法是尝试一下。但我已经体验过被保存的顺序。

标签: oracle sql-loader bulk-load


【解决方案1】:

“sql bulk loader”是指“SQL*Loader”吗?还是外部表?或者其他一些用于进行批量数据加载的技术(即 Toad 的导入机制或 SQL Developer 的导入机制)?

最终得到“乱序”数据的最简单方法是并行处理批量加载。这就是外部表如此有用的原因之一——您可以轻松地specify a degree of parallelism 进行负载(当然,考虑到一些限制),这样您的大负载就可以更快地运行。其他批量加载工具可能具有类似的选项,或者它们可能总是在单个会话中进行加载。如果加载是在单个会话中完成的,那么该工具很可能会按顺序从文件中读取数据并按顺序插入。

【讨论】:

  • 只是添加到您的语句中,并行加载意味着同时运行多个 sql 加载器实例,而加载必须始终是附加的。订单不同步是很自然的。
  • @OracleUser - 这就是 SQLLoader 使用的方法。外部表可以通过自动将大型数据文件拆分为多个块来并行加载,而无需人工运行多个 SQLLoader 实例。这就是外部表更强大的原因之一。
  • 是的,justin,但是我有一种感觉,ORACLE_LOADER是从sqlloader派生的?!只是它为开发人员增强了。
  • @OracleUser - 当然,外部表是在 SQLLoader 之上构建的。而且,当然,它只是在 SQLLoader 之上添加了额外的功能。在这种情况下,它增加了并行运行负载的能力,而无需手动启动一堆 SQL*Loader 实例。
【解决方案2】:

您不能依赖加载顺序与源文件顺序保持一致。当一些样品以这种方式结束时,不要被愚弄,这并不能保证。

【讨论】:

  • 对理论解释的引用可能非常有用。!虽然我不会相信订单保存。在我几乎所有的情况下,订单都得到了保留。也有巨大的记录。还没有研究很多。尤其是废弃文件和坏文件,总是有相同的顺序!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 2020-01-16
  • 2013-07-13
  • 2010-10-14
  • 2012-12-12
  • 1970-01-01
相关资源
最近更新 更多