Oracle10g新特性——利用外部表卸载数据

今天在看OracleCONCEPT文档时发现,Oracle的外部表也可以用来卸载数据了。

 

 

10.2中开始,Oracle增加了外部表的一个新的访问驱动:ORACLE_DATAPUMP。而再次之前,只有一个默认的驱动ORACLE_LOADER

使用ORACLE_DATAPUMP驱动,带来的一个优点是,可以利用外部表将数据库中的数据卸载到磁盘文件中,而这是10.1及以前版本所无法做到的。

下面看一个最简单的例子:

SQL> CREATE TABLE T_EXTERNAL
  2  (
  3  ID,
  4  NAME
  5  )
  6  ORGANIZATION EXTERNAL
  7  (
  8  TYPE ORACLE_DATAPUMP
  9  DEFAULT DIRECTORY D_OUTPUT
 10  LOCATION('TEST.DMP')
 11  )
 12  AS SELECT ROWNUM RN, TNAME
 13  FROM TAB;

表已创建。

在这张外部表创建的同时,在D_OUTPUT所指向的操作系统目录下,生成了一个TEST.DMP二进制文件。

显示这个二进制文件中的可显示字符:

$ strings TEST.DMP
IBMPC/WIN_NT-8.1.0
ZHS16GBK
LBB EMB GHC JWD SD EBE WMF DDG JG SJH SRH JGK CL EGM BJM RAP RLP RP KR PAR MS MRS JLS CET HLT
10.02.00.01.00
T<?xml version="1.0"?>

 
 
   1
   0
   3
   0
   ZHS16GBK
   AL16UTF16
   +00:00
   YANGTK
   T_EXTERNAL
  
    
      1
      0
      ID
      2
      22
      0
      -127
      0
      0
      0
    
    
      2
      0
      NAME
      1
      30
      0
      0
      852
      1
      30
    
  
 
 

T_LOG<
TEST_LOB<
T_COMPRESS<
T_TEMP2<
T_RECORD<
T_SESSION_STAT<
T_TEMP<
T_NO_EXISTS_BEFORE<
T_CHAR<
SYS_EXPORT_SCHEMA_01<
T_EXTERNAL<
T_LOAD_SPACE<
T_LEVEL<
T_LEVEL1<
CHAINED_ROWS<
T_TREE

这个二进制文件可以用于在其他数据库中创建外部表:

SQL> CREATE TABLE T_EXTERNAL
  2  (
  3  ID NUMBER,
  4  NAME VARCHAR2(30)
  5  )
  6  ORGANIZATION EXTERNAL
  7  (
  8  TYPE ORACLE_DATAPUMP
  9  DEFAULT DIRECTORY D_OUTPUT
 10  LOCATION('TEST.DMP')
 11  );

表已创建。

SQL> SELECT * FROM T_EXTERNAL;

        ID NAME
---------- ------------------------------
         1 T_LOG
         2 TEST_LOB
         3 T_COMPRESS
         4 T_TEMP2
         5 T_RECORD
         6 T_SESSION_STAT
         7 T_TEMP
         8 T
         9 T_NO_EXISTS_BEFORE
        10 T_CHAR
        11 SYS_EXPORT_SCHEMA_01
        12 T_EXTERNAL
        13 T_LOAD_SPACE
        14 T_LEVEL
        15 T_LEVEL1
        16 CHAINED_ROWS
        17 T_TREE

已选择17行。

唯一可惜的是Oracle只能将数据写为二进制格式,因此可以考虑使用这种方法进行数据迁移或发布。不过想利用这种方法来生成文本报表也是行不通的。

最后提一下,外部表是只读表,可以利用外部表卸载数据,不过必须在建表时完成,一旦表建立成功,外部表就变成不可修改了。

SQL> INSERT INTO T_EXTERNAL VALUES (100, 'A');
INSERT INTO T_EXTERNAL VALUES (100, 'A')
            *
1 行出现错误:
ORA-30657:
操作在外部组织表上不受支持

SQL> DROP TABLE T_EXTERNAL;

表已删除。

SQL> CREATE TABLE T_EXTERNAL
  2  (
  3  ID NUMBER,
  4  NAME VARCHAR2(30)
  5  )
  6  ORGANIZATION EXTERNAL
  7  (
  8  TYPE ORACLE_DATAPUMP
  9  DEFAULT DIRECTORY D_OUTPUT
 10  LOCATION('TEST1.DMP')
 11  );

表已创建。

SQL> INSERT INTO T_EXTERNAL VALUES (1, 'A');
INSERT INTO T_EXTERNAL VALUES (1, 'A')
            *
1 行出现错误:
ORA-30657:
操作在外部组织表上不受支持

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-426858/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4227/viewspace-426858/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值