EXPDP/IMPDP工具的使用

kingsql發表於2016-04-06

目錄:

         1. oracle資料庫匯入匯出操作的注意事項
         2. 使用expdp/impdp工具的前提準備
         3. 常用語句
         4. expdp/impdp 工具常用引數介紹及示例

---------------------正文----------------

一。匯入匯出時的注意事項:
1. 檢查資料庫版本(用於決定匯出時生成為哪個版本的dmp標頭檔案)
    select version from v$instance;
    也可以用sqlplus -v 檢視。
2. 檢查資料量及磁碟空間(決定採取什麼樣的方式匯出及匯入)
3. 檢查字符集是否一致(字符集不一致,不能匯入)
     select userenv('language') from dual;

二. 使用資料泵的前提
     資料庫裡必須有一個directory,用於儲存匯出的檔案(dmp檔案)日誌等。
--建立目錄

create directory DUMP_DIR as '&PATH';

--檢視目錄
select * from dba_directories;

--授權其他使用者使用該目錄
grant read,write on directory dpdata1 to scott;

三. 常用語句
expdp匯出
1)匯出表
expdp  tables=dbmon.lihaibo_exp dumpfile=sms.dmp DIRECTORY=dump_dir;
2)併發匯出parallel,指定job名
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=4 job_name=scott3
3)全表
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;
4)匯出表,並指定表中的內容
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
5)匯出表空間
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
6)匯出全庫
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;

impdp匯入
1) 全使用者匯入
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;
2) 使用者物件遷移
impdp system/manager DIRECTORY=dump_dir DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system; (SCOTT為原使用者,system為目標使用者)
3) 匯入指定表空間
impdp system/manager DIRECTORY=dump_dir DUMPFILE=tablespace.dmp TABLESPACES=example;
4) 全庫匯入
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
5) 表已存在的處理
impdp system/manager DIRECTORY=dump_dir DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=append;
6) 表空間遷移
impdp system/manager directory=dump_dir dumpfile=remap_tablespace.dmp logfile=remap_tablespace.log remap_tablespace=A:B (A為原表空間名,B為指定的目標表空間名)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
四。Expdp/Impdp引數及示例

(前面寫幾個例項,後面我們不寫了中不?寫例項好費勁啊~鍵盤快塊啦~)


1. ATTACH
當我們使用ctrl+C 退出互動式命令時,可心使用attach引數重新進入到互動模式
ATTACH=[schema_name.]job_name
Schema_name使用者名稱,job_name任務名,如:
Expdp scott/tiger ATTACH=scott.export_job

2. CONTENT
此引數的使用,限制了匯出的內容,包括三個級別:全部/資料/後設資料(結構),如下:
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
ALL           -- 匯出所有資料,包括後設資料及資料
DATA_ONLY     -- 只匯出資料
METADATA_ONLY -- 只包含後設資料
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump
CONTENT=METADATA_ONLY

3. DIRECTORY
DIRECTORY=dump_dir, 此路徑可以理解為實際絕對路徑在oracle資料庫裡的別名,是匯出檔案的儲存位置
路徑的建立: create directory &DIRECTORY_NAME AS '&PATH';
檢視已存在路徑: select  * from dba_directories;
Expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=lhb.dump

4. DUMPFILE
 此引數使用者命名匯出檔案,預設是 expdat.dmp. 檔案的儲存位置如果在檔名前沒有指定directory,則會預設儲存到directory引數指定的路徑下。
 引數使用格式 :  DUMPFILE=[dump_dir:]file_name
Expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=dump_dir1:a.dmp

5. ESTIMATE
   在使用Expdp進行匯出時,Expdp需要計算匯出資料大小容量,Oracle可以透過兩種方式進行容量估算,一種是透過資料塊(blocks)數量、一種是透過統計資訊中記錄的內容(statistics)估算.
   引數使用格式:EXTIMATE={BLOCKS | STATISTICS}

