資料遷移工具簡單分析

dbhelper發表於2014-11-26

exp/imp

對於資料結構的複製和同步,還是比較理想的工具。

在資料量比較小的情況下,這個工具的效能要遠遠好於datapump,而且重點推薦,他對於各種常用資料型別的支援還是很不錯的。

有一些特性,在某種程度上要好於datapump,在做資料遷移的時候,commit特性還是很重要的。因為透過datapump碰到了很多undo空間不足帶來的問題。

 

datapump

在10g版本開始,就開始推薦使用的datapump,算是對exp/imp的補充說明。在使用資料量中等的資料遷移中,是比較好的方案,它有幾個亮點的特性,一個就是並行,能夠在資料匯出匯入的時候開啟多個並行加速,還有direct選項,這一點上合exp沒有太大的差別,個人比較喜歡的是remap選項,比如某個表中還有lob欄位,從源庫中匯出的時候,表空間的資訊就在dump檔案裡,如果匯入的環境沒有指定的表空間,那基本上就沒有直接的解決方案了,要麼臨時建立需要的表空間,然後在匯入成功後,嘗試做move操作。

這一點在datapump而言,就不是事了,remap選項很輕鬆的解決了這個問題。

當然了,datapump是基於服務端的,需要一些其他的依賴因素,在做lob的資料匯入的時候速度比imp至少快10倍以上。

 

sql*loader

可以理解sqlldr是基於客戶端的,而言這個工具可能更具有通用性,因為一些資料在它面前都是可擴充套件的,我們可以嘗試從sqlserver中匯出資料,然後透過sqlldr來做為資料的匯入,sql*loader最快的方式就是開啟並行+direct,但是對於lob資料的處理還是需要做額外的工作,對於資料結構的複製而言,就無能為力了。如果作為純粹的資料的匯入,還是很好的工具。

比較納悶的是,sqlldr作為可擴充套件的資料匯入工具,oracle為什麼沒有出類似sqlldr這樣的資料匯出工具,因為exp/expdp匯出的是二進位制檔案,生成平面檔案還是有一定的距離,在tom的網站答疑中,他提供了一個簡單的pl/sql版本的工具,大家有興趣可以參考。

oracle_loader

外部表在較新的版本中開始出現,可能大家用的比較多的還是透過oracle_loader來讀取alert日誌的資訊,其實在某種程度上而言,oracle_loader可以在某種程度上作為sqlldr的補充和加強。因為我們可以和快的建立一個外部表。而無須消耗額外的資料空間,相比於sqlldr生成的dump而言,基於oracle_loader建立的外部表更加的具體,我們可以在資料匯入前做一些相關的資料檢查和稽核工作。

 

oracle_datapump

oracle_datapump算是對datapump的一個加強版本,因為生成的dump檔案類似datapump,但是生成的dump可移植性就好的多,我們可以直接copy dump到外部表相關的目錄下,如果外部表定義中的dump檔名沒有變化的話,直接複製dump,然後可以無需做其他操作就載入資料。

insert

不管怎麼樣,insert還是最終的資料載入方式,不過在條件允許的情況下,noogging+append+parallel還是個人認為最簡潔,最直接的方式。

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

相關文章