【问题标题】:External table limitations外部表限制
【发布时间】:2015-12-10 07:56:15
【问题描述】:

现在我正在处理外部表...虽然我喜欢它的灵活性。我想知道关于外部表的这些事情-

  1. 就像在 SQL Loader 中一样,我们可以将数据附加到表中。我们可以在外部表中这样做吗?

  2. 在外部表中,我们不能创建索引,也不能执行 DML 操作。是这种虚拟表还是这种在数据库中占用空间?

  3. 此外,在 SQL 加载器中,我们可以从我们定义默认目录的外部表中的任何服务器访问数据。我们可以反过来在从任何服务器访问数据的外部表中做同样的事情吗?

【问题讨论】:

  • "同样在 SQL 加载器中,我们可以从任何服务器访问数据" 不。SQL*Loader 驻留在您的客户端上,而外部表驻留在服务器上。
  • 好的@LalitKumarB。谢谢指正:)

标签: oracle sql-loader external-tables


【解决方案1】:

外部表允许 Oracle 查询存储在数据库外部的平面文件中的数据,就好像该文件是 Oracle 表一样。

ORACLE_LOADER 驱动程序可用于访问以 SQL*Loader 可以加载的任何格式存储的任何数据。不能对外部表执行 DML,但它们可用于查询、连接和排序操作。可以针对外部表创建视图和同义词。它们在数据仓库的 ETL 过程中很有用,因为数据不需要暂存并且可以并行查询。它们不应该用于频繁查询的表。

你问:

  1. 就像在 SQL Loader 中一样,我们可以将数据附加到表中。我们可以在外部表中这样做吗?

是的。

  1. 在外部表中,我们不能创建索引,也不能执行 DML 操作。是这种虚拟表还是这样在数据库中获取空间?

顾名思义,它在数据库之外。您使用ORGANIZATION EXTERNAL 语法。该目录是在操作系统级别创建的。

  1. 此外,在 SQL 加载器中,我们可以从定义 DEfault 目录的外部表中的任何服务器访问数据。我们可以反过来在从任何服务器访问数据的外部表中执行相同的操作吗?

这是错误的。 SQL*Loader客户端工具,external table服务器端工具。外部表可以加载可从数据库服务器访问的文件。您无法从客户端上的文件加载外部表。您需要将文件保存到 Oracle 服务器可用的文件系统中。

在 10g 版本之前,外部表为 READ ONLYDML 无法执行。 从 Oracle 数据库 10g 版本开始,可以写入和读取外部表。

从文档中,也可以阅读Behavior Differences Between SQL*Loader and External Tables

【讨论】:

  • 嗨@lalit kumar。你如何附加到外部表中?语法?
  • @divya.trehan573 你只需要INSERT INTO ..SELECT.. FROM external_table...
  • @divya.trehan573 请将其标记为已回答,也会对其他人有所帮助!
  • Lalit 但在 sql loader 中,我们可以在 Loader 语句本身中执行此操作.....因此,每当执行控制文件时,都会附加数据。在外部表中是否可能是我的问题
  • @divya.trehan573 你弄糊涂了。很简单。外部表实际上不是数据库表,而是看起来像表的 Oracle 格式的 OS 文件。您创建一个外部表作为数据文件的副本并在其上使用直接 SQL。完成后,它是一个类似结构的临时表,而不是静态数据库表。使用 SQL*Loader,您可以将数据直接加载到静态数据库表中。从 10g 开始,可以写入和读取外部表。因此,您不必担心追加行,只需继续加载即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
相关资源
最近更新 更多