MS SQL基礎教程:備份和恢復概述

iSQlServer發表於2010-03-19

原理主要是為防止非法登入者或非授權使用者對SQL Server 資料庫或資料造成破壞,但在有些情況下這種安全管理機制顯得力不從心。例如合法使用者不小心對資料庫資料做了不正確的操作或者儲存資料庫檔案的磁碟遭到損壞或者執行SQL Server 的伺服器因某種不可預見的事情而導致崩潰。所以我們需要提出另外的方案即資料庫的備份和恢復來解決這種問題。本章的主要目的就是介紹備份、恢復的含義,資料庫備份的種類以及備份裝置等基本的概念,以及如何建立備份和恢復資料庫,使讀者對其有全面的瞭解和認識,能夠自主制定自己的備份和恢復計劃。

15.1.1 備份和恢復

備份和恢復元件是SQL Server 的重要組成部分。備份就是指對SQL Server 資料庫或事務日誌進行拷貝,資料庫備份記錄了在進行備份這一操作時資料庫中所有資料的狀態,如果資料庫因意外而損壞,這些備份檔案將在資料庫恢復時被用來恢復資料庫。

由於SQL Server 支援線上,備份所以通常情況下可一邊進行備份,一邊進行其它操作,但是,在備份過程中不允許執行以下操作: 建立或刪除資料庫檔案; 建立索引; 執行非日誌操作; 自動或手工縮小資料庫或資料庫檔案大小。

  如果以上各種操作正在進行當中,且準備進行備份則備份,處理將被終止;如果在備份過程中,打算執行以上任何操作,則操作將失敗而備份繼續進行。

恢復就是把遭受破壞或丟失資料或出現錯誤的資料庫恢復到原來的正常狀態,這一狀態是由備份決定的,但是為了維護資料庫的一致性,在備份中未完成的事務並不進行恢復。

進行備份和恢復的工作主要是由資料庫管理員來完成的。實際上資料庫管理員日常比較重要、比較頻繁的工作就是對資料庫進行備份和恢復。

注意:如果在備份或恢復過程中發生中斷,則可以重新從中斷點開始執行備份或恢復。這在備份一個大型資料庫時極有價值。

15.1.2 資料庫備份的型別

在SQL Server 2000 中有四種備份型別,分別為; 資料庫備份(Database Backups) 事務日誌備份(Transaction Log Backup) 差異備份(Differential Database Backups) 檔案和檔案組備份(File and File Group Backup) 下面我們將詳細介紹其所表述的內容,並涉及到一些使用時注意事項。

1 資料庫備份(Database Backups)

資料庫備份是指對資料庫的完整備份,包括所有的資料以及資料庫物件。實際上備份資料庫過程就是首先將事務日誌寫到磁碟上,

然後根據事務建立相同的資料庫和資料庫物件以及拷貝資料的過程。由於是對資料庫的完全備份,所以這種備份型別不僅速度較慢,

而且將佔用大量磁碟空間。正因為如此,在進行資料庫備份時,常將其安排在晚間,因為此時整個資料庫系統幾乎不進行其它事務操作,從而可以提高資料庫備份的速度。

在對資料庫進行完全備份時,所有未完成的事務或者發生在備份過程中的事務都不會被備份。如果您使用資料庫備份型別,

則從開始備份到開始恢復這段時間內發生的任何針對資料庫的修改將無法恢復。所以我們總是在一定的要求或條件下才使用這種備份型別,比如: 資料不是非常重要,儘管在備份之後恢復之前資料被修改,但這種修改是可以忍受的; 通過批處理或其它方法,在資料庫恢復之後可以很容易地重新實現在資料損壞前發生的修改; 資料庫變化的頻率不大。

在進行資料庫備份時,如果您在備份完成之後又進行了事務日誌備份,則在資料庫備份過程中發生的事務將被備份:但若只進行資料庫備份,常將資料庫選項“trunc.log onchkpt” 設定為true, 這樣每次在執行到檢查點(checkpoint) 時,都會將事務日誌截斷。

注意:如果對資料一致性要求較高(將資料庫恢復到發生損壞的刻),則不應使用資料庫備份。

2 事務日誌備份(Transaction Log Backup)

