資料泵備份之外的一些“副作用”

憶江南soy發表於2013-10-23

資料泵是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的時候,筆者直接採用資料泵工具,就順利完成了資料的遷移工作。其實操作很簡單。將低版本資料庫中的資料利用資料泵工具全部匯出儲存在轉儲檔案中,然後再利用資料泵工具將資料匯入導高版本的資料庫中。在匯入的過程中,資料泵實用工具會對某些內容進行自動的調整,以符合新版本新特性的需要。最用的是,在資料泵工具的幫助下,可以實現一次性匯出與匯入,這可以讓資料庫管理員省下不少的心。

  另外,資料泵不僅可以幫助資料庫管理員將資料庫從低版本升級到高版本中。如果有需要將資料庫的內容遷移到低版本中,則資料泵也可以幫助管理員完成這方面的任務。不過此時資料泵還需要其他一些輔助工具的幫助才行。

  副作用四:在不同方案之間實現資料的轉移。

  有時候資料庫管理員可能需要在不同的方案之間實現資料的轉移。如在資料庫中有兩個方案A與B。其中方案A是企業正在使用的方案;而方案B是一個測試方案。有時候設計開發了一個新功能,需要在方案B下先進行測試。不過為了保證測試方案的準確性,需要把方案B中的資料保持最新,即跟方案A中的資料進行同步。此時資料庫管理員就需要把方案A中的資料轉移到方案B中。

  此時資料庫管理員可以利用資料泵實用工具將方案A中的資料匯出到轉儲檔案中。然後再將這個轉儲檔案中的內容通過資料泵實用工具匯入導方案B中。從而完成在不同的資料庫物件之間進行資料遷移的任務。此時資料恢復(其實準確的說,應該是資料匯入,而不是資料恢復),不會因為方案名不同,而拒絕恢復。

  可見在資料泵工具的幫助下,在不同方案物件之間進行資料的遷移變得非常的簡單。所以資料庫管理員以後在進行測試的時候,要保持測試方案物件與被測試物件的資料同步不再是難事。

  總之,資料泵實用工具是Oracle 10G 11G兩個資料庫版中很實用的一個管理工具之一。其不僅可以用來完成傳統的資料備份需要,而且其衍生出來的那些“副作用”,還可以幫助我們管理員做好日常的維護工作。從某種方面來說,這些副作用可能比其本身資料備份功能還要來的重要,對我們管理員更加有吸引力。充分利用這些副作用,可以大幅度的減少我們資料庫日常維護的工作量。

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

相關文章