oracle_datapump建立外部表案例

pwz1688發表於2014-04-27
一、datapump建立外部表,資料來源於內部實體表
--首先建立 scott.countries實體表,用於做實驗
SQL> create table scott.countries(
  2 country_id number,
  3 country_name varchar2(30),
  4 country_reigion varchar2(30)
  5 );
Table created.
SQL> insert into scott.countries values(1,'AMERICA','america');
1 row created.
SQL> insert into scott.countries values(2,'china','zhuzhou');
1 row created.
SQL> insert into scott.countries values(3,'JAPAN','dongjing');
1 row created.
SQL> commit;
Commit complete.
--參考官方datapump建立外部表的案例(其資料來源於內部實體表),如下:
oracle_datapump建立外部表案例
做以下修改後(紅色字型部分內容),建立外部表
 CREATE TABLE scott.countries_ext
    ORGANIZATION EXTERNAL
    (
      TYPE ORACLE_DATAPUMP
      DEFAULT DIRECTORY dir --生成dmp檔案存放路徑
      LOCATION ('countries_ext.dmp') --生成外部檔案的名稱
    )
    AS SELECT * FROM scott.countries; --資料來源於實體表
--執行以上建立外部表的語句
SQL> CREATE TABLE scott.countries_ext
  2 ORGANIZATION EXTERNAL
  3 (
  4 TYPE ORACLE_DATAPUMP
  5 DEFAULT DIRECTORY dir
  6 LOCATION ('countries_ext.dmp')
  7 )
  8 AS SELECT * FROM scott.countries;
Table created.
SQL> select * from scott.countries_ext;
COUNTRY_ID COUNTRY_NAME COUNTRY_REIGION
---------- ------------------------------ ------------------------------
         1 AMERICA america
         2 china zhuzhou
         3 JAPAN dongjing
由此可見,建立外部實體表成功。
--檢視dir外部檔案存放路徑,並檢查是否生成了countries_ext.dmp檔案
SQL> select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
---------- -------------------- --------------------------------------------------
SYS DATA_PUMP_DIR /u01/app/oracle/product/10.2.0/db_1/rdbms/log/
SYS DIR /home/oracle/dir
[oracle@gc1 dir]$ cd /home/oracle/dir
[oracle@gc1 dir]$ ls
COUNTRIES_EXT_14214.log countries_ext.dmp ldr.ctl ldr.log PROD_MY_12177.log PROD_MY_14213.log PROD_MY_14214.log prod_my.data
二、datapump建立外部表,資料來源於外部dmp檔案
--gc2機器建立外部表存放檔案目錄,同gc1
[oracle@gc2 dbs]$ cd /home/oracle
[oracle@gc2 ~]$ mkdir dir
[oracle@gc2 ~]$ cd dir
--資料庫建立對應檔案目錄,並賦予操作許可權給所有使用者
SQL> create directory dir as '/home/oracle/dir';
Directory created.
SQL> grant all on directory dir to public;
Grant succeeded.

--將上個案例生成的countries_ext.dmp複製一份至遠端機器gc2上
[oracle@gc1 dir]$ cd /home/oracle/dir
[oracle@gc1 dir]$ ls
COUNTRIES_EXT_14214.log countries_ext.dmp ldr.ctl ldr.log PROD_MY_12177.log PROD_MY_14213.log PROD_MY_14214.log prod_my.data
[oracle@gc1 dir]$ scp countries_ext.dmp gc2:/home/oracle/dir
oracle@gc2's password:
countries_ext.dmp   
--檢查複製是否成功
[oracle@gc2 dir]$ pwd
/home/oracle/dir
[oracle@gc2 dir]$ ls
countries_ext.dmp
--使用datapump建立外部表,且資料來源於外部檔案dmp
SQL> CREATE TABLE scott.countries_ext
  2 (COUNTRY_ID NUMBER,
  3 COUNTRY_NAME VARCHAR2(30),
  4 COUNTRY_REIGION VARCHAR2(30)
  5 )
  6 ORGANIZATION EXTERNAL
  7 (
  8 TYPE ORACLE_DATAPUMP
  9 DEFAULT DIRECTORY dir
 10 LOCATION ('countries_ext.dmp')
 11 );
Table created.
SQL> select * from scott.countries_ext;
COUNTRY_ID COUNTRY_NAME COUNTRY_REIGION
---------- ------------------------------ ------------------------------
         1 AMERICA america
         2 china zhuzhou
         3 JAPAN dongjing
由此可見,利用外部檔案,使用datapump方式建立外部表可行。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21251711/viewspace-1150577/,如需轉載,請註明出處,否則將追究法律責任。

相關文章