事務日誌備份是指對資料庫發生的事務進行備份,包括從上次進行事務日誌備份、差異備份和資料庫完全備份之後,所有已經完成的事務。在以下情況下我們常選擇事務日誌備份。 不允許在最近一次資料庫備份之後發生資料丟失或損壞現象; 儲存備份檔案的磁碟空間很小或者留給進行備份操作的時間有限,例如兆位元組級的資料庫需要很大的磁碟空間和備份時間; 準備把資料庫恢復到發生失敗的前一點; 資料庫變化較為頻繁。   由於事務日誌備份僅對資料庫事務日誌進行備份,所以其需要的磁碟空間和備份時間都比資料庫備份(備份資料和事務)少得多,這是它的優點所在。正是基於此,我們在備份時常採用這樣的策略,即每天進行一次資料庫備份,而以一個或幾個小時的頻率備份事務日誌。這樣利用事務日誌備份,我們就可以將資料庫恢復到任意一個建立事務日誌備份的時刻。

但是,建立事務日誌備份卻相對比較複雜。因為在使用事務日誌對資料庫進行恢復操作時,還必須有一個完整的資料庫備份,而且事務日誌備份恢復時必須要按一定的順序進行。比如在上週末對資料庫進行了完整的資料庫備份,在從週一到本週末的每一天都進行一次事務日誌備份,那麼若要打算對資料庫進行恢復,則首先恢復資料庫備份,然後按照順序恢復從週一到本週末的事務日誌備份。

有些時侯資料庫事務日誌會被中斷,例如資料庫中執行了非日誌操作(如建立索引、建立或刪除資料庫檔案、自動或手工縮小資料庫檔案大小),此時應該立即建立資料庫或差異備份,然後再進行事務日誌備份。以前進行的事務日誌備份也沒有必要了。

3 差異備份(Differential Database Backups)

差異備份是指將最近一次資料庫備份以來發生的資料變化備份起,來因此差異備份實際上是一種增量資料庫備份。與完整資料庫備份相比,差異備份由於備份的資料量較小,所以備份和恢復所用的時間較短。通過增加差異備份的備份次數,可以降低丟失資料的風險,將資料庫恢復至進行最後一次差異備份的時刻,但是它無法像事務日誌備份那樣提供到失敗點的無資料損失備份。

但在實際中為了最大限度地減少資料庫恢復時間以及降低資料損失數量,我們常一起使用資料庫備份、事務日誌備份和差異備份,而採用的備份方案是這樣的; 首先有規律地進行資料庫備份,比如每晚進行備份; 其次以較小的時間間隔進行差異備份,比如三個小時或四個小時; 最後在相臨的兩次差異備份之間進行事務日誌備份,可以每二十或三十分鐘一次。

這樣在進行恢復時,我們可先恢復最近一次的資料庫備份,接著進行差異備份,最後進行事務日誌備份的恢復。

但是,在更多的情況下我們希望資料庫能恢復到資料庫失敗那一時刻,那麼我們該怎樣做呢?下面的方法也許會有大幫助。 首先如果能夠訪問資料庫事務日誌檔案則應備份當前正處於活動狀態的事務日誌; 其次恢復最近一次資料庫備份; 接著恢復最近一次差異備份; 最後按順序恢復自差異備份以來進行的事務日誌備份。

  當然,如果無法備份當前資料庫正在進行的事務,則只能把資料庫恢復到最後一次事務日誌備份的狀態,而不是資料庫失敗點。

4 檔案和檔案組備份(File and File Group Backup)

檔案或檔案組備份是指對資料庫檔案或資料夾進行備份,但其不像完整的資料庫備份那樣同時也進行事務日誌備份。使用該備份方法可提高資料庫恢復的速度,因為其僅對遭到破壞的檔案或檔案組進行恢復。

但是在使用檔案或檔案組進行恢復時,仍要求有一個自上次備份以來的事務日誌備份來保證資料庫的一致性。所以在進行完檔案或檔案組備份後應再進行事務日誌備份。否則備份在檔案或檔案組備份中所有資料庫變化將無效。

如果需要恢復的資料庫部分涉及到多個檔案或檔案組,則應把這些檔案或檔案組都進行恢復。例如,如果在建立表或索引時,表或索引是跨多個檔案或檔案組,則在事務日誌備份結束後應再對錶或索引有關的檔案或檔案組進行備份,否則在檔案或檔案組恢復時將會出錯。

15.1.3 備份和恢復的策略

通常而言,我們總是依賴所要求的恢復能力(如將資料庫恢復到失敗點) 、備份檔案的大小(如完成資料庫備份或只進行事務日誌的備份或是差異資料庫備份)以及留給備份的時間等來決定該使用哪種型別的備份。常用的備份選擇方案有:僅僅進行資料庫備份、或在進行資料庫備份的同時進行事務日誌備份,或使用完整資料庫備份和差異資料庫備份。

