星期四, 12月 01, 2011

Oracle 10g data pump 簡介


http://blog.xuite.net/jameslu157/Oracle/14241420


Data Pump 是 10g 新功能,號稱可以更快速的進行資料匯出和匯入,可建立db link 同時做匯出匯入,新技術有許多的優點,當然也存在一些缺點,例如 Data Pump 不能直接
export data 至磁帶機上。 Data Pump 的參數眾多,本文將不一一解釋。
詳細說明請參考Oracle Documents。
Data Pump 資料存取方式共有兩種:

‧  Direct path (預設方式)
‧  External table(10g external table 新功能就是可以把資料從 database 轉出到
 external table 成為一個 system file )

 Data Pump 之十大優點:
  Similar look and feel to the old exp/imp
  Can filter on the full range of object types
  Can re-map datafiles and or tablespaces on import
  ''Estimates the export file size (space needed)''
  Parallelizable
  Significantly faster than the traditional exp/imp
  PL/SQL Interface – programmable
  ''A file is not actually required - can import through a network link''
  ''Track in v$session_longops''
  Resumable (interruptible and restartable)

Data Pump 之十大缺點:
  Still generates redo (unlike direct path inserts)
  Aggregation of exported data is not possible (sort only)
  Performance on the server
  Harder to tell what its doing at any given time
  No equivalent to the STATISTICS option
  Cannot be used with sequential media such as tapes and pipes (not
read/written
  serially)
  Only accesses files on the server, never the client
  Oracle directories are required in the DB to access the files
  Does not support COMMIT on imp or CONSISTENT on exp
  If constraints are violated on import, the load is discontinued

首先要知道 Data Pump 是屬於 server 端的 API ,也就是說產生的匯出檔只能存在
 server 端,除非你使用網路模式將資料透過DB-LINK 直接匯入遠端資料庫。
操作Data Pump ,首先必須先建立 directory ,來存放匯出匯入之資料檔。
SQL> create or replace directory datapump_dir as '/export/dump';
Directory created.
SQL> grant read,write on directory datapump_dir  to scott;
Grant succeeded.

[ Data Pump EXPORT ]
$ expdp scott/tiger directory=datapump_dir  dumpfile=scott.dmp
logfile=scott.log

也可以先預估匯出資料所需空間,用 estimate_only=y
$ expdp scott/tiger directory=datapump_dir logfile=scott.log estimate_only=y
使用 parallel 時,記得給多少執行緒就要給多少 output file ,使用 %u 是不錯的選
擇。

$expdp scott/tiger directory=datapump_dir dumpfile=scott%u.dmp
logfile=scott2.log parallel=4

 Data Pump IMPORT
基本上跟原來 imp 觀念差不了多少,過去的 formuser/touser 現在改用 remap_schema
$ impdp test/test directory=datapump_dir dumpfile=scott.dmp
remap_schema=scott:test過去在 import 時,如果 table 已經存在,我們建議會先
 drop table 後再匯入會比較乾淨,現在
Data Pump 多了 TABLE_EXISTS_ACTION 參數可用:
SKIP 預設,跳過已存在的資料
APPEND 新增資料
TRUNCATE 先 truncate 後再匯入資料
REPLACE 先 drop table 後再重新建立資料
我們重新 run 一次上述同樣的匯入程序, test 已經存在相同資料了,預設將會採用
skip模式。
$impdp test/test directory=datapump_dir dumpfile=scott.dmp
remap_schema=scott:test

接下來為 APPEND 模式 ,將相同資料再一次重複載入。
$ impdp test/test directory=datapump_dir dumpfile=scott.dmp
remap_schema=scott:test table_exists_action=append
測試完 Data Pump 常用指令,接著測試應用在 External Table 的實例。 10g Data
Pump 可以讓我們把資料表匯出成 system
file 。
SQL> create table empfile
organization external
(
type oracle_datapump default directory datapump_dir
location ('empfile.dmp')
) as select * from emp
/
Table created.
$ ls empfile.dmp
empfile.dmp
$

現在,我們已經成功把 EMP 資料表卸載匯出到 empfile.dmp 了,雖然這是個 binary
file ,但是可以搬到其他資料庫再次利用 external table 功能讀取。

沒有留言:

LinkWithin-相關文件

Related Posts Plugin for WordPress, Blogger...