`
快乐让让
  • 浏览: 18361 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用Oracle外部表的五个限制

阅读更多
Oracle外部表就好像是一张视图,在数据库中可以像试图一样进行查询等操作。这个试图允许用户在外部数据上运行任何的SQL语句,而不需要先将外部表中的数据装载进数据库中。


外部表是指不在数据库中的表,如操作系统上的一个按一定格式分割的文本文件或者其他类型的表。这个外部表对于Oracle数据库来说,就好像是一张视图,在数据库中可以像试图一样进行查询等操作。这个试图允许用户在外部数据上运行任何的SQL语句,而不需要先将外部表中的数据装载进数据库中。不过需要注意是,外部数据表都是只读的,不能够更改。不过在使用外部表时仍然有不少的限制。


限制一:需要先建立目录对象。

在使用外部数据表的时候,需要先建立目录对象。也就是说,要想Oracle数据库系统访问操作系统文件,就必须在数据库中建立指向这个操作系统文件的目录对象,然后通过这个目录对象访问相应的操作系统文件,即用目录对象存储操作文件的保存位置。不过需要注意,这个目录对象普通用户是无权创建的。一般情况下只有特权用户或者数据库管理员角色才可以创建目录对象。如果允许其他用户也可以创建目录对象的话,就需要授权给其他用户。

其实这个目录对象就是操作系统中文件或者表格的存储位置。不过在建立对象的时候,需要小心,Oracle数据库系统不会去确认这个目录是否真的存在。如果在输入这个目录对象的时候,不小心把路径写错了,那可能这个外部表仍然可以正常建立,但是却无法查询到数据。由于建立目录对象时,缺乏这种自我检查的机制,为此在将路径赋予给这个目录对象时,需要特别的注意。另外需要注意的是路径的大小写。在Windows操作系统中,其路径是不区分大小写的。而在Linux操作系统,这个路径需要区分大小写。故在不同的操作系统中,建立目录对象时需要注意这个大小写的差异。最好数据库管理员可以养成一个习惯,无论在什么操作系统中,都采用小写的目录名与文件名。那么在不同的操作系统中,就不用受到这个大小写的困扰了。最后需要注意的是,目录对象名必须唯一。如果目录对象名字有重复的话,系统会提示错误信息:“名称已有现有对象引用”,而不会自动覆盖原有的对象名设置。

虽然这个对象名设置比较简单,但是其是数据库寻找操作系统上文件的唯一途径。所以这个目录对象的创建必须确保准确。否则的话,外部表就可能无法正常使用。

限制二:对于操作系统文件的限制。
其实外部表简单的说,就是跟操作系统上固定格式的文件或者表格的一个连接。为了Oracle数据库系统能够正确链接外部表,对于外部表的格式就提出了比较严格的要求。如果不符合这些要求的话,数据库系统就无法正确读取外部表中的数据。如对于分隔符有比较严格的要求。虽然在外部文件或者表格中,可以使用多种分隔符,如英文状态下的逗号或者分号等等。但是有一个限制,即在同一个操作系统文件中只能够使用一个分割符号,要么逗号或者分号等等。因为在建立外部表时,必须指定操作系统文件所使用的分隔符号。如果有多种分隔符号的话,数据库系统将无法识别。

另外在外部表格中,不能够带有标题信息。如现在有一张表格,以逗号分隔。而在其第一列数据中有各个列的标题信息。而数据库系统在连接这个表的时候,会将这些标题信息当作普通的纪录来对待。即会将这些信息也显示在外部表中。为此如果这个标题信息与外部表的字段类型不一致(如字段内容是number数据类型,而标题信息则是字符型数据,则在查询时就会出错)。如果数据类型恰巧一致的话,这个标题信息Oracle数据库也会当作普通记录来对待。如在建立外部表的时候,最好确认一下操作系统文件中是否包含标题信息。如果有的话,需要删除。否则的话,可能会出错。

最后需要说明的是,当Oracle数据库系统访问这个操作系统文件的时候,会在这个文件所在的目录自动创建一个日志文件。无论最后是否访问成功,这个日志文件都会如期建立。查看这个日志文件,可以了解数据库访问外部表的频率、是否成功访问等等。

限制三:在建立临时表时的限制。
在建立临时表时,也会有不少的限制。如表中字段的名称有一些特殊字符的话,那么这个表列的名称必须使用英文状态的下的双引号连接起来。如采用”studentno#”。遇到列名字中有特殊符号时,如果不采用双引号括起来,虽然临时表可以正常创建,但是在采用的时候会出现错误,无法正常查询数据。如数据库系统可能会提醒:“数据库插件错误”等信息。为此最好在创建临时表时不要在列名中使用一些特殊的字符。其实不光光是建立临时表有这种限制,建立其他标或者试图都有类似的限制。

 其次,这个外部表毕竟与内部表不同。在创建外部表的时候,其实在数据库中跟本没有创建表。也就是说,不会为外部表分配任何的存储空间。创建外部表只是在数据字典中创建了外部表的元数据,以便对应访问外部表中的数据,而不在数据库中存储外部表的数据。简单地说,数据库存储的只是与外部文件的一种对应关系,如字段与字段的对应关系。而没有存储实际的数据。为此在表的操作与管理上,就会受到很大的限制。如在外部表上,是不能够为表创建索引。因为创建索引就意味着要存在对应的索引记录。而外部表其实在数据库不会有存储。故在外部中是无法建立索引的。如果硬要建立的话,则系统会提示“操作在外部组织表上不受支持”的错误提示。同样的道理,在数据库中也不能够更新外部表中的数据,如插入记录、删除记录或者更新信息等等。简而言之,这个外部表对于数据库来说,是只读的,不可更新。

限制四:删除外部表或者目录对象。
当外部表不用时,需要及时删除外部表或者与之对应的目录对象。不过在删除这些内容时会有一些限制。这些限制主要是管理上的限制,而不是技术上的限制。也就是说,Oracle数据库系统没有对其进行强制的限制。但是如果数据库管理员不遵守这些限制的话,可能会出现一些问题。如要先删除外部表,然后再删除目录对象。有时候一个目录对象中可能会包含多个外部表。此时必须要确认所有的外部表都不用了,都已经删除干净了,然后才能够删除目录对象。在创建外部表时,操作系统会判断一下,与之对应的目录对象是否已经创建。但是在删除对象时,系统不会去判断跟这个目录对象关联的外部表是否已经全部删除。如果目录对象删除了,但是还有外部表存在。此时查询这个外部表的时候,系统就会提示“对象不存在”的错误信息。所以这个删除目录对象时,数据库系统缺乏一种检查,此时只有数据库管理员在删除目录对象时,先手工确认一下这个目录对象是否存在其他的外部表。

要了解这个信息,则可以通过查询dba_external_locations。通过查询这张表,系统会反映当前所有的目录对象以及相关的外部表,还会查询出这些外部表所对应的操作系统文件的名字。先查询这张表格,确定要删除的对象没有其他关联的外部表时,再进行删除。否则的话,需要先确认其他外部表的可用性。免得因为误删除而导致外部表无法正常使用。

限制五:对于操作系统平台的限制。
虽然Oracle数据库是支持跨平台的数据库系统,即同时支持Windows或者Linux等多种操作系统。但是在使用外部表的时候需要注意一个问题,即在两个操作系统上文本文件的存储方式是不同的。如在Windows操作系统上利用txt文件建立了一个以逗号作为分隔符的文件,其一行一条记录。但是在Linux操作系统上打开的话,在其就可能使在同一行中显示了。故为了数据库系统能够正确识别操作系统文件,最好这个操作系统文件能够和Oracle数据库系统部署在同一台服务器上或者同一种操作系统上。否则的话,很可能因为格式的冲突,而导致数据库系统无法正确读取外部文件中的数据。
分享到:
评论

相关推荐

    oracle外部表Externaltable[借鉴].pdf

    * 数据导入和导出:可以使用外部表来将数据从一个文件导入到 Oracle 数据库中,然后再将数据导出到另一个文件中。 * 数据集成:可以使用外部表来将外部数据文件与 Oracle 数据库中的其他数据集成。 * 报表生成:可以...

    oracle 外部表语法

    综上所述,Oracle外部表为数据库用户提供了一种高效、灵活的方式来访问和管理非结构化或半结构化数据,同时提供了一系列实用的功能,如错误处理机制和并行处理能力,使其成为处理大量外部数据的强大工具。

    oracle数据表导出为word文档

    在Oracle数据库中,数据表是存储数据的主要结构,由一系列行和列组成,每一行代表一个实体,每一列代表实体的一个属性。要将这些数据表导出,我们需要一个中间工具来完成转换。 描述中提到的“工具”通常指的是SQL...

    oracle 导出xls文件数据的脚本

    总的来说,Oracle导出xls文件数据的脚本涉及了Oracle的SQL*Plus、外部表、批处理脚本等多个技术点。通过这些技术,我们可以灵活地从Oracle数据库导出数据到Excel,满足各种业务需求。在实际操作中,应根据具体环境和...

    Oracle.表与锁

    接着,陶冶先生提到了High Water Mark(HWM),这是Oracle为每个表维护的一个标记,记录了表使用过的最大数据库块编号。HWM在数据删除时不移动,全表扫描时会读取所有低于HWM的数据块,即使某些块可能已无数据。在...

    最完整的Toad For Oracle使用手册

    - **Toad for Oracle, Read-Only**:讨论了只读模式下的Toad使用限制。 - **Registering Toad**:说明了如何注册Toad。 - **Silent Installation**:介绍了静默安装Toad的方法。 - **Group Policy Management**:...

    Oracle接收长度大于4000的字符串

    在Oracle数据库中,默认情况下,`VARCHAR2`类型字段的最大长度为4000个字符。当需要处理更长的字符串时(例如,超过4000个字符),可以采用多种方法来解决这一问题。本文将详细介绍如何在.NET环境中处理和传递长度...

    Oracle数据库学习指南

    5. Oracle Index 的三个问题 6. Oracle PL-SQL语言基础 7. Oracle的分布式管理 8. ORACLE的数据类型 9. Oracle数据库碎片整理 10.ORACLE性能调整1 11.ORACLE性能调整2 12.Oracle专家调优秘密 13.PL...

    ORACLE数据库跨平台迁移

    我们可以使用dbms_tdb包来检查数据库能否被传输,并列出外部表和DIRECTORY等无法传输的对象信息: SYS@CTY> set serveroutput on; SYS@CTY> declare db_ready boolean; begin /* db_ready is ignored, but with ...

    oracle配置透明网关.rar

    例如,可以创建外部表定义,然后直接在SQL查询中使用这些表。 5. **性能和安全性**: - 性能:虽然透明网关简化了跨数据库访问,但可能会引入额外的网络延迟和处理开销,因此需要评估性能影响。 - 安全性:必须...

    SQL SERVER连接oracle数据库几种方法

    在上面的代码中,我们使用 OPENDATASOURCE 连接到 Oracle 数据库,然后选择 DAIMIN.JOBS 表中的所有数据。 方法 2:使用链接服务器 在 SQL Server 中,我们可以创建一个链接服务器,以便连接到 Oracle 数据库。...

    ORACLE19c中的混合分区表的使用.pdf

    Oracle 19c支持四种类型的外部表:ORACLE_DATAPUMP、ORACLE_LOADER、ORACLE_HDFS和ORACLE_HIVE。其中,ORACLE_LOADER和ORACLE_DATAPUMP这两种外部表访问驱动需要特定的权限,包括对数据文件目录的读权限、日志文件...

    ORACLE 错误一览表

    以上只是Oracle错误一览表中的一部分常见错误,实际的错误表非常庞大,涵盖了从连接问题到数据完整性,再到性能优化等多个方面。理解并解决这些错误对于维护Oracle数据库的稳定性和高效运行至关重要。通过学习和理解...

    利用ORACLE实现数据的抽样

    然而,Oracle数据库本身并未直接提供系统抽样的功能,因此需要结合SQL查询与外部编程逻辑来实现。 #### 3. 整群抽样 整群抽样是将总体划分成若干群体,然后从这些群体中随机抽取一部分作为样本。在Oracle中,可以先...

    Excel文件导入到Oracle数据库

    3. **利用工具或编程**:有多种方式可将Excel数据导入Oracle,包括使用Oracle SQL Developer、PL/SQL Developer等图形界面工具,或者通过编写SQL*Loader、外部表等脚本进行批量导入。这些工具通常允许设置列映射,...

    Oracle 修改数据库库表的各种情况和SQL语句

    ### Oracle 修改数据库库表的各种情况和SQL语句 在日常的数据库管理与开发工作中,我们经常需要对现有的数据库表结构进行调整以满足业务需求的变化。本文将详细介绍在Oracle数据库中如何针对不同情况来修改数据库表...

    Oracle数据库中行迁移、行链接的问题

    2. 优化表结构:尽量减少大对象字段的使用,或者考虑使用外部表存储大数据。合理设计列的长度,避免过度冗余。 3. 重分布和整理表空间:通过表分区、索引组织表(IOT)或重构表来减少碎片,提高空间利用率。 4. 使用...

    03_oracle迁移到pg全流程.pdf

    其中,oracle_fdw是一个提供Oracle与PostgreSQL之间数据迁移的外部表功能的工具,而ora2pg是另一个专门用于将Oracle数据库迁移到PostgreSQL的迁移工具。 文档的【部分内容】中涉及了多个主题,例如数据库迁移中对...

    oracle表连接和子查询实例

    - **表连接**:外部`JOIN`语句将`emp`表与子查询结果进行连接,条件是员工的薪资等于其所在部门的最大薪资,并且部门编号也匹配。 - **应用场景**:用于找出每个部门薪资最高的员工。 #### 二、部门平均薪资对应的...

Global site tag (gtag.js) - Google Analytics