寫在前面的話:
我們知道調用資料泵的方式可以有3種,在這裡我絕對不會使用命令列而是首推指令碼方式
放棄命令列的理由大概有這些:
① 作業系統對CLI字元數的限制
② 令人痛恨的轉義符
③ 無法跨平台重用
④ 官方文檔到處鼓吹用指令碼方式
㈠ 過濾對象/資料篇
⑴ 過濾對象
INCLUDE
EXCLUDE和INCLUDE用法相同,這裡就談INCLUDE
文法
INCLUDE = object_type[:name_clause] [, ...]
object_type:常用有TABLE、INDEX、CONSTRAINT、GRANT,更多的我們可以查閱
database_export_objects,schema_export_objects,table_export_objects
name_clause:sql語句
相關的索引、約束等都會很講義氣地被一起匯出
例子
題目:匯出所有以 emp 開頭的表
參數檔案寫法如下:
[Oracle@bogon ~]$ cat hr.par
SCHEMAS=HR
DUMPFILE=hr.dmp
DIRECTORY=dmpdir
LOGFILE=hr.log
INCLUDE=TABLE:"like 'EMP%'"
這個檔案裡,INCLUDE也可以這麼寫
INCLUDE=TABLE:"IN (select table_name from user_tables where table_name like 'EMP%')"
⑵ 過濾資料
QUERY
文法
QUERY = [schema.][table_name:] query_clause
該參數和以下幾個為互斥關係
CONTENT=METADATA_ONLY
ESTIMATE_ONLY
TRANSPORT_TABLESPACES
例子
題目:匯出部門號為50,員工號大於128的所有員工資料
參數檔案寫法如下:
[oracle@bogon ~]$ cat hr.par
SCHEMAS=HR
DUMPFILE=hr02.dmp
DIRECTORY=dmpdir
LOGFILE=hr02.log
INCLUDE=TABLE:"IN ('EMPLOYEES','DEPARTMENTS')"
QUERY=EMPLOYEES:"where employee_id>=128",DEPARTMENTS:"where department_id=20"
㈡ 並行匯出篇
並行設定的結果無非3種:變得更好、沒有變化、變得更差
效率是否得到提高,並不取決於你設定了多碉堡的參數,參數和參數值是否合適方為根本
並行需要成本,因為並行之前需對伺服器資源綜合權衡,計算並行,分配任務
並行設定是門藝術,因為PARALLEL經常是要跟FILESIZE,DUMPFILE一起考慮
下面是官方文檔給的一個並行最佳化執行個體:
expdp hr/hr FULL=y DUMPFILE=dpump_dir1:full1%U.dmp, dpump_dir2:full2%U.dmp
FILESIZE=2G PARALLEL=3 LOGFILE=dpump_dir1:expfull.log JOB_NAME=expfull
另外,並行度的設定不應該超過CPU數量的2倍
sys@ORCL> show parameter cpu
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cpu_count integer 1
By DBA_WaterBin
2013-09-05
GOOD Luck
通過expdp&impdp把11g的資料移轉到10g平台的要點
Oracle Data Pump使用範例及部分注意事項(expdp/impdp)
Oracle datapump expdp/impdp 匯入匯出資料庫時hang住
expdp/impdp做Oracle 10g 到11g的資料移轉