Oracle Datapump 學習

Jujay發表於2011-12-30
近段時間要做一個使用datapump做資料遷移的專案,正好利用這個機會複習一下datapump。
1. exp/imp 於 expdp/impdp 的對比
1)效能對比
-- exp/imp預設採用傳統路徑(Conventional path)方式載入資料,效能較差,為了提高效能,可以把引數Direct=Y,採用直接路徑方式載入資料,效能較好。而expdp/impdp預設是採用直接路徑方式載入資料,效能較好。
常規路徑匯出使用SQL SELECT語句從表中抽取資料,直接路徑匯出則是將資料直接從磁碟讀到PGA再原樣寫入匯出檔案,從而避免了SQL命令處理層的資料轉換過程,大大提高了匯出效率。在資料量大的情況下,直接路徑匯出的效率優勢更為明顯,可比常規方法速度提高三倍之多。
-- exp/imp匯出的檔案在客戶端,效能還取決於網路狀況,而expdp/impdp直接將檔案匯出在伺服器端,效能不受網路狀況的影響。
-- expdp/impdp可並行執行(設定引數parallel)
-- 從匯出檔案大小看,expdp/impdp比較小,應該進行了一些壓縮。
2)用法區別
-- 更換使用者名稱,
exp/imp: fromuser touser
expdp/impdp: remap_schema
--更換表空間
用exp/imp的時候,要想更改表所在的表空間,需要手工去處理一下,
如alter table xxx move tablespace_new之類的操作。
用impdp只要用remap_tablespace='tabspace_old':'tablespace_new'
--是否要匯出資料行
exp (ROWS=Y 匯出資料行,ROWS=N 不匯出資料行)
expdp content(ALL:物件+匯出資料行,DATA_ONLY:只匯出物件,METADATA_ONLY:只匯出資料的記錄)
--多了傳輸表空間功能
transportable_tablespaces
2. datapump的命令列模式
有兩種方式進入命令列模式,一種是在執行過程中按CTRL+C命令進入,另一種是指定ATTACH引數連線到當前正在執行的匯入/匯出任務。
命令列模式的好處是可以動態調整匯入匯出過程,特別是對於大資料量匯入匯出,可以在執行過程中修改並行度、暫停或繼續執行等操作,非常的方便。
3.datapump的監控
datapump的監控有兩種方式,一種是進入命令列模式之後,用status引數檢視當前job的狀態,另一種是進入資料庫查詢v$session_longops檢視:
  • USERNAME - job owner

  • OPNAME - job name

  • TARGET_DESC - job operation

  • SOFAR - megabytes (MB) transferred thus far during the job

  • TOTALWORK - estimated number of megabytes (MB) in the job

  • UNITS - 'MB'

  • MESSAGE - a formatted status message of the form.:

    ':  : nnn out of mmm MB done'

4. Filter
1)資料解析:QUERY 和SAMPLE
2)後設資料解析:EXCLUDE 和INCLUDE (注意,這兩個引數是互斥的),以下檢視列出了哪些物件是可以被解析的:DATABASE_EXPORT_OBJECTS, SCHEMA_EXPORT_OBJECTS, and TABLE_EXPORT_OBJECTS

5. 如何提高datapump效能
1)使用parallel引數設定適當並行度;
2)開啟磁碟非同步I/O:DISK_ASYNCH_IO=TRUE
3)取消資料庫一致性檢查:DB_BLOCK_CHECKING=FALSE,DB_BLOCK_CHECKSUM=FALSE
4)設定足夠的程式引數:PROCESSES SESSIONS PARALLEL_MAX_SERVERS
5)設定合理的SHARED_POOL_SIZE and UNDO_TABLESPACE

6. datapump使用注意
1)在使用parallel引數匯出時,記得dumpfile要用%U匹配符,而且並行度不要大於CPU的個數。


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

相關文章