Oracle10g新特性——利用外部表解除安裝資料

yangtingkun發表於2008-08-13

今天在看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

 
 
   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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章