理主要是為防止非法登錄者或非授權用戶對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)
文件或文件組備份是指對數據庫文件或文件夾進行備份,但其不像完整的數據庫備份那
您正在看的SQLserver教程是:SQL Server數據庫技術(100)。樣同時也進行事務日志備份。使用該備份方法可提高數據庫恢復的速度,因為其僅對遭到破壞的文件或文件組進行恢復。
但是在使用文件或文件組進行恢復時,仍要求有一個自上次備份以來的事務日志備份來保證數據庫的一致性。所以在進行完文件或文件組備份後應再進行事務日志備份。否則備份在文件或文件組備份中所有數據庫變化將無效。
如果需要恢復的數據庫部分涉及到多個文件或文件組,則應把這些文件或文件組都進行恢復。例如,如果在創建表或索引時,表或索引是跨多個文件或文件組,則在事務日志備份結束後應再對表或索引有關的文件或文件組進行備份,否則在文件或文件組恢復時將會出錯。
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)。選擇批日志恢復模式所采用的備份策略與完全恢復所采用的恢復策略基本相同。
從以上的論述中我們可以看到,在實際應用中,備份策略和恢復策略的選擇不是相互孤立的,而是有著緊密的聯系。我們並不僅僅是因為數據庫備份為數據庫恢復提供了 “原材料”這一事實,以便在采用何種數據庫恢復模式的決策中考慮該怎樣進行數據庫備份,更多是因為在選擇該使用哪種備份類型時我們必須考慮到當使用該備份進行數據庫恢復時,它能把遭到損壞的數據庫“帶”到怎樣的狀態(是數據庫失敗的時刻,還是最近一次備份的時刻)。但有一點我們必須強調,即備份類型的選擇和恢復模式的確定都應服從於這一目標:盡最大可能,以最快速度減少或消滅數據丟失。