Expdp scott/tiger TABLES=emp ESTIMATE=STATISTICS DIRECTORY=dump_dir DUMPFILE=halberd.dump
Expdp scott/tiger TABLES=emp ESTIMATE=BLOCKS DIRECTORY=dump_dir DUMPFILE=halberd.dump

6. EXTIMATE_ONLY
    此引數用於統計匯出的資料量大小及統計過程耗時長短。
EXTIMATE_ONLY={Y | N}
Expdp scott/tiger ESTIMATE_ONLY=y NOLOGFILE=y directory=dump_dir schemas=halberd

7. EXCLUDE
    此引數用於排除不需要匯出的內容,如我們進行全庫匯出,但是不需要匯出使用者scott,此時需要在exlude後先指定排除型別為schema,再指定具體的schema。具體使用方法見include引數
EXCLUDE=object_type[:name_clause] [,object_type[:name_clause] ]
Object_type物件型別,如:table,view,procedure,schema等
name_clause指定名稱的語句,如果不具體指定是哪個物件,則此類所有物件都不匯出
EXCLUDE與INCLUDE的用法是一樣的
Expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=halberd.dup EXCLUDE=VIEW

8. FILESIZE

    用於指定單個匯出的資料檔案的最大值,與%U一起使用。比如,我們需要匯出100G的資料,檔案全部儲存到一個檔案內,在檔案傳輸時,會耗費大量的時間,此時我們就可以使用這個引數,限制每個檔案的大小,在傳輸匯出檔案時,就可以多個檔案同時傳送,大大的節省了檔案傳輸時間。提高了工作的效率。
  FILESIZE=integer[B | K | M | G]
   Expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=halberd%U.dup FILESIZE=20g

9. FLASHBACK_SCN/FLASHBACK_TIME

    基於undo 及scn號(時間點)進行的資料匯出。使用此引數設定會進行flashback query的功能,查詢到對應指定的SCN時的資料,然後進行匯出。只要UNDO不被覆蓋,無論資料庫是否重啟,都可以進行匯出. flashback_time引數與flashback_scn的原理是一樣的。在匯出的資料裡保持資料的一致性是很有必要的。這個。。我想,沒誰傻忽忽的把這兩個引數一起使用吧?所以我就不提醒你兩個引數不可以同時使用了。

FLASHBACK_SCN=scn_value

FLASHBACK_TIME 有多種設定值的格式:
flashback_time=to_timestamp (localtimestamp)
flashback_time=to_timestamp_tz (systimestamp)
flashback_time="TO_TIMESTAMP (""25-08-2003 14:35:00"", ""DD-MM-YYYY HH24:MI:SS"")"  使用此格式可能會遇到ORA-39150錯誤。

Expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=halberd.dmp FLASHBACK_SCN= 12345567789
Expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=halberd.dmp FLASHBACK_TIME= to_timestamp (localtimestamp)

10. FULL
   用於全庫匯出時使用,如果要全庫匯出,則使用full=y
   FULL={Y | N}

11. HELP
     當我們對引數的意義不瞭解時,或者忘記引數怎麼寫時,就可以用這個引數,來尋求幫助,實際上和作業系統裡的man命令是一樣的。
impdp -help
Expdp help=y

12. INCLUDE

     此引數指定,需要匯出/匯入哪些物件。
INCLUDE = object_type[:name_clause] [, ]
impdp dbmon/dbmon_123 directory=dump_dir network_link=zjzwb2 SCHEMAS=AICBS remap_schema=aicbs:aicbsb include=table:\"IN\(SELECT TABLE_NAME FROM dbmon.TABLES_TOBE_MASKED\)\" PARALLEL=8 LOGFILE=zjzwb.log transform=segment_attributes:n
13. JOB_NAME
      作用:指定任務名,如果不指定的話,系統會預設自動命名:SYS_EXPORT_mode_nn
      格式:JOB_NAME=&JOB_NAME
                 檢視有哪些expdp/impdp job,可以透過dba_datapump_jobs檢視,其實你透過v$session.action也可以檢視到
      至今,我沒有發現這個有什麼其他作用,只有在與attach引數一起使用,重新進行expdp互動命令時用得到。
    
