天天看點

Oracle 10g expdp/impdp在項目中實踐總結

自 Oracle 10g 版本開始,資料泵 (data dump) 作為一種新的資料移動技術提供出來。使用這個技術工具分别為 expdp 和 impdp 。我們在實際項目中經常使用到它們,如從生産庫向測試庫遷移資料。

我介紹一下這兩個工具的用途、使用方法、以及它們與 9i 的 imp/exp 的差別。

(miki 西遊 @mikixiyou 的文檔,原文連結: http://mikixiyou.iteye.com/blog/1549761 )

expdp 和 impdp 的主要用途有三點,分别是:

1 、實作資料庫的邏輯備份和恢複;

2 、在相同或不同的資料庫的不同使用者之間移動資料庫對象如表定義和資料、函數、存儲過程;

3 、可以和 rman 聯合使用,實作表空間級别的資料快速遷移。

(注,這個用途,我專門在一文中注明了其實作過程: exp/expdp 傳輸表空間和 rman convert 實作大資料量快速遷移

  http://mikixiyou.iteye.com/blog/1489686 )

expdp 和 impdp 的使用中有很多參數選項,不同的選項實作不同的功能。這裡先重點介紹一下 expdp 的主要功能點。

1 、導出某一個使用者,加 schemas

2 、導出一個使用者下導出部分表,加 tables

3 、導出一個使用者下不包括某些表,加 exclude

4 、導出所有表的符合某個條件(如表的前 10000 行)的記錄,加 query

5 、導出某個時間點或 SCN 的資料鏡像,加 flashback_time 或 flashback_scn

這個功能用于 streams 、 ogg 等資料實時同步工具的執行個體化操作。

6 、導出資料庫的中繼資料或全部資料,加 CONTENT={ALL | DATA_ONLY | METADATA_ONLY}

7 、導出資料庫某個表空間的中繼資料,用于表空間快速遷移,加 transport_tablespace=y   tablespaces=tbs_name

8 、限制每個導出檔案的大小,加 filesize

還可以限制每個導出檔案的大小,加并行度,統計導出對象等其他功能。這些功能我日常用的不多,可以參數 expdp –help 。

expdp 工具的使用示例如下:

expdp xxyy/xxyyp SCHEMAS=ebmall directory=test dumpfile=ebmall.dmp logfile=ebmall.log

這是實作将使用者 ebmall 下所有對象導出到目錄 test 下的 ebmall.dmp 檔案中的操作,記錄的日志檔案為 ebmall.log 。

expdp xxyy/xxyyp directory=test dumpfile=xxyy.dmp logfile=xxyy.log EXCLUDE=TABLE:\"IN \(\'CMS_DOC_BODY\',\' MAIL_QUEUE_FILE\',\'S

ERVICE_LOG\',\'MSG_MAIL_HISTORY\',\'MAIL_QUEUE_FILE\'\)\"

這是實作導出一個使用者下除掉部分表之外的所有對象的操作。在 expdp 使用過程中,這三個參數 directory 、 dumpfile 、 logfile 是必須加上。

impdp 工具的功能有很多,主要使用到的功能是 rmap_schema ,參數為 REMAP_SCHEMA=source_schema:target_schema

其他的功能可參考 impdp -help

impdp system/oracl directory=xxyy dumpfile=xxyy.dmp logfile=xxyy.log

在目标庫上,導入前沒有 xxyy 使用者,使用 impdp 導入時可以自動建立。建立使用者的密碼都會和源庫一樣。導入前需要将表空間建立好,大小合适。

如果源庫的 dmp 檔案是使用 system 使用者導出的另一個使用者,則需要加 schemas 選項,指定導入使用者。

如導出該 dmp 檔案的使用者是 xxyy, 那麼導入時我們則需要執行 schemals 參數值

使用方法如下:

impdp system/oracl directory=xxyy schemas=ebmall dumpfile=ebmall.dmp logfile=ebmall.log

10g 的 expdp/impdp 和 exp/imp 的差別,我認為最主要的部分是前者是隻能運作在資料庫伺服器端,後者可以在用戶端或伺服器端同時運作。

這個差別就涉及到跨平台的資料導入導出的問題。