• oracle_外部表的两种实现方式oracle_loader[datapump]


    外部表可以实现,通过数据库对象直接访问目录文件里的格式数据,加载方式分为两种oracle_loader和oracle_datapump,oracle_loader方式通过sqlldr引擎方式加载,访问flat格式文件;oracle_datapump通过datapump接口来加载,访问通过oracle_datapump方式卸载的dmp文件;
     
     
     
     
    ------oracle_loader
    ----自定义两个格式文件内容如下:
    ====a.dat====
    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
     
    ====b.dat====
    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
     
     
    ----创建需要的目录
    CONNECT  /  AS SYSDBA;
    -- Set up directories and grant access to hr 
    CREATE OR REPLACE DIRECTORY admin_dat_dir
        AS '/u01/backup'; 
    CREATE OR REPLACE DIRECTORY admin_log_dir 
        AS '/u01/backup'; 
    CREATE OR REPLACE DIRECTORY admin_bad_dir 
        AS '/u01/backup'; 
    GRANT READ ON DIRECTORY admin_dat_dir TO sun; 
    GRANT WRITE ON DIRECTORY admin_log_dir TO sun; 
    GRANT WRITE ON DIRECTORY admin_bad_dir TO sun;
     
    ----通过loader方式创建外部表,直接通过表来查询操作
    conn sun/sun
    -- create the external table
    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 admin_dat_dir 
           ACCESS PARAMETERS 
           ( 
             records delimited by newline 
             badfile admin_bad_dir:'empxt%a_%p.bad' 
             logfile admin_log_dir:'empxt%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 ('a.dat', 'b.dat') 
         ) 
         PARALLEL 
         REJECT LIMIT UNLIMITED; 
         
    create table emp as select * from admin_ext_employees;     
     
     
    SQL> 
    SQL> SELECT * FROM emp;
     
    EMPLOYEE_ID FIRST_NAME           LAST_NAME                 JOB_ID     M
    ----------- -------------------- ------------------------- ---------- -
            401 Jesse                Cromwell                  HR_REP      
            402 Abby                 Applegate                 IT_PROG     
            403 Carol                Cousins                   AD_VP       
            404 John                 Richardson                AC_ACCOUNT  
            360 Jane                 Janus                     ST_CLERK    
            361 Mark                 Jasper                    SA_REP      
            362 Brenda               Starr                     AD_ASST     
            363 Alex                 Alda                      AC_MGR      
    SQL> SELECT * FROM user_external_tables ;
     
    no rows selected
     
     
    [ora11@prim backup]$ ls -l
    total 20
    -rw-r--r-- 1 ora11 oinstall  228 Sep  6 21:17 a.dat
    -rw-r--r-- 1 ora11 oinstall  252 Sep  6 21:17 b.dat
    -rw-r--r-- 1 ora11 oinstall 2826 Sep  6 21:19 empxt000_2756.log
    -rw-r--r-- 1 ora11 oinstall 3110 Sep  6 21:19 empxt000_2763.log
    -rw-r--r-- 1 ora11 oinstall 3110 Sep  6 21:19 empxt001_2765.log
     
     
    ------oracle_datapump
    ----更多是实现数据迁移的功能,通过datapump方式卸载并迁移到其他系统;
    ----创建datapump方式的外部表,并将数据卸载到目录文件中;
    SQL> CREATE TABLE admin_ext_employees
      2                     (employee_id     ,
      3                      first_name      ,
      4                      last_name       , 
      5                      job_id          ,
      6                      manager_id      ,
      7                      hire_date       ,
      8                      salary          ,
      9                      commission_pct  ,
     10                      department_id   ,
     11                      email           
     12                     ) 
     13       ORGANIZATION EXTERNAL 
     14       ( 
     15         TYPE ORACLE_DATAPUMP 
     16         DEFAULT DIRECTORY admin_dat_dir 
     17         LOCATION ('emp2.dmp'))
     18        AS SELECT  * FROM emp;
     
    Table created.
     
    ----查询文件内容,大体是产生XML格式的文件
    -rw-r----- 1 ora11 oinstall 12288 Sep  6 21:33 emp2.dmp
    [ora11@prim backup]$ strings emp2.dmp 
    "SUN"."U"
    x86_64/Linux 2.4.xx
     
     
    ----通过loader方式创建外部表,直接通过表来查询操作
    SQL> CREATE TABLE admin_ext_employees2
      2                     (employee_id       NUMBER(4), 
      3                      first_name        VARCHAR2(20),
      4                      last_name         VARCHAR2(25), 
      5                      job_id            VARCHAR2(10),
      6                      manager_id        NUMBER(4),
      7                      hire_date         DATE,
      8                      salary            NUMBER(8,2),
      9                      commission_pct    NUMBER(2,2),
     10                      department_id     NUMBER(4),
     11                      email             VARCHAR2(25) 
     12                     ) 
     13       ORGANIZATION EXTERNAL 
     14       ( 
     15         TYPE ORACLE_DATAPUMP 
     16         DEFAULT DIRECTORY admin_dat_dir 
     17         LOCATION ('emp2.dmp')) ;
     
    Table created.
     
    SQL> 
    SQL> SELECT * FROM admin_ext_employees2 ;
     
    EMPLOYEE_ID FIRST_NAME           LAST_NAME                 JOB_ID    
    ----------- -------------------- ------------------------- ----------
            401 Jesse                Cromwell                  HR_REP    
            402 Abby                 Applegate                 IT_PROG   
            403 Carol                Cousins                   AD_VP     
            404 John                 Richardson                AC_ACCOUNT
            360 Jane                 Janus                     ST_CLERK  
            361 Mark                 Jasper                    SA_REP    
            362 Brenda               Starr                     AD_ASST   
            363 Alex                 Alda                      AC_MGR    
  • 相关阅读:
    关于sqlite数据库在使用过程中应该注意以下几点
    关于THREAD线程中CurrentCulture与CurrentUICulture的学习
    转:ASP.NET MVC3升级到ASP.NET MVC4
    win8 iis安装及网站发布
    转: CKEditor/CKFinder升级心得
    [更新]Windows Phone 实现类似“微博”下拉刷新效果
    EntityFramework中使用Include可能带来的问题
    [更新]Luke.Net for Pangu 盘古分词版更新
    文件大小友好显示类
    找出最慢的查询语句Find your slowest queries
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/7082957.html
Copyright © 2020-2023  润新知