Oracle資料庫使用PDE檔案匯出資料和傳統EXP/IMP方式的區別
使用PDE檔案匯出資料和傳統EXP/IMP方式的區別
oracle資料庫匯出匯入常用的有兩種方式:
其一是:使用命令列呼叫exp和imp命令來實現。可以通過設定命令引數來實現自己的功能需要。具體的引數含義可以在windows命令列下執行:exp help=y和imp help=y來檢視具體的引數說明。這裡匯出的檔案是dmp格式的檔案。其執行原理在附錄。
其二是:通過使用PL/SQLdeveloper工具tool選單裡的import和export圖形化工具中的Plsql developer匯出方式來實現。這種方式可以選擇三種檔案匯出格式dmp(也就是第一種方式上面oracle標準格式),sql格式,pde格式
兩種方式主要的區別就在於他們匯出的檔案格式所帶來的區別,下面分別介紹三種匯出檔案格式的區別。
DMP格式:首先是通用性的問題,dmp檔案是oracle原生的匯入匯出檔案,它本身是二進位制檔案,匯入匯出速度快,壓縮率高,移植性好可以跨平臺使用但是隻限於oracle資料庫之間,還可以包含許可權,但是匯入到另一個數據庫時受到資料表空間、使用者名稱等約束,這是可以用PLSQLdeveloper工具tool選單中的Export User Object匯出你想要的表空間和表的sql指令碼或者你可以直接寫sql新建表空間和表。還有一點這個工具是向下相容的也就是說高版本的oracle資料庫匯出的檔案不可以匯入到低版本的oracle資料庫中,低版本的dmp檔案也只能匯入到只比他高一個版本的oracle資料庫中(附錄中列出了對於版本問題的簡單總結)。高版本想低版本導資料就要就要選擇其他兩種檔案格式了。
然後是速度問題,通過dmp檔案匯入資料庫,預設是先匯入資料,再建立索引,所以dmp方式速度上會比較高N+log2N。
不過在實際的工作環境中exp/imp命令方式的最大難點在於錯誤處理,因為該方式涉及到的各項約束較多可能會出現某些資料匯入不成功,此時排查錯誤並修正資料需要仔細甄別。另外oracle版本的問題在實際工作中也是一個比較麻煩的問題。
SQL格式,顧名思義,sql格式的檔案就是一個sql的執行指令碼檔案,這決定了這個檔案可以在幾乎所有的主流資料庫執行,還可以在文字編輯器上檢視修改,通用性比較好,但是正因為需通用於大部分主流資料庫,所以它的sql檔案裡,只能儲存通用型別,如oracle的大資料型別clob,blob在使用sql匯入匯出時,就會發生錯誤。遇到其他資料庫的特定型別,也是如此。而且假使表比較多,資料量比較大的話,得到的相應的sql檔案也比較多,不方便管理和使用。
不過效率上sql不如上面的dmp檔案,適合小批量的資料處理。
PDE格式,這是PLSQLdeveloper這個oracle資料庫管理工具特有的格式,只能通過PLSQL developer匯出資料產生,也只能通過PLSQL developer將其中資料匯入到資料庫。檔案也不能通過編輯器檢視和編輯。不過這種方式不受源資料表空間、使用者名稱等約束,且資料量更小。可以處理clob,blob等大型別,但是也只能用於oracle。不過通過pde檔案匯入資料是,預設是先建立了索引,之後再向表中插入資料,插入資料時要維護索引(N*log2N),所以速度比較慢,建議當通過pde匯入資料時,可以選擇不保留索引,或者先建立table,然後刪除索引,最後匯入資料;
綜上所述:
如果你面對的資料庫是oracle而且使用的是PLSQLdeveloper 管理來管理你的oracle。你大可以不再用命令列exp和imp命令,plsql的oracle 方式也可以在功能上完全代替exp和imp,操作上也更方便。如果使用pde方式來導資料,效率適中,視覺化操作方便,匯入匯出的時候可以不必考慮版本、表空間等問題,也可以處理大型別,但是資料量很大時我個人經驗i5標準電壓筆記本cpu幾十萬條的資料都已經慢到不行了,pde型別的速度還是太慢,此時匯入匯出時必須去掉索引資料遷移完成之後再建立索引,再進一步如果面對的是一個大型的資料庫有幾百張表,你要把整個資料庫遷移,那麼刪除所有索引的做法就顯得不那麼有效,這時候就建議使用dmp檔案的方式。sql模式則適合那些表較少,資料也少的資料庫的遷移,如果需要甚至可以用文字編輯器修改匯出的檔案。
附錄:
1. 呼叫exp和imp命令來實現資料匯入匯出的原理:
exp使用者程序通過伺服器程序連線到資料庫,開啟shadow程序,同時執行select語句查詢資料庫中的資料,通過buffer cache並通過SQL語句處理層再轉移出exp匯出檔案,即exp程序需要佔用伺服器上的SGA和PGA資源。imp讀取exp匯出的.dmp檔案,構造DDL語句,插入建立表與其他物件以及新增資料的語句
原文全文連結:
2.Oracle的imp/exp元件是我們常用的工具,它的一個操作原則就是向下相容。下面是據此總結的幾個使用規則和相關測試:
規則1:低版本的exp/imp可以連線到高版本(或同版本)的資料庫伺服器,但高版本的exp/imp不能連線到低版本的資料庫伺服器
規則2:高版本exp出的dmp檔案,低版本無法imp(無法識別dmp檔案)
規則3:低版本exp出的dmp檔案,高版本可以imp(向下相容)
規則4:從Oracle 低版本的Export資料可以Import到Oracle高版本中,但限於Oracle的相鄰版本
下面的部落格連結有實際測試結果。
原文全文連結