自 Oracle 10g 版本開始,資料泵 (data dump) 作為一種新的資料移動技術提供出來。使用這個技術工具分別為 expdp 和 impdp 。我們在實際項目中經常使用到它們,如從生產庫向測試庫遷移資料。
我介紹一下這兩個工具的用途、使用方法、以及它們與 9i 的 imp/exp 的區別。
expdp 和 impdp 的主要用途有三點,分別是:
1 、實現資料庫的邏輯備份和恢複;
2 、在相同或不同的資料庫的不同使用者之間移動資料庫物件如表定義和資料、函數、預存程序;
3 、可以和 rman 聯合使用,實現資料表空間層級的資料快速遷移。
(注,這個用途,我專門在一文中註明了其實現過程: exp/expdp 傳輸資料表空間和 rman convert 實現大資料量快速遷移
)
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 qlzq/qlzqp SCHEMAS=ebmall directory=test dumpfile=ebmall.dmp logfile=ebmall.log
這是實現將使用者 ebmall 下所有對象匯出到目錄 test 下的 ebmall.dmp 檔案中的操作,記錄的記錄檔為 ebmall.log 。
expdp qlzq/qlzqp directory=test dumpfile=qlzq.dmp logfile=qlzq.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=qlzq dumpfile=qlzq.dmp logfile=qlzq.log
在目標庫上,匯入前沒有 qlzq 使用者,使用 impdp 匯入時可以自動建立。建立使用者的密碼都會和源庫一樣。匯入前需要將資料表空間建立好,大小合適。
如果源庫的 dmp 檔案是使用 system 使用者匯出的另一個使用者,則需要加 schemas 選項,指定匯入使用者。
如匯出該 dmp 檔案的使用者是 qlzq, 那麼匯入時我們則需要執行 schemals 參數值
使用方法如下:
impdp system/oracl directory=qlzq schemas=ebmall dumpfile=ebmall.dmp logfile=ebmall.log
10g 的 expdp/impdp 和 exp/imp 的區別,我認為最主要的部分是前者是只能運行在資料庫伺服器端,後者可以在用戶端或伺服器端同時運行。
這個區別就涉及到跨平台的資料匯入匯出的問題。
更多Oracle相關資訊見Oracle 專題頁面 http://www.bkjia.com/topicnews.aspx?tid=12