標籤:oracle 匯入 匯出
說明
Oracle匯入匯出命令主要有EXPDP和IMPDP、EXP和IMP,區別如下:EXP和IMP是用戶端工具程式,它們既可以在用戶端使用,也可以在服務端使用。EXPDP和IMPDP是服務端的工具程式,他們只能在ORACLE服務端使用,不能在用戶端使用。IMP只適用於EXP匯出的檔案,不適用於EXPDP匯出檔案;IMPDP只適用於EXPDP匯出的檔案,而不適用於EXP匯出檔案。expdp或impdp命令時,可暫不指出使用者名稱/密碼@執行個體名as 身份,然後根據提示再輸入,如:expdp schemas=scott dumpfile=test.dmp DIRECTORY=testdata; 兩個命令都直接在CMD命令中執行。
一 、EXPDP和IMPDP命令
1.1、建立邏輯目錄,該命令不會在作業系統建立真正的目錄,最好以system等管理員建立。
create directory testdata as ‘d:\test\dump‘;
查看管理理員目錄(同時查看作業系統是否存在,因為Oracle並不關心該目錄是否存在,如果不存在,則出錯)
select * from dba_directories;
給scott使用者賦予在指定目錄的操作許可權,最好以system等管理員賦予。
grant read,write on directory testdata to scott;
1.2、匯出資料
1)按使用者導
expdp scott/[email protected] schemas=scott dumpfile=test.dmp DIRECTORY=testdata ;
2)並行進程parallel
expdp scott/[email protected] directory=testdata dumpfile=test.dmp parallel=40 job_name=testjob
3)按表名導
expdp scott/[email protected] TABLES=emp,dept dumpfile=test.dmp DIRECTORY=testdata ;
4)按查詢條件導
expdp scott/[email protected] directory=testdata dumpfile=test.dmp Tables=emp query=‘WHERE deptno=20‘;
5)按資料表空間導
expdp system/manager DIRECTORY=testdata DUMPFILE=test.dmp TABLESPACES=temp,example;
6)導整個資料庫
expdp system/manager DIRECTORY=testdata DUMPFILE=full.dmp FULL=y;
1.3、匯入資料
1)導到指定使用者下
impdp scott/tiger DIRECTORY=testdata DUMPFILE=test.dmp SCHEMAS=scott;
2)改變表的owner
impdp system/manager DIRECTORY=testdata DUMPFILE=test.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
3)匯入資料表空間
impdp system/manager DIRECTORY=testdata DUMPFILE=test.dmp TABLESPACES=example;
4)匯入資料庫
impdb system/manager DIRECTORY=testdata DUMPFILE=full.dmp FULL=y;
5)追加資料
impdp system/manager DIRECTORY=testdata DUMPFILE=test.dmp SCHEMAS=system TABLE_EXISTS_ACTION
二、EXP和IMP命令
2.1、EXP命令
有三種主要的方式(完全、使用者、表)
1、完全:
EXP SYSTEM/MANAGER BUFFER=64000 file=D:\all.dmp log=D:\all.log FULL=Y
如果要執行完全匯出,必須具有特殊的許可權
2、使用者模式:
EXP test/test BUFFER=64000 FILE=D:\test.DMP log=D:\test.log OWNER=test
這樣使用者test的所有對象被輸出到檔案中。
3、表模式:
EXP test/test BUFFER=64000 FILE=D:\test.DMP log=D:\test.log OWNER=test TABLES=(test) 這樣使用者test的表test就被匯出
2.2、IMP命令
具有三種模式(完全、使用者、表)
1、完全:
IMP SYSTEM/MANAGER BUFFER=64000 FILE=D:\FULL.DMP log=D:\impfull.log FULL=Y
2、使用者模式:
IMP test/test BUFFER=64000 FILE=D:\test.DMP log=D:\imptest.log FROMUSER=test TOUSER=test
這樣使用者test的所有對象被匯入到檔案中。必須指定FROMUSER、TOUSER參數,這樣才能匯入資料。
3、表模式:
EXP test/test BUFFER=64000 FILE=D:\test.DMP log=D:\imptest.log OWNER=test TABLES=(test)
這樣使用者test的表test就被匯入。
2.3 關於參數ignore=y
如果用了參數ignore=y, 會把exp檔案內的資料內容匯入;如果表有唯一關鍵字的約束條件, 不合條件將不被匯入;如果表沒有唯一關鍵字的約束條件, 將引起記錄重複
解釋:
當要匯入資料庫中已經存在了某個表(test),如果該表沒有唯一性限制式,那麼在匯入時加參數ignore=y,則會把資料完全匯入到表中,而且不報錯。
當表已經存在了唯一性限制式,特別是主鍵的約束,那麼在匯入時,只匯入主鍵中不存在的記錄. 匯入處理程序中會有警告.
利用這個原則可以做一個增量匯入.
三、效能效率對比(直接引用別人的文章)
3.1 匯出效能對比
EXP常規模式、EXP直接路徑模式和EXPDP三種方式匯出的效能對比
1) 首先是EXP的常規路徑匯出:
exp zhejiang/zhejiang file=/data1/zj_regular.dmp buffer=20480000
常規EXP匯出方式執行了1小時24分鐘。
2) 直接路徑匯出方式:
exp zhejiang/zhejiang file=/data1/zj_direct.dmp buffer=20480000
recordlength=65535 direct=y
直接路徑匯入用時18分鐘,比常規路徑匯出速度有一個明顯的提高。
3) 資料泵的匯出速度。
expdp zhejiang/zhejiang dumpfile=zj_datapump.dp directory=d_test schemas=zhejiang
資料泵的匯出時間僅用了14分鐘,比直接路徑匯入方式還快了20%多。而且觀察三個匯出檔案的大小可以發現,匯出速度越快對應的檔案也越小,其中資料泵的匯出方式得到的檔案要比EXP方式小將近1.5G。
3.2 匯入效能對比
IMP和IMPDP匯入效能對比
1) IMP的匯入速度:
imp zhejiang/zhejiang file=/data1/zj_regular.dmp full=y buffer=20480000 log=/data1/zj_regular.log
IMP匯入花費了3小時17分鐘,
2) IMPdp的匯入速度:
impdp zhejiang/zhejiang DUMPFILE=zj_datapump.dp DIRECTORY=d_test FULL=y LOGFILE=zj_datapump.log
資料泵的匯入操作居然花了3個小時8分鐘的時間,和IMP的匯入速度十分接近,看來並非所有情況下都像Oracle描述的那樣,資料泵的匯入比普通匯入效率有大幅度的提高。
測試中發現IMPDP的匯入速度和IMP匯入速度相差無幾。而Oracle在介紹資料泵的時候,提到IMPDP的匯入速度最高是IMP的10倍。不過好在IMPDP還是可以最佳化調整的,那就是通過設定PARALLEL來提高IMPDP的並行度。
首先還是看一下CPU的數量:
SQL> show parameter cpu
由於資料庫伺服器的CPU個數為2,下面嘗試設定PARALLEL為2來進行匯入
impdp zhejiang/zhejiang DUMPFILE=zj_datapump.dp DIRECTORY=d_test FULL=y LOGFILE=zj_datapump.log parallel=2
採用並行度為2的匯入方式,發現速度果然提高了很多。並行度為1的匯入速度是3小時8分鐘,而現在用了不到2個半小時。
由於並行度設定不應該超過CPU數的2倍,因此嘗試平行度3和4的匯入,匯入時間和並行度2十分接近。看來已經無法再使用通過提高並行度的方法來提高效能了。
1) 先看直接匯出的效能:
$ expdp zhejiang/zhejiang directory=d_test dumpfile=zhejiang.dp
整個匯出操作大概用了14分半,
2) 嘗試使用並行度2進行匯出,這時仍然設定一個匯出的資料檔案:
$ expdp zhejiang/zhejiang directory=d_test dumpfile=zhejiang_p2_1file.dp parallel=2
整個匯入處理程序不到14分鐘,不過這個效能的提升實在不是很明顯。不過這是有原因的,由於設定了並行度,兩個進程在同時執行匯出操作,但是二者要將匯出的資料寫入同一個資料檔案中,因此必然會導致資源的爭用
3) 仍然使用並行度2,但是同時設定兩個資料檔案再次檢查匯出效能:
$ expdp zhejiang/zhejiang directory=d_test dumpfile=zhejiang_p2_2file1.dp,zhejiang_p2_2file2.dp parallel=2
這次匯出僅僅用了10分半,匯出的效率大大的提高。
4) 測試一下並行度4,分別匯出到4個資料檔案中:
用了9分鐘整匯出完成,設定成並行度4仍然可以獲得一定的效能提升,但是並不明顯了,這主要是由於整個效能的瓶頸已經不是單個進程的處理能力,多半效能的瓶頸已經變成了磁碟IO瓶頸,此時單單靠增加並行度已經無法明顯提升效能了。
本文出自 “技術成就夢想” 部落格,請務必保留此出處http://pizibaidu.blog.51cto.com/1361909/1852206
Oracle常用匯出匯出命令及效能效率對比