WEB开发网
开发学院数据库Oracle Oracle 10g新特性:利用外部表卸载数据 阅读

Oracle 10g新特性:利用外部表卸载数据

 2008-12-18 13:07:08 来源:WEB开发网   
核心提示:今天在看Oracle的CONCEPT文档时发现,Oracle的外部表也可以用来卸载数据了,Oracle 10g新特性:利用外部表卸载数据, 从10.2中开始,Oracle增加了外部表的一个新的访问驱动:ORACLE_DATAPUMP,外部表就变成不可修改了,SQL>INSERTINTOT_EXTERNALVALU

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

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

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

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

 SQL>CREATETABLET_EXTERNAL
  2(
  3ID,
  4NAME
  5)
  6ORGANIZATIONEXTERNAL
  7(
  8TYPEORACLE_DATAPUMP
  9DEFAULTDIRECTORYD_OUTPUT
  10LOCATION('TEST.DMP')
  11)
  12ASSELECTROWNUMRN,TNAME
  13FROMTAB;

表已创建。

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

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

 $stringsTEST.DMP 
  IBMPC/WIN_NT-8.1.0 
  ZHS16GBK 
  LBBEMBGHCJWDSDEBEWMFDDGJGSJHSRHJGKCLEGMBJMRAPRLPRPKRPARMSMRSJLSCETHLT 
  10.02.00.01.00 
  T 
  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>CREATETABLET_EXTERNAL
  2(
  3IDNUMBER,
  4NAMEVARCHAR2(30)
  5)
  6ORGANIZATIONEXTERNAL
  7(
  8TYPEORACLE_DATAPUMP
  9DEFAULTDIRECTORYD_OUTPUT
  10LOCATION('TEST.DMP')
  11);

表已创建。

SQL>SELECT*FROMT_EXTERNAL;
  IDNAME
  ----------------------------------------
  1T_LOG
  2TEST_LOB
  3T_COMPRESS
  4T_TEMP2
  5T_RECORD
  6T_SESSION_STAT
  7T_TEMP
  8T
  9T_NO_EXISTS_BEFORE
  10T_CHAR
  11SYS_EXPORT_SCHEMA_01
  12T_EXTERNAL
  13T_LOAD_SPACE
  14T_LEVEL
  15T_LEVEL1
  16CHAINED_ROWS
  17T_TREE

已选择17行。

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

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

 SQL>INSERTINTOT_EXTERNALVALUES(100,'A');
 INSERTINTOT_EXTERNALVALUES(100,'A')

*第 1 行出现错误:

ORA-30657: 操作在外部组织表上不受支持

SQL> DROP TABLE T_EXTERNAL;

表已删除。

 SQL>CREATETABLET_EXTERNAL
  2(
  3IDNUMBER,
  4NAMEVARCHAR2(30)
  5)
  6ORGANIZATIONEXTERNAL
  7(
  8TYPEORACLE_DATAPUMP
  9DEFAULTDIRECTORYD_OUTPUT
  10LOCATION('TEST1.DMP')
  11);

表已创建。

SQL>INSERTINTOT_EXTERNALVALUES(1,'A');
INSERTINTOT_EXTERNALVALUES(1,'A')

*第 1 行出现错误:

ORA-30657: 操作在外部组织表上不受支持

Tags:Oracle 特性 利用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接