exp/expdp與imp/impdp的區別

許願流星1號發表於2014-11-20
在平常備庫和資料庫遷移的時候,當遇到大的資料庫的時候在用exp的時候往往是需要好幾個小時,耗費大量時間。oracle10g以後可以用expdp來匯出資料庫花費的時間要遠小於exp花費的時間,而且檔案也要小很多。

匯出命令上的區別:
1.將scott和system使用者匯出
exp system/manager@prod file=d:\exp.dmp owner=(system.scott)
Expdp system/manager DIRECTORY=hehe DUMPFILE=tab.dmp  SCHEMAS=scott,system
注:如果這樣執行expdp,會提示
結果報錯:
ORA-39002: 操作無效
ORA-39070: 無法開啟日誌檔案。
ORA-39087: 目錄名 hehe 無效

因為對於system來說,它看不到hehe的存在,需要建立,並且授權
create directory dump_dir as 'D:\';
grant read,write on directory hehe to system
SELECT * FROM dba_directories;  可以檢視下建立了哪些目錄

下邊scott使用者就不能用hehe目錄了,得重新建立其他的,並授權。
2.將scott使用者下的emp\dept表匯出
exp scott/tiger@prod file=d:\exp_tab.dmp tables=(emp,dept)
Expdp scott/tiger DIRECTORY=hehe DUMPFILE=tab.dmp TABLES=dept,emp logfile=tab.log 如果這裡你寫成了log=tab.log,是會自動給你換成正確的命令,不用擔心

3匯出資料庫
exp system/manager@prod  full=y file=d:\full.dmp log=d:\full.log
expdp system/manager direcotry=full dumpfile=full.dmp logfile=full.log full=y  ----dumpfile和logfile絕對不能加路徑

匯入命令上的區別:
1.將scott使用者匯入另臺伺服器下的scott使用者裡
imp system/manager@test file=e:\exp.dmp fromuser=scott touser=scott log=e:\imp.log
impdp system/manager directory=hehe dumpfile=expdp.dmp remap_schema=’scott’:'scott’ logfile=exp.log;
impdp system/manager directory=hehe dumpfile=expdp.dmp remap_schema=’scott’:'scott’,'hr:hr' logfile=exp.log;---匯入多使用者
2將scott使用者下的dept、emp匯入到另一臺伺服器的scott使用者下
imp scott/tiger@test file=e:\tab.dmp tables=(emp,dept)
impdp scott/tiger directory=hehe dmpfile=tab.dmp tables=emp,dept

3匯入資料庫
imp system/manager@test full=y file=e:\dull.dmp log=e:\full.log
impdp system/manager directory=hehe dumpfile=full.dmp full=y logffile=full.log
用資料泵impdp時,要注意這兩個引數,尤其是你要匯入的庫已經存在了這些物件,如果不加這些引數,是會跳過的
.reuse_datafiles預設N  建立表空間時覆蓋原有資料檔案
REUSE_DATAFIELS={Y | N}

TABLE_EXISTS_ACTION   匯入物件已存在時執行的操作。
有效關鍵字: (SKIP)跳過, APPEND追加, REPLACE替換 和 TRUNCATE截斷。
TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | FRPLACE }
當設定該選項為SKIP時,匯入作業會跳過已存在表處理下一個物件;
當設定為APPEND時,會追加資料,
為TRUNCATE時,匯入作業會截斷表,然後為其追加新資料;
當設定為REPLACE時,匯入作業會刪除已存在表,重建表並追加資料,
注意,TRUNCATE選項不適用與簇表和NETWORK_LINK選項
總結expdp和impdp的優勢
exp/imp與expdp/impdp區別:
(1) 把使用者usera的物件導到使用者userb,用法區別在於fromuser=usera touser=userb ,remap_schema=’usera’:'usera’ 。
例如:imp system/passwd fromuser=usera touser=userb file=/oracle/exp.dmp log=/oracle/exp.log;
impdp system/passwd directory=expdp dumpfile=expdp.dmp remap_schema=’usera’:'userb’ logfile=exp.log;
(2) 更換表空間,用exp/imp的時候,要想更改表所在的表空間,需要手工去處理一下,
如alter table xxx move tablespace_new之類的操作。
用impdp只要用remap_tablespace=’tabspace_old’:'tablespace_new’
(3) 當指定一些表的時候,使用exp/imp 時,tables的用法是 tables=(‘table1′,’table2′,’table3′)。
expdp/impdp的用法是tables=’table1′,’table2′,’table3′
(4) 是否要匯出資料行
exp (ROWS=Y 匯出資料行,ROWS=N 不匯出資料行)
expdp content(ALL:物件+匯出資料行,DATA_ONLY:只匯出物件,METADATA_ONLY:只匯出資料的記錄)
(5) expdp是[10g]的新特性而且只能在伺服器執行。而exp/imp是通用的。
(6) oracle11g中有個新特性,當表無資料時,不分配segment,以節省空間,所以exp導不出空表。解決的辦法是用expdp, 當然也可以設定deferred_segment_creation 引數 或者 insert一行,再rollback,但是這樣很麻煩。

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

相關文章