一:數(shù)據(jù)泵提供的主要特性:
1. 支持并行處理導(dǎo)入、導(dǎo)出任務(wù)
2. 支持暫停和重啟動(dòng)導(dǎo)入屋摇、導(dǎo)出任務(wù)
3. 支持通過Database Link的方式導(dǎo)出或?qū)脒h(yuǎn)端數(shù)據(jù)庫(kù)中的對(duì)象
4. 支持在導(dǎo)入時(shí)通過Remap_schema幽邓、Remap_tablespace牵舵,重定向用戶和表空間
5. EXPDP和IMPDP是服務(wù)端的工具程序畸颅,他們只能在ORACLE服務(wù)端使用,不能在客戶端使用兵睛。
6. IMP只適用于EXP導(dǎo)出的文件祖很,不適用于EXPDP導(dǎo)出文件假颇;IMPDP只適用于EXPDP導(dǎo)出的文件骨稿,而不適用于EXP導(dǎo)出文件。
二:Directory對(duì)象
Directory指向操作系統(tǒng)中的一個(gè)路徑形耗。每個(gè)Directory都包含 Read,Write兩個(gè)權(quán)限激涤,可以通過Grant命令授權(quán)給指定的用戶或角色判呕。擁有讀寫權(quán)限的用戶就可以讀寫該Directory對(duì)象指定的操作系統(tǒng)路 徑下的文件侠草。
? ? 5.1) 創(chuàng)建邏輯目錄,該命令不會(huì)在操作系統(tǒng)創(chuàng)建真正的目錄.
? ? ? ? create directory weisi_dump as '/opt/soft/dump';
? ? 5.2) 查看管理理員目錄(同時(shí)查看操作系統(tǒng)是否存在晤碘,因?yàn)镺racle并不關(guān)心該目錄是否存在园爷,如果不存在霞赫,則出錯(cuò))
? ? ? ? select * from dba_directories;
? ? 5.3) 給用戶賦予在指定目錄的操作權(quán)限.
grant read,write on directory weisi_dump to weisi;
三:導(dǎo)入端衰、導(dǎo)出
? ? expdp -help
3.1) 全庫(kù)模式
導(dǎo)入或者導(dǎo)出整個(gè)數(shù)據(jù)庫(kù)旅东,對(duì)應(yīng)impdp/expdp命令中的full參數(shù),只有擁有dba或者 exp_full_database和imp_full_database權(quán)限的用戶才能執(zhí)行腾节。
expdp \"/ as sysdba\" directory=weisi_dump full=y dumpfile=weisi_1_f.dump,weisi_2_f.dump logfile=weisi_f.log parallel=2
impdp \"/ as sysdba\" directory=weisi_dump? dumpfile=weisi_1_f.dump,weisi_2_f.dump logfile=weisi_impdp.log parallel=2
監(jiān)控進(jìn)度:
select? t.sofar/t.totalwork, t.* from v$session_longops t where t.message like '%SYS_EXPORT%';
3.2) Schema模式
導(dǎo)出或?qū)隨chema下的自有對(duì)象庆冕,對(duì)應(yīng)impdp/expdp命令中的Schema參數(shù)劈榨,這是默認(rèn)的操作模式。 如果擁有dba或者 exp_full_database和
imp_full_database權(quán)限的用戶執(zhí)行的話拷姿,就可以導(dǎo)出或?qū)攵鄠€(gè)Schema中的對(duì)象响巢。
expdp \"/ as sysdba\" directory=weisi_dump schemas=weisi,WUZHENXING dumpfile=weisi_1_s.dump,weisi_2_s.dump logfile=weisi_f.log parallel=2
select? t.sofar/t.totalwork, t.* from v$session_longops t where t.message like '%SYS_EXPORT%';
SQL> drop user wuzhenxing cascade;
impdp \"/ as sysdba\" directory=weisi_dump? dumpfile=weisi_1_f.dump,weisi_2_f.dump schemas=wuzhenxing logfile=weisi_impdp.log parallel=2
3.3) 表模式
導(dǎo)出指定的表或者表分區(qū)以及依賴該表的對(duì)象(如該表的索引)
expdp \"/ as sysdba\" directory=weisi_dump tables=weisi.big_rman_t dumpfile=weisi_1_t.dump,weisi_2_t.dump logfile=weisi_f.log parallel=2
select? t.sofar/t.totalwork, t.* from v$session_longops t where t.message like '%SYS_EXPORT%';
impdp \"/ as sysdba\" directory=weisi_dump? dumpfile=weisi_1_f.dump,weisi_2_f.dump tables=wuzhenxing.BIG_RMAN_T logfile=weisi_impdp.log parallel=2
3.4) 表空間模式
導(dǎo)出指定的表空間中的內(nèi)容。對(duì)應(yīng)impdp/expdp中的Tablespaces參數(shù)靶衍,這種模式類似于表模式和 Schema模式的補(bǔ)充颅眶。
expdp \"/ as sysdba\" directory=weisi_dump tablespaces=users dumpfile=weisi_1_tbs.dump,weisi_2_tbs.dump logfile=weisi_f.log parallel=2
impdp \"/ as sysdba\" directory=weisi_dump tablespaces=users dumpfile=weisi_1_tbs.dump,weisi_2_tbs.dump logfile=weisi_f.log parallel=2
3.5) 傳輸表空間模式
對(duì)應(yīng)impdp/expdp中的Transport_tablespaces參數(shù)。這種模式與前面幾種模式最顯著的區(qū) 別是生成的Dump文件中并不包含具 體的邏輯數(shù)據(jù)铡原,
而只導(dǎo)出相關(guān)對(duì)象的元數(shù)據(jù)(即對(duì)象的定義燕刻,可以理解成表的創(chuàng)建語(yǔ)句)剖笙,邏輯數(shù)據(jù)仍然在表空間的數(shù)據(jù)文件中弥咪,
導(dǎo)出時(shí)需要將元數(shù)據(jù)和數(shù)據(jù)文件同 時(shí)復(fù)制到目標(biāo)端服務(wù)器聚至。這種導(dǎo)出方式效率很高,
時(shí)間開銷主要是花在復(fù)制數(shù)據(jù)文件產(chǎn)生的I/O上扳躬。
expdp執(zhí)行傳輸表空間模式的導(dǎo)出,用戶必須 擁有 exp_full_database角色或者DBA角色亏狰。
而通過傳輸表空間模式導(dǎo)入時(shí)骚揍,用戶必須擁有imp_full_database角色或者DBA角 色。
四:過濾數(shù)據(jù)
過濾數(shù)據(jù)主要依賴于Query和Sample兩個(gè)參數(shù)嘲叔。
4.1) Query
expdp \"/ as sysdba\" directory=weisi_dump tables=weisi.big_rman_t dumpfile=weisi_1_t.dump,weisi_2_t.dump logfile=weisi_f.log parallel=2? query="'where object_id < 2000'"
? 4.2) Sample
該參數(shù)用來(lái)指定導(dǎo)出數(shù)據(jù)的百分比锰什,可指定的值的范圍從0.000001到99.999999汁胆,指定該參數(shù)以后嫩码,EXPDP導(dǎo)出將自動(dòng)控制導(dǎo)出的記錄量铸题,如導(dǎo)出big_rman_t表中50%的記錄丢间。
expdp \"/ as sysdba\" directory=weisi_dump tables=weisi.big_rman_t dumpfile=weisi_1_t.dump,weisi_2_t.dump logfile=weisi_f.log parallel=2? Sample=50
過濾對(duì)象
過濾對(duì)象主要依賴于Include和Exclude兩個(gè)參數(shù)烘挫。這兩個(gè)參數(shù)作用正好相反饮六,在這兩個(gè)參數(shù)中喜滨,可以指定你知道的任何對(duì)象類型(如:Package虽风、Procedure辜膝、Table等等)或者對(duì)象名稱(支持通配符)
4.3) Exclude
指定不被包含的對(duì)象類型或者對(duì)象名稱茎毁。指定了該參數(shù)以后忱辅,指定的對(duì)象類型對(duì)應(yīng)的所有對(duì)象都不會(huì)被導(dǎo)入或?qū)С觥?如果被排除的對(duì)象有依賴的對(duì)象墙懂,那么其依賴的 對(duì)象也不會(huì)被導(dǎo)入或?qū)С霰炭狻H纾和ㄟ^Exclude參數(shù)指定不導(dǎo)出表對(duì)象的話嵌灰,不僅指定的表不會(huì)被導(dǎo)出沽瞭,連這些表關(guān)聯(lián)的Index秕脓、Check等都不會(huì)被導(dǎo)出。
expdp \"/ as sysdba\" directory=weisi_dump schemas=weisi,wuzhenxing dumpfile=weisi_1_s.dump,weisi_2_s.dump logfile=weisi_f.log? ? parallel=2 exclude=table:\"in\(\'BIG_RMAN_T\'\)\"
expdp \"/ as sysdba\" directory=weisi_dump schemas=weisi,wuzhenxing dumpfile=weisi_1_s.dump,weisi_2_s.dump logfile=weisi_f.log? ? parallel=2
4.4) Include
與Exclude正好相反儒搭。指定包含的對(duì)象類型或者對(duì)象名稱吠架。object_type子句用于指定對(duì)象的類型,如table,sequence,view,procedure,package等等搂鲫,導(dǎo)入的時(shí)候用的比較多傍药。
expdp <other_parameters> SCHEMAS=scott EXCLUDE=SEQUENCE,TABLE:"IN ('EMP','DEPT')"
impdp <other_parameters> SCHEMAS=scott INCLUDE=PACKAGE,FUNCTION,PROCEDURE,TABLE:"='EMP'"
impdp? \"/ as sysdba\"? directory=weisi_dump schemas=weisi dumpfile=weisi_1_s.dump,weisi_2_s.dump logfile=weisi_impdp.log? include=table:\" in \(\'BIG_RMAN_T\'\)\" parallel=2
常用的過濾SQL表達(dá)式
EXCLUDE=SEQUENCE,VIEW? ? ? ? ? ? ? ? ? ? ? ? ? --過濾所有的SEQUENCE,VIEW
EXCLUDE=TABLE:"IN ('EMP','DEPT')"? ? ? ? ? ? ? --過濾表對(duì)象EMP,DEPT
EXCLUDE=SEQUENCE,VIEW,TABLE:"IN ('EMP','DEPT')" --過濾所有的SEQUENCE,VIEW以及表對(duì)象EMP,DEPT
EXCLUDE=INDEX:"= 'INDX_NAME'"? ? ? ? ? ? ? ? ? --過濾指定的索引對(duì)象INDX_NAME
INCLUDE=PROCEDURE:"LIKE 'PROC_U%'"? ? ? ? ? ? ? --包含以PROC_U開頭的所有存儲(chǔ)過程(_ 符號(hào)代表任意單個(gè)字符)
INCLUDE=TABLE:"> 'E' "? ? ? ? ? ? ? ? ? ? ? ? ? --包含大于字符E的所有表對(duì)象
其它常用操作符 NOT IN, NOT LIKE, <, != 等等
五:高級(jí)過濾
在導(dǎo)出/導(dǎo)入的時(shí)候,我們常常有這樣的需求魂仍,只想導(dǎo)出/導(dǎo)入表結(jié)構(gòu)拐辽,或者只想導(dǎo)出/導(dǎo)入數(shù)據(jù)。
使用 Content參數(shù)擦酌。該參數(shù)有三個(gè)屬性
1) ALL : 導(dǎo)出/導(dǎo)入對(duì)象定義和數(shù)據(jù)俱诸,該參數(shù)的默認(rèn)值就是ALL
2) DATA_ONLY : 只導(dǎo)出/導(dǎo)入數(shù)據(jù)。
3) METADATA_ONLY : 只導(dǎo)出/導(dǎo)入對(duì)象定義赶诊。
過濾已經(jīng)存在的數(shù)據(jù)
導(dǎo)入的表對(duì)象在目標(biāo)庫(kù)中已經(jīng)存在锌唾,就有可能造成數(shù)據(jù)被重復(fù)導(dǎo)入滋捶。數(shù)據(jù)泵提供了一個(gè)新的參數(shù)
Table_exists_action,有以下幾個(gè)參數(shù)值:
1) SKIP : 跳過該表,繼續(xù)處理下一個(gè)對(duì)象可缚。該參數(shù)默認(rèn)就是SKIP描姚。值得注意的是怯邪,如果你同時(shí)指定了CONTENT參數(shù)為Data_only的話,SKIP參數(shù)無(wú) 效,默認(rèn)為APPEND梯皿。
2) APPEND : 向現(xiàn)有的表中添加數(shù)據(jù)百姓。
3) TRUNCATE : TRUNCATE當(dāng)前表,然后再添加記錄。使用這個(gè)參數(shù)需要謹(jǐn)慎椿猎,除非確認(rèn)當(dāng)前表中的數(shù)據(jù)確實(shí)無(wú)用症革。否則可能造成數(shù)據(jù)丟失。
4) REPLACE : 刪除并重建表對(duì)象,然后再向其中添加數(shù)據(jù)。值得注意的是,如果同時(shí)指定了CONTENT參數(shù)為Data_only的話,REPLACE參數(shù)無(wú)效碉怔。
重定義表的Schema或表空間
1) REMAP_SCHEMA : 重定義對(duì)象所屬Schema該參數(shù)的作用類似IMP中的Fromuser+Touser,支持多個(gè)Schema的轉(zhuǎn)換芹啥,語(yǔ)法如下:
REMAP_SCHEMA=Source_schema:Target_schema
select * from dba_objects t where t.owner='WEISI';
select * from dba_objects t where t.owner='WUZHENXING';
expdp \"/ as sysdba\" directory=weisi_dump schemas=weisi dumpfile=weisi_1_s.dump,weisi_2_s.dump logfile=weisi_f.log parallel=2
impdp \"/ as sysdba\" directory=weisi_dump dumpfile=weisi_1_s.dump,weisi_2_s.dump? logfile=weisi_impdp.log parallel=2 REMAP_SCHEMA=weisi:wuzhenxing
select * from dba_objects t where t.owner='WUZHENXING';
2) REMAP_TABLESPACE : 重定義對(duì)象所在的表空間。
該參數(shù)用來(lái)重映射導(dǎo)入對(duì)象存儲(chǔ)的表空間,支持同時(shí)對(duì)多個(gè)表空間進(jìn)行 轉(zhuǎn)換,相互間用逗號(hào)分割蚯涮。語(yǔ)法如下:
EMAP_TABLESPACE=Source_tablespace:Target_tablespace[,Source_tablespace:Target_tablespace]
六:優(yōu)化導(dǎo)入/導(dǎo)出效率
6.1) 對(duì)于導(dǎo)出的parallel
? 數(shù)據(jù)大小/parallel=filesize
6.2) 對(duì)于導(dǎo)入的parallel
? 不影響數(shù)據(jù)庫(kù)的前提下喘批, parallel越大越好