選用怎樣的備份方案將對備份和恢復產生直接影響,而且也決定了資料庫在遭到破壞前後的一致性水平。所以在做出該決策時,您必須認識到以下幾個問題: 如果只進行資料庫備份,那麼將無法恢復自最近一次資料庫備份以來資料庫中所發生的所有事務。這種方案的優點是簡單,而且在進行資料庫恢復時操作也很方便; 如果在進行資料庫備份時也進行事務日誌備份,那麼可以將資料庫恢復到失敗點,那些在失敗前未提交的事務將無法恢復,但如果您在資料庫失敗後立即對當前處於活動狀態的事務進行備份,則未提交的事務也可以恢復。 從以上可以看出,對資料庫一致性的要求程度成為我們選擇這樣或那樣的備份方案的主要的普遍性原因。但在某些情況下對資料庫備份提出更為嚴格的要求,例如在處理比較重要業務的應用環境中,常要求資料庫伺服器連續工作,至多隻留有一小段時間來執行系統維護任務,在該情況下一旦出現系統失敗,則要求資料庫在最短時間內立即恢復到正常狀態,以避免丟失過多的重要資料,由此可見備份或恢復所需時間往往也成為我們選擇何種備份方案的重要影響因素。

那麼如何才能減少備份和恢復所花費時間呢?SQL Server 提供了幾種方法來減少備份或恢復操作的執行時間。 使用多個備份裝置來同時進行備份處理。同理,可以從多個備份裝置上同時進行資料庫恢復操作處理; 綜合使用完整資料庫備份、差異備份或事務日誌備份來減少每次的需要備份的資料數量; 使用檔案或檔案組備份以及事務日誌備份,這樣可以只備份或恢復那些包含相關資料的檔案,而不是整個資料庫。 另外需要注意的是,在備份時我們也要決定該使用哪種備份裝置如磁碟或磁帶,並且決定如何在備份裝置上建立備份,比如將備份新增到備份裝置上或將其覆蓋。

  在SQL Server 2000 中,有三種資料庫恢復模式,它們分別是:簡單恢復(SimpleRecovery)、 完全恢復(Full Recovery)、 批日誌恢復(Bulk-logged Recovery)。

1 簡單恢復(Simple Recovery)

所謂簡單恢復就是指在進行資料庫恢復時僅使用了資料庫備份或差異備份,而不涉及事務日誌備份。簡單恢復模式可使資料庫恢復到上一次備份的狀態,但由於不使用事務日誌備份來進行恢復,所以無法將資料庫恢復到失敗點狀態。當選擇簡單恢復模式時常使用的備份策略是:首先進行資料庫備份,然後進行差異備份。

2 完全恢復(Full Recovery)

完全資料庫恢復模式是指通過使用資料庫備份和事務日誌備份將資料庫恢復到發生失敗的時刻,因此幾乎不造成任何資料丟失,這成為對付因儲存介質損壞而資料丟失的最佳方法。為了保證資料庫的這種恢復能力,所有的批資料操作比如SELECT INGO、建立索引都被寫入日誌檔案。選擇完全恢復模式時常使用的備份策略是: 首先進行完全資料庫備份; 然後進行差異資料庫備份; 最後進行事務日誌的備份。

如果準備讓資料庫恢復到失敗時刻必須對資料庫失敗前正處於執行狀態的事務進行備份。

3 批日誌恢復(Bulk-logged Recovery)

批日誌恢復在效能上要優於簡單恢復和完全恢復模式,它能盡最大努力減少批操作所需要的儲存空間。這些批操作主要是:SELECT INTO 批裝載操作(如bcp 操作或批插入操作)、建立索引針對大文字或影像的操作(如WRITETEXT、 UPDATETEXT)。選擇批日誌恢復模式所採用的備份策略與完全恢復所採用的恢復策略基本相同。

從以上的論述中我們可以看到,在實際應用中,備份策略和恢復策略的選擇不是相互孤立的,而是有著緊密的聯絡。我們並不僅僅是因為資料庫備份為資料庫恢復提供了 “原材料”這一事實,以便在採用何種資料庫恢復模式的決策中考慮該怎樣進行資料庫備份,更多是因為在選擇該使用哪種備份型別時我們必須考慮到當使用該備份進行資料庫恢復時,它能把遭到損壞的資料庫“帶”到怎樣的狀態(是資料庫失敗的時刻,還是最近一次備份的時刻)。但有一點我們必須強調,即備份型別的選擇和恢復模式的確定都應服從於這一目標:盡最大可能,以最快速度減少或消滅資料丟失。


本文來自-程式設計入門網:http://www.bianceng.cn/database/SQLServer/200807/10944.htm

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

相關文章