欢迎投稿

今日深度:

Oracle外部表

Oracle外部表


1.外部表简介
 
外部表是Oracle9i之后来使用的。外部表是一类表的定义存在于数据库而数据不存在于数据库的表。
 
在数据库操作过程中可以对外部表进行select,join,sort操作也可以对外部表创建视图和同义词。但是不能在外部表上进行DML操作和创建索引。
 
外部表提供两种访问驱动。一种ORACLE_LOADER另一种ORACLE_DATAPUMP。默认驱动是ORACLE_LOADER。
 
ORACLE_LOADER驱动从外部文件中读数据。ORACLE_LOADER创建外部表的语法和SQL*Loader utility有异曲同工之妙。
 
ORACLE_DATAPUMP先通过外部表unload出数据然后通过外部表reload表。具体下面小节分析。
 
另外外部表的统计信息收集支持DBMS_STATS包但不支持ANALYZE。
而且外部表不支持虚拟列。
 
 
 
2.创建外部表
[oracle@localhost mydir]$ cat samp1.txt 
360,Jane,Janus,ST_CLERK,121,17-MAY-2001,3000,0,50,jjanus
361,Mark,Jasper,SA_REP,145,17-MAY-2001,8000,.1,80,mjasper
362,Brenda,Starr,AD_ASST,200,17-MAY-2001,5500,0,10,bstarr
363,Alex,Alda,AC_MGR,145,17-MAY-2001,9000,.15,80,aalda
401,Jesse,Cromwell,HR_REP,203,17-MAY-2001,7000,0,40,jcromwel
402,Abby,Applegate,IT_PROG,103,17-MAY-2001,9000,.2,60,aapplega
403,Carol,Cousins,AD_VP,100,17-MAY-2001,27000,.3,90,ccousins
404,John,Richardson,AC_ACCOUNT,205,17-MAY-2001,5000,0,110,jrichard



SQL> create or replace directory mydir as '/home/oracle/mydir';

Directory created.

SQL> grant read,write on directory mydir to scott;

Grant succeeded.


SQL> conn scott/tiger
Connected.


CREATE TABLE admin_ext_employees
                   (employee_id       NUMBER(4), 
                    first_name        VARCHAR2(20),
                    last_name         VARCHAR2(25), 
                    job_id            VARCHAR2(10),
                    manager_id        NUMBER(4),
                    hire_date         DATE,
                    salary            NUMBER(8,2),
                    commission_pct    NUMBER(2,2),
                    department_id     NUMBER(4),
                    email             VARCHAR2(25) 
                   ) 
     ORGANIZATION EXTERNAL 
     ( 
       TYPE ORACLE_LOADER 
       DEFAULT DIRECTORY mydir 
       ACCESS PARAMETERS 
       ( 
         records delimited by newline 
         badfile mydir:'badxt%a_%p.bad' 
         logfile mydir:'logxt%a_%p.log' 
         fields terminated by ',' 
         missing field values are null 
         ( employee_id, first_name, last_name, job_id, manager_id, 
           hire_date char date_format date mask "dd-mon-yyyy", 
           salary, commission_pct, department_id, email 
         ) 
       ) 
       LOCATION ('samp1.txt') 
     )
     PARALLEL REJECT LIMIT UNLIMITED;




     PARALLEL                 --指定查询时的并行度
     REJECT LIMIT UNLIMITED  --指定外部表查询错误数量

 

 
执行成功看产生的日志。
 
[oracle@localhost mydir]$ ls -al
total 20
drwxr-xr-x 2 oracle oinstall 4096 Nov 20 16:12 .
drwx------ 5 oracle oinstall 4096 Nov 20 15:53 ..
-rw-r--r-- 1 oracle oinstall 1413 Nov 20 16:12 logxt000_13688.log
-rw-r--r-- 1 oracle oinstall 1555 Nov 20 16:12 logxt000_16408.log
-rw-r--r-- 1 oracle oinstall  480 Nov 20 15:53 samp1.txt


[oracle@localhost mydir]$ cat logxt000_13688.log 


 LOG file opened at 11/20/15 16:12:03

Field Definitions for table ADMIN_EXT_EMPLOYEES
  Record format DELIMITED BY NEWLINE
  Data in file has same endianness as the platform
  Rows with all null fields are accepted

  Fields in Data Source: 

    EMPLOYEE_ID                     CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    FIRST_NAME                      CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    LAST_NAME                       CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    JOB_ID                          CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    MANAGER_ID                      CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    HIRE_DATE                       CHAR (80)
      Date datatype DATE, date mask dd-mon-yyyy
      Terminated by ","
      Trim whitespace same as SQL Loader
    SALARY                          CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    COMMISSION_PCT                  CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    DEPARTMENT_ID                   CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    EMAIL                           CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
[oracle@localhost mydir]$ cat logxt000_16408.log 


 LOG file opened at 11/20/15 16:12:03

