數據泵是Oracle最近幾個版本中才引進的一項技術,其主要用來對數據庫進行邏輯備份與恢復。其主要包括expdp與imppd兩個實用程序。數據庫傳統的備份基本上都是物理備份,包括聯機備份與脫機備份等等。但是數據泵在Oracle數據庫中為其實現了邏輯備份。
邏輯備份簡單的說,就是將數據庫中的數據導出到一個轉儲文件中保存。邏輯備份比物理備份具有更大的靈活性。如根據需要,數據庫管理員可以備份一個表空間中的數據,也可以備份一個方案對象、甚至只是某些特定表中的數據。在還原的時候,也可以針對不同的轉儲文件來恢復相關的數據。可見,數據泵提供的邏輯備份要比物理備份靈活的多。不過筆者今天要談的不是數據泵邏輯備份的靈活性,而是要談談通過數據泵對數據庫進行導入導出的幾個很有用的“副作用”。在這些副作用的幫助下,數據庫管理員可以節省大量的工作。
副作用一:消除磁盤碎片。
在數據庫使用過程中,難免為對保存在其中的數據進行刪刪減減。這些操作難免會在硬盤中造成比較多的硬盤碎片。如果在這臺服務器中還部署了其他的應用服務,那么碎片會更多。而這些硬盤碎片會在很大程度上影響數據庫的運行性能。此時盡量消除硬盤碎片也是提高數據庫性能的一個很好的方法。
在Windows等操作系統中也有碎片整理工具。但是這個操作系統提供的工具并能夠有效消除數據庫中的存儲碎片。因為數據庫中的存儲碎片是由于數據塊大小、存儲結構、不合理的數據類型等等多個方面所造成的。而操作系統與數據庫系統畢竟是兩個不同的應用系統,為此通過操作系統提供的硬盤碎片處理程序往往很難消除數據庫系統中的磁盤碎片。那么在數據庫中該如何解決這個磁盤碎片問題呢?
在以前版本的數據庫中,數據庫管理員可能對此只能夠干瞪眼。不過在Oracle 10G以后的數據庫中,借助數據泵的作用,就可以輕松的解決這個問題。如利用數據泵實用程序,先將數據庫中的數據全部導出,然后再進行恢復。在恢復的過程中,Oracle數據庫系統會重新組織表的存儲結構,減少表中的連接,并有效的消除磁盤碎片。從而可以在很大程度上提高數據庫的性能。特別是對于那些變動性比較大的Oracke數據庫,最好定時的利用數據泵工具進行導入導出的工作。這有利于其提高數據庫的性能。不過在使用數據泵導入導出數據的時候,最好能夠選擇企業用戶不用數據庫的時候。雖然這個導入導出花不了多少時間(以各存儲10G左右的數據庫為例,大概20分鐘可以完成整個導入導出工作)。但是如果在這個中間用戶對數據庫進行了修改,那么這個修改的數據就可能會丟失。所以在進行這項工作的時候,能夠斷開用戶與數據庫的連接是最好的。
副作用二:可以在不同的操作系統之間進行數據遷移。
有時候企業可能需要在不同的操作系統之間進行數據庫的遷移。如筆者前段時間,就負責過類似的項目。企業原先是在微軟的操作系統上部署Oracle數據庫系統的。不過那時候企業采用的是盜版的操作系統。由于微軟盜版打擊力度逐漸增強,企業擔心總有一天會波及到他們;同時這個服務器系統穩定性也不是很高,時不時的會跟企業用戶鬧點小矛盾。為此企業準備乘早向Linux操作系統轉移。其首要的目標就是把現在的一些服務器部署在Linux操作系統上。所以需要把Oracle數據庫從Windows操作系統向Linux操作系統轉移。
要實現這個轉移在以前的數據庫版本中可能比較難。但是在10G等以后的數據庫版本中就變得很簡單了。因為數據泵備份與恢復工具可以將數據庫中的數據存儲在一個轉儲文件中。而這個轉儲文件是一個二進制形式的文件,不受操作系統的影響。為此在Windows操作系統平臺中,利用數據泵工具把數據導出保存在轉儲文件(二進制文件)中。然后再在Linux操作系統上安裝好Oracle數據庫系統,再利用數據泵工具把存儲在轉儲文件中的數據導入到數據庫中即可。由于利用二進制文件來存儲數據,為此不會因為操作系統平臺而出現不能夠導入的情況。這主要是因為二進制的文件中不會包含操作系統的信息。所以在不同的操作系統平臺上的Oracle數據庫之間可以直接導入導出數據。可見,數據泵對于在不同操作系統平臺之間進行數據庫遷移是非常有用的。
副作用三:用來進行數據庫的升級。
筆者前段時間遇到過一個項目,要將Oracle數據庫從10G升級到11G。在這個升級的過程中,數據庫本身的升級難度并不是很大。主要的問題是如何將數據進行升級。因為兩個不同版本的數據庫系統,新版本會對舊版本的數據庫系統進行一些必要的改善。即使其兼容性再好,如果直接利用聯機備份或者脫機備份得到的備份文件進行恢復的話,仍然是不行的。即使其能夠恢復成功,但是在恢復的過程中會提示一些警告或者出錯信息。這些內容會影響到以后數據庫運行的穩定性。為此在數據庫進行升級的過程中,利用備份文件來進行恢復數據并不是理想的方法。
筆者最認為最理想的方法是將數據表一張張的導入。不過由于Oracle數據庫的內容比較多,這個導起來比較麻煩。筆者以前在進行數據庫升級時,就寫過一個腳本語句。即使在腳本語句的幫助下,也很難一步到位完成不同版本之間的數據遷移工作。而這次從10G升級到11G的時候,筆者直接采用數據泵工具,就順利完成了數據的遷移工作。其實操作很簡單。將低版本數據庫中的數據利用數據泵工具全部導出保存在轉儲文件中,然后再利用數據泵工具將數據導入導高版本的數據庫中。在導入的過程中,數據泵實用工具會對某些內容進行自動的調整,以符合新版本新特性的需要。最用的是,在數據泵工具的幫助下,可以實現一次性導出與導入,這可以讓數據庫管理員省下不少的心。
另外,數據泵不僅可以幫助數據庫管理員將數據庫從低版本升級到高版本中。如果有需要將數據庫的內容遷移到低版本中,則數據泵也可以幫助管理員完成這方面的任務。不過此時數據泵還需要其他一些輔助工具的幫助才行。
副作用四:在不同方案之間實現數據的轉移。#p#分頁標題#e#
有時候數據庫管理員可能需要在不同的方案之間實現數據的轉移。如在數據庫中有兩個方案A與B。其中方案A是企業正在使用的方案;而方案B是一個測試方案。有時候設計開發了一個新功能,需要在方案B下先進行測試。不過為了保證測試方案的準確性,需要把方案B中的數據保持最新,即跟方案A中的數據進行同步。此時數據庫管理員就需要把方案A中的數據轉移到方案B中。
此時數據庫管理員可以利用數據泵實用工具將方案A中的數據導出到轉儲文件中。然后再將這個轉儲文件中的內容通過數據泵實用工具導入導方案B中。從而完成在不同的數據庫對象之間進行數據遷移的任務。此時數據恢復(其實準確的說,應該是數據導入,而不是數據恢復),不會因為方案名不同,而拒絕恢復。
可見在數據泵工具的幫助下,在不同方案對象之間進行數據的遷移變得非常的簡單。所以數據庫管理員以后在進行測試的時候,要保持測試方案對象與被測試對象的數據同步不再是難事。
總之,數據泵實用工具是Oracle 10G 11G兩個數據庫版中很實用的一個管理工具之一。其不僅可以用來完成傳統的數據備份需要,而且其衍生出來的那些“副作用”,還可以幫助我們管理員做好日常的維護工作。從某種方面來說,這些副作用可能比其本身數據備份功能還要來的重要,對我們管理員更加有吸引力。充分利用這些副作用,可以大幅度的減少我們數據庫日常維護的工作量。