0

SQL*Loader: Oracle 使用此功能,通过 ORACLE_LOADER 访问驱动程序将数据从平面文件移动到数据库中;

数据泵:它使用数据泵访问驱动程序将数据从数据库中移出到专有 Oracle 格式的文件中,然后从该格式的文件中移回数据库中。

当数据加载可由 SQL*Loader 或 Data Pump 实用程序完成,而数据卸载也可由 Data Pump 实用程序完成时:

  1. 是否有任何额外的好处可以通过使用外部表来实现,而前面提到的实用程序本身都无法做到?

  2. 下面的 Oracle 表创建命令创建了一个看起来像 Oracle 表的表。为什么Oracle告诉我们将其称为外部表?

    create table export_empl_info organization external
      ( type oracle_datapump
        default directory xtern_data_dir
        location ('empl_info_rpt.dmp')
         ) as select * from empl_info;
    
4

3 回答 3

3

“是否有任何额外的好处可以通过使用外部表来实现,而前面提到的实用程序本身都无法做到?”

SQL*loader 和 Datapump 都要求我们先将数据加载到表中,然后才能使用数据库访问它。而我们只通过 SELECT 语句访问外部表。这是一种更加灵活的机制。

“那么为什么 Oracle 告诉我们将其称为外部表?”

嗯,因为它是外部的。数据驻留在由操作系统控制的一个文件(或多个文件)中。我们可以通过运行 OS 命令来更改外部表中的数据,例如

$>  cp wnatever.csv external_table_data.csv

没有重做、回滚、闪回查询或内部数据库表的任何其他附件。

于 2013-01-27T22:26:15.590 回答
1

我认为外部表对我的主要好处是:

i) 无需执行主机命令即可导入数据,这支持 Oracle 的趋势,即从数据库内部控制整个代码。11g中的预处理允许通过ftp访问远程文件、使用压缩文件、将多个文件合二为一等

ii) 更有效的加载,通过在加载过程中应用复杂的数据转换。聚合、合并、多表插入...等

我已将它用于数据仓库加载,但任何需要加载或访问标准数据文件的场景都可以使用外部表。SQL*Loader 作为从客户端或其他主机系统加载到 Oracle 数据库的工具仍然占有一席之地。数据泵是用于Oracle数据库之间的数据传输,所以它是相当不同的。

外部表的一个限制是它们不会处理流数据——必须对记录进行分隔。这在 10.2 中是正确的,不确定从那时起是否允许这样做。

使用系统目录视图 ALL/DBA/USER_EXTERNAL_TABLES 获取有关它们的信息

于 2013-01-27T10:41:12.157 回答
0

RE:为什么外部表与 sqlldr 用于加载数据?主要是让服务器管理的并行性与客户端管理的并行性。

于 2013-10-31T02:54:03.937 回答