14. LOGFILE
      作用: 指定匯出日誌名稱。預設是:expdp.log
      格式: LOGFILE=[DIRECTORY:]file_name   , 如果引數值裡沒有指定路徑,會預設使用directory引數值所指向的路徑。
directory : 儲存路徑,
file_name :日誌檔名


expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=halberd.dmp logfile=halberd.log
impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=halberd.dmp logfile=halberd.log

15. NETWORK_LINK
      此引數只有在匯入(impdp)時使用,可透過本地資料庫裡的db_link連線到其他資料庫A,將資料庫A的資料直接匯入到本地資料庫。中間可節省匯出資料檔案,傳送資料檔案的過程。很方便。
    impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=halberd.dmp NETWORK_LINK=to_tjj SCHEMAS=halberd logfile=halberd.log
    這裡的to_tjj,就是一個db_link。

16. NOLOGFILE

     不寫匯入匯出日誌,這個筆者是灰常灰常滴不建議滴。
      nologfile=[y|n]

17. PARALLEL

      指定匯出/匯入時使用多少個併發,預設是1.

18. PARFILE

      引數檔案,這個引數檔案裡,儲存著一些引數的設定。比如上面說過的,parallel,network_link,等。匯出時,可以使用此引數,expdp/impdp會自動讀取檔案中的引數設定,進行操作。
PARFILE=[directory_path] file_name
    
19. QUERY
       此引數指定在匯入匯出時的限制條件,和SQL語句中的 "where" 語句是一樣兒一樣兒滴
QUERY=[schema.] [table_name:] query_clause
CONTENT=METADATA_ONLY, EXTIMATE_ONLY=Y,TRANSPORT_TABLESPACES.
我推薦使用此引數時,與parfile引數一起使用:

parfile:

directory=dump_dir logfile=halberd.log dumpfile=halberd.dmp tables=a query="where flag='F' and id=7"

expdp \'\/ as sysdba\' parfile=a.parfile

20. SCHEMAS

      指定匯出/匯入哪個使用者

21. REMAP_SCHEMA
     只在匯入時使用
      作用: 當把使用者A的物件匯入到使用者(其實應該叫schema,將就看吧)B時,使用此引數,可實現要求
      格式: remap_schema=schema1: schema2
      示例: impdp \'\/ as sysdba\' directory=dump_dir dumpfile=halberd.dmp logfile=halberd.log remap_schema=scott:halberd
23. TABLES
       作用:指定匯出哪些表。
       格式:TABLES=[schema.]table_name[:partition_name][,[schema.]table_name[:partition_name]]
       說明:Schema 表的所有者;table_name表名;partition_name分割槽名.可以同時匯出多個使用者的多張表。

24. TABLESPACES

      指定匯出/匯入哪個表空間。

25. REMAP_TABLESPACE
      作用: 只有在匯入時使用,用於進行資料的表空間遷移。
      用法:remap_tablespace=a:b
      說明:a: 資料所在的原表空間; b: 目標表空間
25. TRANSPORT_FULL_CHECK
     檢查需要進行傳輸的表空間與其他不需要傳輸的表空間之間的信賴關係,預設為N。當設定為“Y”時,會對錶空間之間的信賴關係進行檢查,如A(索引表空間)信賴於B(表資料表空間),那麼傳輸A而不傳輸B,則會出錯,相反則不會報錯。

26. TRANSPORT_TABLESPACES

      作用: 列出需要進行資料傳輸的表空間
     格式: TRANSPORT_TABLESPACES=tablespace1[,tablespace2,.............]

27. TRANSFORM
      作用:此引數只在匯入時使用,是一個用於設定儲存相關的引數,有時候也是相當方便的。假如資料對應的表空間都存在的話,就根本用不到這個引數,但是,假如 資料儲存的表空間不存在,使用此引數匯入到使用者預設表空間就可以了。更靈活的,可以使用remap_tablespace引數來指定。
     
