熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle10g新特性:利用外部表卸載數據

2013-11-13 22:20:34  來源: Oracle 

  今天在看Oracle的CONCEPT文檔時發現Oracle的外部表也可以用來卸載數據了

  從中開始Oracle增加了外部表的一個新的訪問驅動ORACLE_DATAPUMP而再次之前只有一個默認的驅動ORACLE_LOADER

  使用ORACLE_DATAPUMP驅動帶來的一個優點是可以利用外部表將數據庫中的數據卸載到磁盤文件中而這是及以前版本所無法做到的

  下面看一個最簡單的例子

    SQL> CREATE TABLE T_EXTERNAL
   (
   ID
   NAME
   )
   ORGANIZATION EXTERNAL
   (
   TYPE ORACLE_DATAPUMP
   DEFAULT DIRECTORY D_OUTPUT
   LOCATION(TESTDMP)
   )
   AS SELECT ROWNUM RN TNAME
   FROM TAB;
  

  表已創建
  在這張外部表創建的同時在D_OUTPUT所指向的操作系統目錄下生成了一個TESTDMP二進制文件
  顯示這個二進制文件中的可顯示字符

  
 $ strings TESTDMP 
  IBMPC/WIN_NT 
  ZHSGBK 
  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 
   
  T 
   
   
   
   
  ZHSGBK 
  ALUTF 
  +: 
  YANGTK 
  T_EXTERNAL 
   
   
  ID 
   
   
   
   
   
   
   
   
   
  NAME 
   
   
   
   
   
   
   
  T_LOG< 
  TEST_LOB< 
  T_COMPRESS< 
  T_TEMP
  T_RECORD< 
  T_SESSION_STAT< 
  T_TEMP< 
  T_NO_EXISTS_BEFORE< 
  T_CHAR< 
  SYS_EXPORT_SCHEMA_
  T_EXTERNAL< 
  T_LOAD_SPACE< 
  T_LEVEL< 
  T_LEVEL
  CHAINED_ROWS< 
  T_TREE  

  這個二進制文件可以用於在其他數據庫中創建外部表

   SQL> CREATE TABLE T_EXTERNAL
   (
   ID NUMBER
   NAME VARCHAR()
   )
   ORGANIZATION EXTERNAL
   (
   TYPE ORACLE_DATAPUMP
   DEFAULT DIRECTORY D_OUTPUT
   LOCATION(TESTDMP)
   );

  表已創建

   SQL> SELECT * FROM T_EXTERNAL;
  ID NAME
   
   T_LOG
   TEST_LOB
   T_COMPRESS
   T_TEMP
   T_RECORD
   T_SESSION_STAT
   T_TEMP
   T
   T_NO_EXISTS_BEFORE
   T_CHAR
   SYS_EXPORT_SCHEMA_
   T_EXTERNAL
   T_LOAD_SPACE
   T_LEVEL
   T_LEVEL
   CHAINED_ROWS
   T_TREE

  已選擇

  唯一可惜的是Oracle只能將數據寫為二進制格式因此可以考慮使用這種方法進行數據遷移或發布不過想利用這種方法來生成文本報表也是行不通的

  最後提一下外部表是只讀表可以利用外部表卸載數據不過必須在建表時完成一旦表建立成功外部表就變成不可修改了

    SQL> INSERT INTO T_EXTERNAL VALUES ( A);
 INSERT INTO T_EXTERNAL VALUES ( A)

  *第 行出現錯誤:

  ORA: 操作在外部組織表上不受支持

  SQL> DROP TABLE T_EXTERNAL;

  表已刪除

     SQL> CREATE TABLE T_EXTERNAL
   (
   ID NUMBER
   NAME VARCHAR()
   )
   ORGANIZATION EXTERNAL
   (
   TYPE ORACLE_DATAPUMP
   DEFAULT DIRECTORY D_OUTPUT
   LOCATION(TESTDMP)
   );

  表已創建

   SQL> INSERT INTO T_EXTERNAL VALUES ( A);
INSERT INTO T_EXTERNAL VALUES ( A)

  *第 行出現錯誤:

  ORA: 操作在外部組織表上不受支持


From:http://tw.wingwit.com/Article/program/Oracle/201311/18827.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.