Field Definitions for table ADMIN_EXT_EMPLOYEES
  Record format DELIMITED BY NEWLINE
  Data in file has same endianness as the platform
  Rows with all null fields are accepted

  Fields in Data Source: 

    EMPLOYEE_ID                     CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    FIRST_NAME                      CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    LAST_NAME                       CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    JOB_ID                          CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    MANAGER_ID                      CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    HIRE_DATE                       CHAR (80)
      Date datatype DATE, date mask dd-mon-yyyy
      Terminated by ","
      Trim whitespace same as SQL Loader
    SALARY                          CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    COMMISSION_PCT                  CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    DEPARTMENT_ID                   CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader
    EMAIL                           CHAR (255)
      Terminated by ","
      Trim whitespace same as SQL Loader

Date Cache Statistics for table ADMIN_EXT_EMPLOYEES
  Max Size:      1000
  Entries :         1
  Hits    :         7
  Misses  :         0

 

 
logxt000_16408.log日志比logxt000_13688.log尾部多了一些统计信息。
 
 
 
查看外部表
SQL>  select EMPLOYEE_ID,FIRST_NAME from ADMIN_EXT_EMPLOYEES;
 
EMPLOYEE_ID FIRST_NAME
----------- --------------------
360 Jane
361 Mark
362 Brenda
363 Alex
401 Jesse
402 Abby
403 Carol
404 John
 
 
3.外部表修改
能够使用于alter table下面子句来修改外部表访问参数
reject limit:ALTER TABLE admin_ext_employees REJECT LIMIT n;
 
project column: ALTER TABLE admin_ext_employees PROJECT COLUMN REFERENCED;
ALTER TABLE admin_ext_employees PROJECT COLUMN ALL;
default dectory:ALTER TABLE admin_ext_employees DEFAULT DIRECTORY admin_dat2_dir;
 
 
查看修改的属性
SQL> select OWNER,TABLE_NAME,REJECT_LIMIT,DEFAULT_DIRECTORY_NAME,PROPERTY from dba_external_tables;
 
OWNER   TABLE_NAME  REJECT_LIM DEFAULT_DIRECTORY_NAME    PROPERTY
---------- ------------------------------ ---------- ------------------------------ ----------
SCOTT   ADMIN_EXT_EMPLOYEES  UNLIMITED  MYDIR    ALL
 
 
 
4.预处理外部表
 
SQL> create or replace directory mydir as '/home/oracle/mydir';
 
Directory created.
 
SQL> grant read,write,execute on directory mydir to scott;
 
Grant succeeded.
 
 
在/home/oracle/mydir下面创建一个文件
[oracle@localhost mydir]$ cat uncompress 
/bin/gzip -cd $1
[oracle@localhost mydir]$ chmod +x uncompress


SQL> conn scott/tiger   
Connected.
CREATE TABLE admin_ext_employees
                   (employee_id       NUMBER(4), 
                    first_name        VARCHAR2(20),
                    last_name         VARCHAR2(25), 
                    job_id            VARCHAR2(10),
                    manager_id        NUMBER(4),
                    hire_date         DATE,
                    salary            NUMBER(8,2),
                    commission_pct    NUMBER(2,2),
                    department_id     NUMBER(4),
                    email             VARCHAR2(25) 
                   ) 
     ORGANIZATION EXTERNAL 
     ( 
       TYPE ORACLE_LOADER 
       DEFAULT DIRECTORY mydir 
       ACCESS PARAMETERS 
       ( 
         records delimited by newline 
PREPROCESSOR exec_file_dir:'uncompress'
  badfile mydir:'badxt%a_%p.bad' 
         logfile mydir:'logxt%a_%p.log' 
         fields terminated by ',' 
         missing field values are null 
         ( employee_id, first_name, last_name, job_id, manager_id, 
           hire_date char date_format date mask "dd-mon-yyyy", 
           salary, commission_pct, department_id, email 
         ) 
       ) 
       LOCATION ('samp1.txt.gz') 
     )
     PARALLEL                 
     REJECT LIMIT UNLIMITED;

 

 
5.外部表的删除使用DROP TABLE语句这条语句仅仅删除数据库中的介质,对实际数据没有影响。
SQL> drop table admin_ext_employees;
 
Table dropped.
 
 
6.有关外部表的系统权限和对象。
外部表的系统权限
CREATE ANY TABLE
ALTER ANY TABLE
DROP ANY TABLE
SELECT ANY TABLE
 
外部表的对象权限
ALTER
SELECT

www.htsjk.Com true http://www.htsjk.com/oracle/23863.html NewsArticle Oracle外部表 1.外部表简介 外部表是Oracle9i之后来使用的。外部表是一类表的定义存在于数据库而数据不存在于数据库的表。 在数据库操作过程中可以对外部表进行select,join,sort操作也可...
评论暂时关闭