格式:transform=transform_name:value[bject_type]
                  transform_name = [OID | PCTSPACE | SEGMENT_ATTRIBUTES | STORAGE]
      說明:
segment attributes:段屬性包括物理屬性、儲存屬性、表空間和日誌
              storage:預設為Y,只取物件的儲存屬性作為匯入作業的一部分,這個引數我們也不用管。
              oid:  owner_id,如果指定oid=Y(預設),則在匯入過程中將分配一個新的oid給物件表,這個引數我們基本不用管。
              pctspace:透過提供一個正數作為該轉換的值,可以增加物件的分配尺寸,並且資料檔案尺寸等於pctspace的值(按百分比)
      示例:transform=segment_attributes:n --表示將使用者所有物件建立到使用者預設表空間,而不再考慮原來的儲存屬性。
28. VERSION

       此引數主要在跨版本之間進行導資料時使用,更具體一點,是在從高版本資料庫匯入到低版本資料庫時使用,從低版本匯入到高版本,這個引數是不可用的。預設值是:compatible。此引數基本在匯出時使用,匯入時基本不可用。
VERSION={COMPATIBLE | LATEST | version_string}
COMPATIBLE: 以引數compatible的值為準,可以透過show parameter 檢視compatible引數的值
LATEST            : 以資料庫版本為準
version_string   :
指定版本。如: version=10.2.0.1
   

29. SAMPLE
       SAMPLE 給出匯出表資料的百分比,引數值可以取.000001~100(不包括100)。不過匯出過程不會和這裡給出的百分比一樣精確,是一個近似值。
     格式: SAMPLE=[[schema_name.]table_name:]sample_percent
     示例:  SAMPLE="HR"."EMPLOYEES":50
30. table_exists_action
      此引數只在匯入時使用。
      作用:匯入時,假如目標庫中已存在對應的表,對於這種情況,提供三種不同的處理方式:append,truncate,skip,replace
      格式: table_exists_action=[append | replace| skip |truncate]
      說明: append :   追加資料到表中
                 truncate:  將目標庫中的同名表的資料truncate掉。
                 skip :      遇到同名表,則跳過,不進行處理,注意:使用此引數值時,與該表相關的所有操作都會skip掉。
                 replace:    匯入過程中,遇到同名表,則替換到目標庫的那張表(先drop,再建立)。
      示例:  table_exists_action=replace

31. SQLFILE

       只在匯入時使用!
       作用: 使用此引數時,主要是將metadata語句取出到一個單獨的SQLfile中,而資料並不匯入到資料庫中
       格式: sqlfile=&file_name.sql
       示例: impdp \'\/ as sysdba\' directory=dump_dir dumpfile=halberd.dmp logfile=halberd.log sqlfile=halberd.sql

legacy mode:
 在11g中,才有這種模式。這種模式裡相容了以前版本中的部分引數,如:consistent,reuse_dumpfiles等(其實我現在也就知道這兩個引數,哈哈,以後再遇到再補充)

32. consistent

      這個是保持資料一致性的一個引數。在11g中使用時,如果設定 consistent=true,則會預設轉換成 flashback_time引數,時間設定為命令開始執行的那個時間點。

      格式: consistent=[true|false]

33. reuse_dumpfiles

     作用:重用匯出的dmp檔案 。假如第一次我們導失敗了,雖然匯出失敗,但是dmp檔案 還 是會生成的。在修改匯出命令,第二次執行時,就可以 加上這個引數。

     格式: reuse_dumpfile=[true|false]
---------------------------------------------------
互動式命令:

1. 連線到對應的job
    impdp \'\/ as sysdba\' attach=&job_name
    不知道job_name 去哪兒找?看上面的引數:job_name
2. 檢視執行狀態: status
3.  停止匯入匯出: kill_job(直接kill 掉程式,不自動退出互動模式)
4.  停止匯入匯出:stop_job(逐一停止job程式的執行,並退出互動模式)
5.  修改併發值:  parallel
6.  退出互動模式: exit / exit_client(退出到日誌模式,對job無影響)

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

相關文章