当前位置: DBARoad > 基础知识 > 文章正文

10G中将外部表用作数据传输

                    作者 :OoNiceDream【转载时请务必以超链接形式标明文章原始出处和作者信息】
                    链接:http://www.dbaroad.me/archives/2009/09/10g_external_table.html

外部表作为一种有效的数据传输机制,在Oracle 10G中有两种使用方式:
1、ORACLE_LOADER Access Driver
ORACLE_LOADER Access Driver是9i中延续下来的,与sqlloader有些类似,大致过程如下:
源数据库:

SQL> select * from perfstat.dept;
 
    DEPTNO DNAME                LOC
---------- -------------------- -------------------------
         1 a                    zj
         2 b                    zj
         3 c                    sh
 
SQL> spool external_dept.txt
SQL> select deptno||','||dname||','||loc||','
  2  from perfstat.dept;
 
DEPTNO||','||DNAME||','||LOC||','
-----------------------------------
1,a,zj,
2,b,zj,
3,c,sh,
 
SQL> spool off

目标数据库:
将external_dept.txt传输到目标数据库。

SQL> create or replace directory admin as '/home/oraadm';
 
Directory created.
 
SQL> grant read,write on directory admin to rockey;
 
Grant succeeded.
 
SQL> conn rockey/rockey
Connected.
SQL> CREATE TABLE dept (
  2     deptno     NUMBER(6),
  3     dname      VARCHAR2(20),
  4     loc        VARCHAR2(25) 
  5  )
  6  ORGANIZATION EXTERNAL
  7  (TYPE oracle_loader
  8   DEFAULT DIRECTORY admin
  9   ACCESS PARAMETERS
 10   (
 11    RECORDS DELIMITED BY newline
 12    BADFILE 'ulcase1.bad'
 13    DISCARDFILE 'ulcase1.dis'
 14    LOGFILE 'ulcase1.log'
 15    FIELDS TERMINATED BY ","  OPTIONALLY ENCLOSED BY '"'
 16    (
 17     deptno     INTEGER EXTERNAL(6),
 18     dname      CHAR(20),
 19     loc        CHAR(25)
 20    )
 21   )
 22   LOCATION ('external_dept.txt')
 23  )
 24  REJECT LIMIT UNLIMITED;
 
Table created.
 
SQL> select * from dept;
 
    DEPTNO DNAME                LOC
---------- -------------------- -------------------------
         1 a                    zj
         2 b                    zj
         3 c                    sh

2、ORACLE_DATAPUMP access driver
使用ORACLE_LOADER Access Driver方式,在spool时,如果表较大,导出可能会比较久。而在10G中还可以使用ORACLE_DATAPUMP access driver方式,将数据导出成类似于DUMP文件,可以在不同的操作系统中移植,速度比较快。

源数据库:

SQL> create or replace directory DUMP_DIR as '/home/ora10g';
 
Directory created.
 
SQL> create table dept_ext1
  2  organization external
  3  (
  4  type oracle_datapump
  5  default directory dump_dir
  6  location ('dept_dump.dmp')
  7  )
  8  as
  9  select * from perfstat.dept
 10  /
 
Table created.
 
SQL> select * from perfstat.dept;
 
    DEPTNO DNAME                LOC
---------- -------------------- -------------------------
         1 a                    zj
         2 b                    zj
         3 c                    sh
 
SQL> select * from dept_ext1;
 
    DEPTNO DNAME                LOC
---------- -------------------- -------------------------
         1 a                    zj
         2 b                    zj
         3 c                    sh

目标数据库:
将dept_dump.dmp传输到目标数据库。

SQL> create or replace directory admin as '/home/oraadm';
 
Directory created.
 
SQL> grant read,write on directory admin to perfstat;
 
Grant succeeded.
 
SQL> conn perfstat/perfstat
Connected.
SQL> create table dept_dump
  2  (
  3     deptno     NUMBER(6),
  4     dname      VARCHAR2(20),
  5     loc        VARCHAR2(25) 
  6  )
  7  organization external
  8  (
  9  type oracle_datapump
 10  default directory admin
 11  ACCESS PARAMETERS 
 12  (LOGFILE 'dept_dump.log')
 13  location ('dept_dump.dmp')
 14  );
 
Table created.
 
SQL> select * from dept_dump;
 
    DEPTNO DNAME                LOC
---------- -------------------- -------------------------
         1 a                    zj
         2 b                    zj
         3 c                    sh

— The End —

关键字:
喜欢DBARoad的文章,那就通过 RSS Feed 功能订阅阅读吧!

我要评论

*

* 绝不会泄露


  • 订阅


      抓虾
      google reader
      my yahoo
      bloglines
      鲜果
      有道

站内搜索



返回首页 | 关于我 | 联系我 | 广告合作 | 网站地图 | 友情链接 | 版权声明 |