2008-12-31
Oracle外部表 External Table
参考
http://www.blogjava.net/wxqxs/archive/2008/10/13/237180.html?opt=admin
http://hi.baidu.com/ray315/blog/item/153c97a33cd26caacbefd0de.html
http://arvinnan.iteye.com/blog/308638
定义
External tables access data in external sources as if it were in a table in the database.
You can connect to the database and create metadata for the external table using DDL.
The DDL for an external table consists of two parts: one part that describes the Oracle
column types, and another part (the access parameters) that describes the mapping of
the external data to the Oracle data columns.
u 创建的语法类似于: "CREATE TABLE ... ORGANIZATION EXTERNAL"
u 数据在数据库的外部组织,是操作系统文件。
u 操作系统文件在数据库中的标志是通过一个逻辑目录来映射的。
u 数据是只读的。(外部表相当于一个只读的虚表)
u 不可以在上面运行任何 DML 操作,不可以创建索引。
u 可以查询操作和连接。可以并行操作。
建立外部表的步骤:
1、创建以“,”分隔的文件“TestTable.csv”至“D:\Test”
2、创建一个Directory:
create directory TestTable_diras 'D:\Test' ;
3、创建一个外部表:
create table TestTable(
ID varchar2 ( 10 ),
NAME varchar2 ( 20 ),
TYPE varchar2 ( 20 ),
AGEvarchar2 ( 20 ))
organization external (
type oracle_loader
default directory TestTable_dir
access parameters (fields terminatedby ',' )
location ( 'TestTable.csv' )
);
各类参数说明
1、type oracle_loader
数据转换驱动器,oracle_loader为默认,也可以改换其他
2、defaultdirectory TestTable_dir
location ('TestTable.csv')
指定外部表所在文件夹以及指定文件
3、accessparameters
设置转换参数,例如(fields terminatedby',')表示以','为字段间的分隔符
● 参数由访问驱动程序定义
外部表的错误处理
1、REJECT LIMIT子句
在创建外部表时最后加入LIMIT子句,表示可以允许错误的发生个数。
* 默认的REJECT LIMIT值为0
* REJECT LIMIT UNLIMITED则不会报错
2、BADFILE 和 NOBADFILE 子句
在accessparameters中加入BADFILE'BAD_FILE.txt'子句,则所有数据转换错误的值会被放入'BAD_FILE.txt'中
使用NOBADFILE子句则表示忽略转换错误的数据
● 如果不写BADFILE或NOBADFILE,则系统自动在源目录下生成与外部表同名的.BAD文件
● BADFILE只能记录前1次操作的结果,他会被第2次操作所覆盖。
3、LOGFILE 和 NOLOGFILE 子句
在accessparameters中加入LOGFILE'LOG_FILE.log'子句,则所有Oracle的错误信息放入'LOG_FILE.log'中
使用NOLOGFILE子句则表示不记录错误信息到log中
● 如果不写LOGFILE或NOLOGFILE,则系统自动在源目录下生成与外部表同名的.LOG文件
修改外部表语句
外部表与堆表一样可以之用ALTER TABLE命令修改表属性
* REJECT LIMIT --错误数
* DEFAULT DIRECTORY --默认目录
* ACCESS PARAMETERS --参数
* LOCATION --数据文件
* ADD COLUMN --增加列
* MODIFY COLUMN --列定义
* DROP COLUMN --删除列
* RENAME TO --外部表更名
其他约束
● 外部表无法使用insert、update、delete等操作,要修改其数据只能通过修改数据文件。
● 外部表不能建立索引,如要建立,则需要先create table XX as select * from TestTable
PS:
1.外部表可以加载和卸载数据泵格式的数据,只需把organization external里的参数type设置为oracle_datapump。
create table all_objects_unload
organization external
(
type oracle_datapump
default directory testdir
location('allobjects.dat')
)
as
select * from all_objects
分享到:
相关推荐
### Oracle 外部表知识点详解 #### 一、外部表的概念及特性 ...总之,Oracle外部表为用户提供了一种高效且灵活的方式来处理文件系统中的数据,减少了数据传输和转换的时间成本,提高了数据处理效率。
下面我们将深入探讨Oracle外部表的创建、使用以及相关的关键知识点。 ### 一、创建外部表 外部表的创建主要通过`CREATE TABLE`语句,加上`ORGANIZATION EXTERNAL`子句来实现。以下是一个创建外部表的基本语法: `...
2.提取和使用数据字典的选项:现在数据字典不仅可以提取到一个外部文件中,还可以使用 DBMS_LOGMNR_D.BUILD() 过程来提取数据字典信息。 Oracle 日志文件分析是数据库恢复和追踪用户操作的重要工具,LogMiner 是一...
Oracle 外部表是一种非常有用的功能,它可以帮助我们快速地将外部数据文件加载到 Oracle 数据库中,并且可以使用 Oracle 数据库的 SQL 语言来查询和处理外部数据文件。但是,外部表也有一些限制,例如不能进行 DML ...
综上所述,Oracle外部表为数据库用户提供了一种高效、灵活的方式来访问和管理非结构化或半结构化数据,同时提供了一系列实用的功能,如错误处理机制和并行处理能力,使其成为处理大量外部数据的强大工具。
- `CREATE_BFILE`:在Oracle外部文件系统中创建一个BFILE(Binary File)对象,它允许应用程序访问数据库外部的大文件。 - `CREATE_CLOB`、`CREATE_NCLOB`和`CREATE_BLOB`:分别用于创建CLOB(Character Large ...
在Oracle数据库中,外部表是一种特殊的表类型,它允许直接访问文件系统中的数据文件,而无需将这些数据加载到数据库中。这种方式既节省了存储空间,又提高了数据处理效率,尤其是在处理大量非结构化或半结构化数据时...
第二种方法是使用 sqlplus 调用外部 SQL 的方式,直接执行或将多条写入同一个 bat 批处理文件中。例如: ``` sqlplus -s $DB_USER/$DB_PWD@$DB_SERV @unload_oracle.sql ``` 其中 unload_oracle.sql 文件内容为: ...
综上所述,Oracle外部表的使用涉及到元数据的定义、外部数据文件的格式和内容、以及数据迁移工具ORACLE_DATAPUMP和SQLLDR的配置与使用。在实际操作中,还需注意数据库版本间的兼容性问题,以及操作系统和Oracle...
- **定义**: 监听配置文件 `listener.ora` 用于配置 Oracle 网络服务,以便外部进程可以通过网络访问数据库。 - **示例内容**: ```bash LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS ...
- 默认驱动程序,支持使用Oracle的装载技术从外部文件中读取数据。 - 示例创建语法如下: ```sql CREATE TABLE "SYS_SQLLDR_X_EXT_DEPT_NEW" ("DEPTNO" NUMBER(2), "DNAME" VARCHAR2(14), "LOC" VARCHAR2(13)) ...
在使用外部表之前,首先需要创建一个Directory对象,该对象定义了外部文件所在的路径,并且指定哪些用户可以访问这个路径。 ```sql -- 登录为SYSDBA用户 conn / as sysdba -- 创建目录ext,路径为:'c:\external' ...
首先,我们需要了解Oracle提供的一种常用工具——SQL*Loader,它是一个批处理工具,能够高效地将大量数据从外部文件加载到数据库中。SQL*Loader通过控制文件定义数据格式,从而实现数据的映射和转换。 ### SQL*...
Oracle数据库的外部身份认证是一种安全机制,允许用户利用操作系统的身份验证信息来访问数据库,而无需提供额外的数据库登录凭证。这种认证方式提高了安全性,减少了密码管理的复杂性,尤其适用于企业环境中,用户...
Oracle数据库调用外部过程是一种将数据库操作与外部应用程序或系统集成的方法,这使得数据库能够执行非SQL语言(如C、C++)编写的复杂计算和处理任务,从而减轻客户端的负担并减少网络通信。在Oracle数据库中,PL/...
通过`@`命令,可以执行外部的SQL脚本文件,例如:`@批处理文件.txt`。 2. SQL脚本文件: 批处理文件通常以文本形式存在,如`批处理文件.txt`,文件内容包括一系列的SQL命令。这些命令可以是INSERT、UPDATE、DELETE...
通过以上三个文件的合理配置,可以确保外部进程能够成功访问Oracle数据库,从而实现高效的数据交互与处理。此外,在配置过程中还需要注意保持各个文件之间的一致性,避免因配置错误导致的服务不可用问题。
1. SQL*Loader:Oracle提供的一个命令行工具,能够快速高效地将数据从外部文件加载到数据库表中。它支持复杂的数据格式和转换规则,可以处理大量数据。 2. SQL Loader:与SQL*Loader类似,但通常用于更简单的场景,...
SQL*Loader可以从外部文件(如TXT文件)中快速地将数据加载到数据库表中。我们需要编写一个控制文件(.ctl文件),它定义了如何解析TXT文件和如何将数据插入到数据库表中。 4. **编写控制文件**:控制文件包含了...
Oracle 10g中的外部表(External Tables)是一种非常实用的功能,它允许数据库直接读取存储在操作系统文件系统中的数据,而无需先将其导入到常规的数据库表中。这种机制对于处理大量非结构化或半结构化数据,如日志...