32

32. 備份SQL Server

備份的術語

系統故障

SQL Server記錄檔

備份方法

執行備份

排程備份

改善備份

本章總結

將資料庫備份是 DBA 最重要的任務之一。備份和仔細的還原計劃可在系統失效時將資料還原。DBA 的責任是保持系統的執行狀態，並在失效時盡快還原所有的服務。系統停止運作會造成許多不便，有時更要付出昂貴的代價，因此在系統停止運作時得很快的取得取得資料庫備份。有些技術會對系統失效的還原有幫助，如叢集和容錯磁碟子系統，但是還是比不上一個好的計劃和可靠的備份。

因為備份、還原和復原資料庫的主題十分重要，因此我們會分成兩章的來討論。本章中將學習 SQL Server 交易記錄檔，以及備份資料庫的幾種方法。在 第 33 章 中，將學習如何還原資料庫、SQL Server 如何回復、以及如何建立回復計劃。

備份的術語

在開始討論備份技術之前，讓我們回顧一些術語。在這個章節中，您將學到關於備份、還原、和回復操作的實例。

備份和還原

備份（backup）和還原（recover）操作相輔相成的，即保存資料庫中的資料以便稍後使用，類似作業系統所執行的備份和還原作業。在備份過程中，資料從資料庫中複製出來，並保存到另一個位置。作業系統備份和資料庫備份是不同的，差別在於作業系統備份可以保存個別的檔案，而資料庫備份則保存整個資料庫。通常資料庫供很多的使用者共用，但是很多作業系統檔案則是屬於各使用者。因此，資料庫備份同時備份了所有的使用者的資料。由於 SQL Server 設定了使用時間的最大值，因此不管當時使用者是否正在存取資料庫，備份過程都會執行。

在還原過程中，備份資料被複製回資料庫中。不要將還原（restore）和回復（回復）混淆在一起，這是兩種不同的操作。和備份過程不同的是，當 SQL Server 正在執行時，還原過程無法進行。此外，資料表也無法個別還原。如果一個使用者遺失了資料庫中的某些資料，遺失的資料很難還原，因為還原操作將還原整個資料庫或者部分資料，而從資料庫的所有資料中區分出單一使用者的資料是相當困難的。

回復

回復（recovery）包含用來解救系統故障的關聯式資料庫管理系統（RDBMS）和重新進行（回復）交易的能力。每次變更資料庫時，SQL Server 並不會立即將變更寫到磁碟上。如果系統每次都立即寫到磁碟上，那麼一個大系統（例如銀行中的系統）可能會運作得相當緩慢，因為必須等待每筆交易完成寫入後才能進行。這會導致交易延遲。

由於將變更內容寫入磁碟時有所延遲，系統失效時可能會使資料庫處於毀損狀態，有些資料庫的變更可能還沒寫到磁碟上，或是寫到磁碟上的變更可能未被認可。為了保持系統的完整性，SQL Server 在交易記錄檔中記錄了所有的變更。（交易記錄檔將在本章的

＜交易記錄檔＞ 一節中詳細討論。）系統失效後重新啟動 SQL Server，它會使用交易記錄檔來進行所有已經認可但沒有寫入磁碟的交易，並且返回故障時沒有認可的交易。在這種方式中，可以保證資料的正確性。

在回復過程中，SQL Server 必須準備好處理多種類型的交易，包含以下：

- 只進行查詢的交易 不需要回復。
- 已經變更資料庫中的資料交易，以及已經認可但沒有寫到磁碟上 在回復過程中，SQL Server 從磁碟上讀取資料頁，重新套用變更，然後再將資料頁寫回磁碟上。
- 已經變更資料庫中資料的交易，已經認可而且已經寫到磁碟上 在回復過程中，SQL Server 確定變更已經寫到磁碟上，不需要其他介入。
- 已經變更資料庫中資料的交易，還沒有認可 在回復過程中，SQL Server將使用交易記錄檔，復原所有資料頁上的變更，將資料庫還原到交易執行前的狀態。

  當 SQL Server 從系統失效後重新啟動時，回復機制將自動開啟。回復機制利用交易記錄檔來確定哪些交易需要回復，哪些不需要回復。很多的交易是不需要回復的，但是 SQL Server 仍必須讀取交易記錄檔才可做決定。SQL Server 從最後的檢查點開始讀取交易記錄檔。（檢查點將在本章的後面加以討論。）

說明

由於在故障發生時，交易記錄檔對於交易的回復十分重要，因此它通常保存在RAID-1（鏡像）磁碟區中。（RAID 曾在 第 5 章 中討論。）

在系統故障時，需要使用備份檔案還原資料庫（例如損毀一個磁碟），交易記錄檔和交易記錄檔備份用來將資料庫回復到故障點。因此，還原和回復操作通常是共同作業的。在發生電力故障時，可能只需要回復。

說明

由 S QL Server 復原的交易等於以 ROLLBACK 指令中止交易。這個交易將被取消，而且所有的資料將還原到它的原始狀態。當一個交易重新進行時，這些已經記錄到資料庫中但沒有寫入到磁碟上的資料將被重置，因此資料檔案將回到故障時間的狀態。也就是說，重新進行使資料庫的狀態返回到故障的時間點，重新處理已認可的交易，消除所有未認可的交易。

系統故障

如果使用的是如 Microsoft 叢集服務，或是磁碟具 RAID 容錯功能，您可能正在懷疑是否真的需要備份，答案是「需要」。由於系統的故障方式不盡相同，容錯和錯誤回復可能只能修正某些情況。在這一節中，我們將討論一些潛在的故障原因，以及如何避免故障。

某些系統故障的情形可能並不嚴重，而另一些卻可能十分嚴重。要瞭解備份的重要性，就得先了解三種主要的故障類型：硬體故障、軟體故障和人為錯誤。

硬體故障

硬體故障可能是最普遍的故障類型。由於現在的電腦硬體比起之前更穩定，因此這種故障類型所發生的頻率慢慢減少，但是在使用一段時間之後，元件的磨損在所難免。典型的硬體故障包括下列幾種：

- CPU、記憶體或匯流排故障 這些故障通常會導致系統損毀。在替換了有故障的元件並重新啟動系統後，SQL Server 將自動執行資料庫回復。資料庫本身是完整的，因此並不需要進行還原，只需要回復遺失的交易。
- 磁碟故障 如果使用了 RAID 容錯功能，那麼這種故障類型可能不會影響到資料庫的狀態，因此只需要修復 RAID 陣列。如果沒有使用 RAID 容錯，或是 RAID 陣列發生故障，那麼唯一的選擇就是從備份還原資料庫，然後利用交易記錄檔備份回復資料庫。
- 系統大故障或永久性伺服器損失 如果系統在火災或災難中受到損毀，理所當然就得重新設定所有系統。硬體需要重新裝配，資料庫需要從備份進行還原，然後使用資料和交易記錄檔備份回復資料庫。

軟體故障

軟體故障並不常見，然而軟體故障通常比硬體故障更嚴重。由於軟體大多內建了將硬體故障影響最小化的功能，因此當軟體發生故障，硬體就失去了這個保護功能，使系統更容易受到故障的影響。交易記錄檔就是一個具有這種軟體功能的例子，用來幫助從硬體故障進行回復。典型的軟體故障包括下列幾種：

- 作業系統故障 如果故障發生在 I/O 子系統中，就會破壞磁碟上的資料。如果資料庫未被破壞，則只需要回復資料即可。當然，如果資料庫被破壞，唯一的選擇就是透過備份進行資料庫還原。
- RDBMS故障 SQL Server 本身是可能故障的。如果這種故障造成了損壞，那麼就需要透過備份進行資料庫還原和回復。如果沒有損壞，利用自動回復就可以使系統返回到出現故障的那一點。
- 應用程式故障 應用程式也可能故障，導致資料破壞。如果這類故障造成資料的損壞，也需要透過備份進行資料庫還原。反之，就不需要還原，利用自動回復將使得系統返回到出現故障的那一點即可。您可能還需要向應用程式廠商所取修補程式，以避免故障再次發生。

  說明

  有些公司會使用 SQL Server 的 beta 版。其實 beta 版只是用來評估和測試，不能用在一個正式的執行環境中。有時候beta版含有軟體錯誤，包括尚未完全通過測試的功能。您應該使用 Microsoft SQL Server 2000 的產品版本，這是完全通過測試的，且供正式執行環境使用。

  人為錯誤

  第三種重要的錯誤類型是人為錯誤。人為錯誤可能在任何時候不經意的發生。人為的錯誤所造成的損壞可輕可重，麻煩的是，這類型錯誤很容易被忽視個幾天甚至幾週，使得回復更加困難。和使用者建立良好的互動關係（包括良好的通訊管道），就可以快速的回復使用者造成的錯誤。使用者不會害怕立即報告錯誤，當然越早發現錯誤越好。下面的故障可能是由人為錯誤引起的：

- 資料庫伺服器損失 人為錯誤會造成伺服器故障的情形包括：不小心關閉電源、沒有先關閉 SQL Server 就關閉伺服器。當 SQL Server 重新啟動時，回復將自動執行，當然這要花上一些時間。不過由於磁碟上的資料庫未受損傷，所以不需要還原。
- 遺失資料 可能是有人不小心刪除資料檔所造成。必須執行還原與回復操作來使資料庫返回故障點前的狀態。
- 資料表遺失或被破壞的資料 如果誤刪資料表，或者由於某種因素誤改資料，可以使用備份和還原來將資料表返回到它的原始狀態。由於遺失的單一資料表或一小組資料不能只從備份還原，因此這種故障類型的回復可能相當複雜。我們將在
第 33 章 中討論回復這類型故障的範例。

SQL Server 記錄檔

要瞭解備份和還原操作如何與資料庫回復共同作業的，必須先瞭解 SQL Server記錄檔的運作方式。這一節將提供關於 SQL Server 記錄和檢查點的概述，並將告訴您如何備份交易記錄檔。

交易記錄檔

交易記錄檔 （transaction log）用來記錄所有的交易以及這些交易對資料庫做出的修改。這個記錄讓回復可以進行。當認可一個交易時，只要認可記錄還沒寫入交易記錄檔，認可操作就不算完成。由於對於資料庫的變更並不需要立即寫入磁碟中，這個記錄檔只是一種在系統故障事件中可以回復交易的方法。

說明

如果一個資料檔案受到損壞必須透過備份還原時，所有發生在這個資料檔案上的交易都必須重覆執行一次，才能將資料庫回復到故障的那一點。由於交易記錄檔是這個過程的關鍵，而且空間有限，所以必須執行交易記錄檔備份。您必須保存從上次備份到現在產生的所有交易記錄資料，這樣才能回復資料庫。如果您只對上一次備份的還原感興趣，您可以跳過交易記錄檔備份，但是目前的交易記錄檔將不能回復那次備份以後發生的交易。

延遲寫入器執行緒

在資料庫上的變更是最先寫入 SQL Server 快取區中的資料。變更快取區中的資料主要是為了提昇效能，因為等待 I/O 運作是相當費時的。這些變更最終還是會寫入磁碟，只是這個過程在背景執行，而使用者並不知道。由於修改的頁面儲存在快取區，在這些頁面（稱為Dirty分頁）被 SQL Server 執行緒寫入磁碟之前，會耗費相當大量的時間。這個執行緒稱為 延遲寫入器執行緒 （lazywriter thread）.

延遲寫入器執行緒使用近來最少使用的頁面清單，這表示近來最少使用的資料將放在寫入磁碟的清單開頭，而剛剛才被使用的資料放在清單結尾，而且也最不可能被寫入磁碟中。那些經常被修改的頁面（因此總是不斷地被移到清單的結尾）可能永遠不會被延遲寫入器執行緒寫入磁碟中。這樣會增加回復時間，因為可能必須讀取許多交易記錄才能將所有的變更應用在資料上。

例如，在一個具有超過 1 GB 的 RAM 的大規模系統中，要對資料庫做很多變更的話，回復過程將花費好幾個小時。除了延遲寫入器執行緒之外，檢查點（checkpoint）執行緒也將 Dirty 頁面寫入到磁碟中。（我們將在本節的後面詳細討論檢查點執行緒。）

順序記錄

因為交易記錄檔是交易的歷史記錄，交易記錄檔的 I/O 運作主要是寫入，並且一般是按照時間順序。在交易復原事件中，交易記錄檔將被讀取，且 I/O 的時間順序將被破壞。由於復原相當少見（因為系統崩潰很少見，而且使用者不會常常復原交易），交易記錄檔中的 I/O 模式相當穩定。您可將交易記錄檔放在它自己的磁碟或 RAID 陣列中來增強 I/O 效能，就像

第 4 章 和 第 5 章 討論過的。您應該使用 RAID 保護交易記錄檔，因為這些交易紀錄對於資料庫回復是很重要的。

交易記錄檔大小

根據對資料庫的變更數量，交易記錄檔可能增長得很大。因為交易記錄檔是一個或多個檔案的有限集合，最終它將被填滿，因此必須定期刪減。完成記錄檔備份時，記錄檔會自動被刪減，這將在本章的後面討論。

說明

如果沒有備份記錄檔，您還是可以刪減這個記錄檔，只要將資料庫的資料庫選項 trunc.log on chkpt 設為 TRUE 就行了。然而，這樣做以後您便不能備份交易記錄檔。這個設定將使得資料庫不可回復，因此不建議使用。

使用交易記錄檔回復

在資料庫檔案沒有破壞的系統故障事件中，當前的交易記錄檔可以用來回復資料庫，因為只需要回復那些還沒有寫入到磁碟中的交易。必須回復的頁面數量取決於資料庫中的 dirty page 數量，由檢查點間隔決定。檢查點會將 dirty page 寫入磁碟中，減少執行回復的時間。檢查點和檢查點間隔將在本章的 ＜檢查點＞ 一節中詳細討論。

交易記錄屬性

SQL Server 2000 和 SQL Server 7.0 中的交易記錄檔有很多相同的特點，如下：

- 交易記錄檔不再被視為等同於一個資料檔。在 8KB 頁面中交易不會像資料檔一樣從交易檔案中被寫入或讀取。現在交易記錄檔可以寫在任何它需要的大小尺寸中，交易記錄檔頁面不再按照資料頁的格式。因此，如果記錄檔寫入執行緒只需寫入少量內容，它就不必寫 8 KB 的資料。如果系統經常更新，那麼記錄檔寫入執行緒可以使用大型區塊（16 KB、32 KB等）來寫入。
- 交易記錄檔可以依據需要設定為自動增長。這個特性允許在需要時增加更多的空間，但是在使用它時應該注意避免交易記錄檔的無限制增長而佔用整個磁碟。
- 現在交易記錄檔可以用多個檔案來建置。這些檔案也可以設定為自動增長。但是交易記錄檔案無法劃分成資料帶；它們要一個接著一個使用。（資料帶劃分在 第 5 章 中討論。）
- 交易記錄檔可以移到其他系統中使用，以便在備用系統中再度執行。這就是所謂的記錄轉移，將在下一章中有更多的討論。

  無紀錄操作

  您已經熟悉紀錄和回復的規則，可以開始學這些規則的例外情形。如之前所提到，在正常的情況下，所有交易以及變更都記錄在交易記錄檔中。然而，您可以執行某些不會記錄下來的操作。這些操作稱為非記錄作業（nonlogged operation）。使用非記錄作業來執行大量資料操作（佔用大量的交易記錄檔案資源）時，可以提昇操作效能。

  由於非記錄作業沒有記錄在交易記錄檔中，如果有必要回復資料庫的話，就必須重新操作一次。因此，在使用非記錄作業前，必須仔細考慮非記錄作業的影響結果。非記錄作業的執行方法如下：

- SELECT INTO
- BULK COPY and Bulk Copy Program (BCP)
- CREATE INDEX
- 特定文字操作

  本章稍後會談到上述操作的更多細節。

  為了讓資料庫中可以執行非記錄作業，必須將資料庫設定在 BULK_LOGGED 回復模式。其他的回復操作是 FULL 和 SIMPLE。使用 ALTER DATABASE 指令設定這些選項，如下：

      ALTER DATABASE Northwind
      SET RECOVERY BULK_LOGGED

      ALTER DATABASE Northwind
      SET RECOVERY FULL

      ALTER DATABASE Northwind
      SET RECOVERY SIMPLE

  使用 BULKED_LOGGED 回復模式時，本章所提的大量操作將不會有記錄（會有些例外情形，將在稍後說明），而其它操作仍會有記錄。如果選擇 FULL 回復模式，那麼所有的操作又會全部記錄下來。當執行SIMPLE回復模式時，資料只會回復到最後一次備份。

  說明

  因為回復模式限定您的系統的故障容忍度，所以使用 BULK_LOGGED 回復模式時必須很謹慎。如果您使用這個模式，可以提昇非記錄大量操作的效能，但是故障事件發生時，將會增加回復時間。

  SELECT INTO

  SELECT INTO 陳述式是用來在資料庫中建立新的資料表。因為 SELECT INTO陳述式不能用來選擇資料放入已存在的物件中，所以它不能用來更新資料，只能用來建立資料。建立資料的過程常常可以重複執行，因此 SELECT INTO 陳述式很適合用來執行非記錄作業。

  大量複製和 BCP

  為了使大量複製和 BCP 操作可用來執行非記錄作業，必須符合下列幾項要求：

- 資料庫選項 select into/bulkcopy 必須設定在TRUE。
- 當大量資料複製開始時，目標資料表必須是空的才能夠製作索引。
- 不能複製目標資料表，因為交易複製時佔用了交易記錄檔中複製資料時所需要的項目。
- 必須指定 TABLOCK 提示來強制鎖定資料表。

  這些限制讓大量複製操作節省交易記錄檔的空間，還讓執行速度變快。然而，當資料庫必須從備份還原時，這些非記錄作業都要重新操作一次。

  CREATE INDEX

  CREATE INDEX 陳述式操作使也很適合執行非記錄作業，因為索引可以依需要重新建立。重建索引並不困難。然而，如果資料表太大，過程可能會相當花費時間，並佔用資源。

  文字操作

  文字操作可以用來執行非記錄作業的是 WRITETEXT 和 UPDATETEXT。要使這些操作執行時不留下記錄，您只要像剛剛所提的使用 BULK_LOGGED 回復選項就可以了。

  檢查點

  檢查點（checkpoint）是用來使實體資料檔案和資料庫快取的狀態同步的操作，可以減少系統故障事件發生時的必要回復時間。回復資料庫需要的時間取決於最後一個檢查點以來的時間總量和緩衝快取區中的 dirty page 數量。因此，減少檢查點的間隔可以減少回復時間，但會增加系統負荷：檢查點過程會導致大量的系統資源佔用。

  檢查點發生在以下時間點：使用 CHECKPOINT 陳述式時、使用 SHUTDOWN陳述式關閉 SQL Server 時、使用服務管理員關閉 SQL Server 時，以及 SQL Server 自動產生檢查點時。

  檢查點操作

  檢查點過程執行數個操作，包括下列內容：

- 在檢查點開始時就將所有的dirty page寫出 這時所有包含已變更資料但尚未寫到磁碟中的頁面將被寫到磁碟中。
- 將未完成的交易清單寫到交易記錄檔中 告訴 SQL Server 在檢查點發生時進行了哪些交易。如果系統發生故障，回復過程將使用這個資料回復交易。
- 將所有的 Dirty 記錄檔分頁寫到磁碟中 確保記錄檔緩衝區會更新到磁碟中。
- 將檢查點記錄儲存到資料庫中 由於交易記錄檔會被備份並刪減，所以需要在交易記錄檔以外保留一個檢查點的記錄。

  設定檢查點間隔

  檢查點間隔由 SQL Server 設定選項 復原間隔 定義。這個組態選項為整個SQL Server 系統設定，不是為單個資料庫設定，但檢查點在每個資料庫都會執行。這個組態選項指定了 SQL Server 在系統故障時用來回復每個資料庫的分鐘數。預設值為 0，指示 SQL Server 為您確定檢查點間隔，通常小於一分鐘。對於擁有大量記憶體和大量插入以及更新行為的系統，這個預設值可能導致過多的檢查點數量。在這種情況下，您可以將這個組態選項設定為較大的值。如果您的使用者可以容忍系統故障時，花費較長的回復時間（例如 30 分鐘），那麼您系統上的交易效能將會提昇。您應該根據您掌控停機時間的能力和故障的頻率來設定這個組態選項。

  檢查點間隔還取決於交易記錄檔中的記錄數量。它不由系統時間或記錄檔大小來決定。交易記錄檔中的記錄越多，檢查點間隔越短。做出的變更越多，插入到交易記錄檔中的記錄也就越多，從而導致 SQL Server 設定檢查點間隔時必須經常將變更寫入磁碟。如果資料庫的變更很少甚至沒有的話，那麼交易記錄檔將只包含很少的記錄，檢查點間隔將會變長。

  復原間隔組態選項可以透過兩個途徑變更：使用 Enterprise Manager 或使用T-SQL。要從 Enterprise Manager 中設定復原間隔，請在左邊窗格中在需要設定這個組態選項的伺服器名稱上按滑鼠右鈕，從快顯功能表中選擇 內容 進入 SQL Server 屬性視窗。選擇 資料庫設定 頁籤，如圖32-1所示，在復原間隔選擇方塊中指定需要的復原間隔，單位為分鐘。

  圖32-1　SQL Server屬性視窗

  要使用 T-SQL 設定復原間隔，請使用 sp_configure 預存程序，如下所示：

      sp_configure "recovery interval", 1
      GO

  您將看到下面的輸出：

      DBCC execution completed. If DBCC printed error messages,
      contact your system administrator.
      Configuration option changed. Run the RECONFIGURE statement
      to install.

  在執行 RECONFIGURE 命令前，這個變更不會生效。如果確認變更，請鍵入下面的 T-SQL 陳述式：

      RECONFIGURE
      GO

  RECONFIGURE 命令發出信號給 SQL Server，讓它接受設定的變更。不需要為了改變復原間隔組態選項使之生效而重新啟動 SQL Server。要確保您的設定確實生效，請使用下面的 T-SQL 陳述式：

      sp_configure "recovery interval"
      GO

  輸出看起來像這樣：

      name			   minimum  maximum   config_value   run_value
      -------------------------  -------  -------   ------------   ---------
      reconvery  interval (min)  0        32767     1              1

  可以看到到復原間隔組態選項已被設定。

  注意

  復原間隔組態選項是進階選項，只有在仔細規劃後才能變更。增加復原間隔設定將增加執行資料庫回復時需要的時間。

  備份方法

  有數種備份資料庫的方法：完全備份、差異備份、交易記錄檔備份、檔案群組備份和資料檔案備份。每種方法都有它自己的操作方式和功能。完全備份（full backup）備份資料庫、檔案群組或資料檔案中的所有資料。差異備份（differential backup）只備份那些自上次備份以來變更過的資料。交易記錄檔備份（transaction log backup）用來備份和刪減交易記錄檔。（正如我們所見，備份交易記錄檔是很重要的 DBA 任務，因為交易記錄資料是用來和資料庫備份連結的）檔案群組備份（File群組 backup）和資料檔案備份（datafile backup）用來備份資料庫中特定的檔案群組或資料檔案。

  所有的 SQL Server 備份都對特定的資料庫執行。要完成備份，您應該備份系統中的所有資料庫和它們的交易記錄檔。不要忘記備份 master 資料庫。記住，沒有一個好的備份，在出現故障事件時，您就不可能還原您的資料。

  完全備份

  前面已經提到，完全備份將備份一個完整的資料庫。將備份所有作為資料庫一部分的檔案群組和資料檔案。如果您有多個資料庫，您應該備份所有的資料庫。對於備份小規模的資料庫，完全備份可能是最普遍的技術。根據資料庫的大小，整個過程可能相當的佔用時間。因此，如果時間成為問題，您可能應該考慮執行差異備份或檔案群組備份，這將在後面討論。您一旦開始備份，就沒有辦法將它暫停，備份過程將一直繼續到整個資料庫完成備份。我們將在稍後

  ＜執行備份＞ 一節討論完全備份的執行。

  差異備份

  差異備份只備份那些自上次備份以來修改過的資訊。由於它們只備份一部分資料，差異備份比完全備份速度快，而且佔用較少的空間。然而差異備份的還原比完全備份更困難、也更花費時間。還原差異備份需要最近完全備份的還原，所有差異備份都自上次完全備份後產生。

  交易記錄檔備份

  交易記錄檔備份使您能夠備份交易記錄檔。正如在本章前面所述，這些備份對於資料庫回復很重要。

  檔案群組備份

  檔案群組備份將備份與資料庫中的單一檔案有關的所有資料檔案。這個過程和完全備份類似，它將備份資料檔案中所有的資料，而不考量資料上次備份的時間。您可以根據系統設定，使用檔案群組備份來備份和特定的部門或工作群組有關聯的檔案群組。如果您的系統分成各個獨立部門的資料並存取它們自己的檔案群組，您可以按照不同的排程來分別備份每個部門的資料。

  資料檔案備份

  資料檔案備份使您能備份檔案群組中的單一檔案。這種備份類型和 SQL Server 2000 分別還原單一資料檔案的能力一起運作。如果您每晚沒有足夠的時間備份整個檔案群組，那麼資料檔案備份會十分好用，它允許您循環備份資料檔案。當磁碟故障事件發生時，有某個資料檔案遺失或受到破壞，您只需還原這個特定的資料檔案。然而資料檔案備份的時間越久，還原過程所花的時間會越長。

  執行備份

  您可以使用 Enterprise Manager、T-SQL 指令或 Create Database Backup Wizard來執行備份。Create Database Backup Wizard 方法是這些方法中最簡單的，但是 Enterprise Manager 也是很容易使用的。另一方面，T-SQL 指令可以放置到 SQL 指令檔中，這樣就可以重覆使用。應該使用最合乎您需要的方法。

  備份操作自身可以導向到實體裝置或邏輯裝置中。實體裝置（physical device）是如磁帶機或磁碟機的物件。實體裝置透過作業系統分配名稱，而您必須使用這些名稱來存取這些裝置。由於這些預先分配的名稱很難記住，您可能想要為實體裝置建立一個別名或使用者自訂名稱。這樣的別名就被稱為邏輯裝置（logical device）。這些的邏輯裝置只存在於 SQL Server 中，並且只能由 SQL Sever 備份使用，因此也可以將它視為邏輯備份裝置（logical backup device）。如果您要將資料備份到邏輯裝置上，您必須預先建立這個裝置。在我們討論執行備份的不同方法之前，讓我們先看看如何建立邏輯備份裝置。我們將使用一個邏輯備份裝置作為本節的例子。（參見系統管理員中關於在系統中增加實體裝置的詳細內容。）

  建立邏輯備份裝置

  邏輯備份裝置的建立有兩種方法：使用 Enterprise Manager 或 T-SQL。我們將在本節中討論這兩種技術。多個備份裝置的使用可以改善效能。（在本章的

  ＜改善備份＞ 一節中將提供備份效能的提示。）

  使用 Enterprise Manager 建立備份裝置

  要使用 Enterprise Manager 建立備份裝置的方法如下：

  1. 在 Enterprise Manager 左邊窗格中展開 SQL Server 群組資料夾、Server 資料夾和 管理 資料夾。
  2. 在 備份 上按滑鼠右鈕，然後從快顯功能表中選擇 新增備份裝置 ，進入 備份裝置屬性 視窗，如圖32-2所示。

     圖32-2　「備份裝置屬性」視窗

  3. 只要在 名字 文字方塊中鍵入備份裝置的描述性名稱， 檔案名稱 文字方塊就會自動填入。要變更檔案名稱路徑，可以在 檔案名稱 文字方塊中鍵入新的路徑，或者點選 瀏覽 按鈕打開 備份裝置位置 對話方塊。本例中，備份裝置的名稱是 Backup_dev_1。如果要增加一個磁帶裝置，按下 檢視內容 按鈕，以檢視當前在磁帶裝置中的備份集合。

  一旦完成了這些步驟，這個裝置就已經可以使用了。在學習如何建立備份過程中，我們還要學習如何使用備份裝置。注意，如果您沒有任何連接到您的系統的磁帶裝置，就不能使用 磁帶裝置名稱 選項。

  使用 T-SQL 建立備份裝置

  要使用 T-SQL 建立一個備份裝置，請使用預存程序 sp_addump-device。sp_addumpdevice的語法如下：

      sp_addumpdevice device_type, logical_name, physical_name

  device_type 組態選項可以是 disk、tape 或 pipe，分別表示磁碟、磁帶機和連接協力廠商軟體到備份系統中。logical_name 組態選項是您分配給這個裝置的名稱；這個名稱可在 BACKUP 和還原陳述式中引用。physical_name 組態選項是系統分配的裝置或檔案名稱。

  例如，要建立一個名為 Backup_dev_2 磁碟檔案的邏輯裝置，請使用下面的語法：

      sp_addumpdevice 'disk', 'Backup_dev_2',
      'C:\MSSQL7\BACKUP\Backup_dev_2.BAK'

  建立遠端備份裝置

  為了將資料庫備份到遠端系統，您必須先使用系統預存程序 sp_addumpdevice來建立備份裝置。您不能在遠端伺服器上用 Enterprise Manager 建立備份裝置。為了指定遠端系統，您必須像實體名稱一樣指定 Universal Naming Convention (UNC)的全名，如下例所示：

      sp_addumpdevice 'disk', 'netbackup1',
      '\\ptc4\c$\backup\netbackup1.bck'

  一旦建立了這個備份裝置，您就能夠使用 Enterprise Manager 或者 T-SQL 陳述式來將資料備份進去。

  說明

  將資料備份到遠端系統上，您必須先安裝 SQL Server 來執行。如果在LocalSystem 帳號之下執行，LocalSystem 帳號沒有存取遠端系統的權利，會使得備份失敗。

  透過多重網路備份資料

  您也可以透過多重網路介面卡來執行備份。透過好幾個 LAN 程式段將資料備份到多重裝置上，您可以克服可能限制效能的網路頻寬問題。如果您正好透過兩個 LAN 程式段來將資料備份到一個系統上，您就可以在 UNC 位址上指定 IP 位址，如下所示：

      sp_addumpdevice 'disk', 'netbackup1',
      '\\100.100.100.1\c$\backup\netbackup1.bck'
      sp_addumpdevice 'disk', 'netbackup2',
      '\\100.100.200.1\c$\backup\netbackup2.bck'

  建立了這個備份裝置，您就能夠使用 Enterprise Manager 或 T-SQL 指令將資料備份在裡面。

  使用 Enterprise Manager 備份

  在您建立了一個或多個備份裝置後，您已經可以開始執行備份了。我們將首先討論 Enterprise Manager 方法。為了避免重覆，有些交易記錄檔和資料庫備份方法將放在一起討論，其中可辨識兩者差別的特定選項將會特別提出說明。

  執行備份

  要使用 Enterprise Manager 執行備份，請按照下面的步驟：

  1. 要呼叫 SQL Server Backup 工具，請使用下面的技術之一：
     - 在 Enterprise Manager 的左邊窗格中展開一個伺服器，然後展開管理資料夾。在 備份 上點選滑鼠右鈕，並從快顯功能表中選擇 備份資料表 。
     - 在 Enterprise Manager 的左邊窗格中展開一個伺服器，然後在 資料庫 上點選滑鼠右鈕，並從快顯功能表中選擇 所有工作 ，接著選擇 備份資料表 。
     - 在 Enterprise Manager 的左邊窗格中展開一個伺服器，然後點選 資料庫 資料夾。在右邊窗格中的一個資料庫上點選滑鼠右鈕，並從快顯功能表中選擇 所有工作 ，接著選擇 備份資料庫 。這時將出現 SQL Server 備份視窗，如圖32-3所示。

     圖32-3　SQL Server 備份視窗的一般頁籤

  2. 在 資料庫 下拉式清單中對話方塊的頂部區域，選取您要備份的資料庫。（如果您在第一步驟中使用第三種技術，那麼就已經選擇了資料庫的名稱。）備份的名稱會依據資料庫的名稱自動產生，可以在 名稱 文字方塊中鍵入一個備份的名稱來覆寫自動產生的名稱。也可以在 描述 文字方塊中鍵入一個備份說明。在您試著還原資料庫時，這個說明可能會很重要。例如，如果您在刪除一個資料表前立即建立了這個備份，則這個備份說明中的註解將十分有用。如果您在載入新的資料前執行備份，請將這資訊包含在您的說明中。
  3. 在這個對話方塊的 備份 區域中，必須指定執行備份的類型。可用選項將根據選擇的資料庫而有所不同。例如，Northwind 資料庫預設 Truncate Log On Checkpoint 選項，設定這個選項會讓備份程式無法使用 Transaction Log 和 File And File 群組選項。這些備份選項說明如下：
     - 資料庫 - 完整備份 執行一個完全資料庫備份；將備份資料庫中的所有資料。
     - 資料庫 - 差異備份 執行一個差異資料庫備份；將備份自上次備份以來變更的所有資料。
     - 交易記錄檔 執行一個交易記錄檔備份；它將同時刪減這個記錄檔。
     - 檔案及檔案群組 備份單一檔案群組或檔案；您可以指定備份的檔案群組或檔案。

     只能選擇其中一種備份類型。要執行完全資料庫備份和交易記錄檔備份，您必須執行兩次備份程式。

  4. 在 目的地 區域，必須指定備份是到磁帶還是磁碟上。點選 新增 ，可以加入更多的邏輯或實體備份裝置。這時將出現 選取備份目的 對話方塊，如圖32-4所示。在這個對話方塊中，您可以指定一個檔案名稱或從 Backup Device 下拉式清單中選取備份裝置。點選 確定 ，返回一般頁籤。在圖32-3的例子中，在 Backup To 清單中列出了兩個裝置。要刪除一個裝置，請在選擇該裝置後，點選 移除 。點選 內容 來檢視裝置的內容。

     圖32-4　選取備份目的對話方塊

     如果一個備份裝置先前已經使用過，就可使用資訊是可用的：

     - 名稱 這個名稱由曾經執行備份的使用者選擇過。
     - 伺服器 曾經執行備份的伺服器的名稱。
     - 資料庫 曾經執行備份的資料庫的名稱。
     - 類型 備份的類型（完全、差異、檔案群組、檔案）。
     - 日期 備份執行的日期和時間。
     - 到期時間 該備份指定的到期時間。
     - 規模 備份集合的總規模。
     - 描述 備份的說明。

     記住，多個備份經常能夠執行到同一備份裝置中。

  5. 在 SQL Server Backup 對話方塊中的 Overwrite 區域，您可以選擇覆寫（overwrite）媒體（如磁帶、磁碟）或者附加（append）媒體。磁碟裝置通常是使用附加。但是如果您正在使用磁帶，並循環使用舊的磁帶，您需要刪除以前的資訊。雖然您可以在對話方塊中點選 Overwrite Existing Media 來覆寫那些資訊，但較好的習慣是在執行備份前先清除那些資訊。採取這個預防措施有助於確保不會意外地覆寫了一個磁帶或磁碟裝置。
  6. 在 排程 區域中，可以選擇稍晚才來排程備份。排程備份對於交易記錄檔備份特別有用，這種類型的備份必須按照一定的時間來執行，以避免交易記錄檔被填滿。如果您要排程備份，選取 排程 核取方塊，然後點選 ... 按鈕來顯示 編輯排程 對話方塊，如圖32-5所示。
  7. 在 名稱 文字方塊中，為每個排程提供一個名稱。排程的命名允許您建立多個排程（也許是每個備份一個排程）。

     在 排程類型 區域中，您可以指定在 SQL Server 代理程式啟動時是否自動啟動備份、是否只要 CPU 閒置就啟動備份、以及備份是否只執行一次或是將反覆執行。如果您選擇執行一次備份，您可以使用 日期 來選擇備份執行日期，並使用 時間 選擇方塊來選擇時間。

     圖32-5　編輯排程對話方塊

     要設定循環備份的排程，請點選 重複執行 和 變更 。這時將出現 編輯執行作業排程 對話方塊，如圖32-6所示。

     這個對話方塊提供您極好的排程靈活度。在 每天 、 每週 和 每月 選項中，可以安排每個工作的頻率和持續時間。

     圖32-6　編輯執行作業排程對話方塊

  8. 點選 確定 返回 編輯排程 對話方塊，再次點選 確定 返回 SQL Server備份對話方塊，然後點選 選項 頁籤，如圖32-7所示。在這個頁籤中，可以指定是否應該在備份完成時確認備份媒體，並指定是否要標示以及如何標示這個媒體。可用的選項如下所述：
     - 完成時確認備份 確認備份媒體是否可讀取。只確認媒體的完整性；過程中不確認資料是否已經備份。
     - 備份後退出磁帶 在備份完成後，將磁帶從磁帶裝置中退出。當多個應用程式或使用者正在存取磁帶裝置時，該選項是有用的。這個選項可以避免您的磁帶被其他人覆寫。
     - 移除交易記錄檔中不使用的項目 在備份後刪減交易記錄檔。
     - Check Media Set Name And Backup Set Expiration 指定媒體要被檢查，並在到期前不被覆寫。
     - 檢查媒體集名稱及備份集是否逾期 允許設定媒體的到期日期。
     - 備份及逾期時間 允許為媒體指定一個標示。

     圖32-7　SQL Server 備份對話方塊的選項頁籤

  9. 完成這些選項的設定後，點選 確定 ，開始執行所設定的備份。

  管理備份

  要檢視、刪除和修改您已經安排的備份工作，請按照下列步驟：

  1. 在 Enterprise Manager 的左邊窗格中，展開一個伺服器資料夾，展開管理資料夾，展開 SQL Server 代理程式資料夾，並點選 作業 。這時已經安排的工作會列在 Enterprise Manager 的右側窗格中，如圖32-8所示。

     圖32-8　Enterprise Manager 作業顯示

  2. 要刪除一個作業，只要在作業名稱上按滑鼠右鈕，並從快顯功能表中選擇 刪除 。
  3. 要檢視或修改一個作業，在工作名稱上按滑鼠右鈕，並從快顯功能表中選擇 內容 來顯示屬性視窗。執行您的修改，然後點選 套用 和 確定 。

  使用 T-SQL 指令備份

  剛開始使用 T-SQL 備份資料庫比使用 Enterprise Manager 稍微難一些，但是如果您屬於那種喜歡使用指令檔自動執行操作的 DBA 類型，那麼這種技術應該也是您所喜歡的。TSQL BACKUP 指令也提供比在 Enterprise Manager 中的備份程式還要多的選項。本節中我們將討論 BACKUP 指令的語法和選項。實際上有兩種 T-SQL 備份指令，使用時依照您所要執行備份的類型而定。這些指令如下：

- BACKUP DATABASE 用來備份整個資料庫、檔案或檔案群組。
- BACKUP LOG 用來備份交易記錄檔。

  因為這兩種指令大部分共用相同的選項，所以我們將它們放在一起討論。

  執行備份

  用來進行完全資料庫備份的 BACKUP 陳述式語法如下：

      BACKUP DATABASE database_name
      TO backup_device
      [ WITH options ]

  這個陳述式只需要資料庫名稱、檔案名稱或檔案群組名稱和備份裝置名稱。可以包括多個檔案名稱或檔案群組名稱，中間以逗號隔開。

  交易記錄檔備份的陳述式語法如下：

      BACKUP LOG database_name
      {
      [ WITH { NO_LOG | TRUNCATE_ONLY )]
      }
      |
      {
      TO backup_device
      }
      [ WITH options ]

  這個陳述式需要資料庫名稱、WITH NO_LOG 或 WITH TRUN-CATE_ONLY 選項、或者是備份裝置名稱，然後您可以加入任何您需要的選項。NO_LOG 和 TRUNCATEONLY 選項是同義的，都將只刪減記錄檔，而不使用備份拷貝。

  注意

  在系統故障事件中，如果使用 BACKUP LOG 陳述式中的任何一個選項，您都將無法將資料庫回復到故障點，因為沒有記錄檔會保存下來。不建議使用這兩個選項，使用它們需要您自己承擔風險。

  在所有的三個備份指令中，database_name 是您要執行備份的資料庫名稱。backup_device 組態選項可以是一個邏輯備份裝置名稱或是實體裝置名稱。如果指定為實體裝置，就要根據裝置類型來為裝置名稱加上前置字 DISK=、TAPE= 或 PIPE=。您可以指定一個裝置或用逗號隔開的一組裝置，如下面兩個例子所示：

      Backup_dev_1, Backup_dev_2, Backup_dev_3

      TAPE = '\\.\Tape0', TAPE = '\\.\Tape1', TAPE = '\\.\Tape2'

  選項

  表32-1 列出了 BACKUP 指令可用的選項。如果某個選項只能對資料庫備份或記錄檔備份所用，將會對這些例外作註解。

  表32-1　BACKUP 指令選項

  選項 | 描述
  --- | ---
  BLOCKSIZE | 實體區塊大小，單位為位元組。
  DESCRIPTION | 指定備份集合的文字說明。對於還原時定位正確的備份集合十分有用。
  DIFFERENTIAL | 指定一個差異備份。這個選項只在使用完全資料庫備份有用。
  EXPIREDATE = date | RETAINDAYS = days | EXPIREDATE 選項指定備份集合到期的日期（可以被覆寫）。RETAINDAYS 選項指定備份集合到期前的天數。
  PASSWORD = password | 指定備份的密碼。提供備份本身較大的安全性。
  FORMAT | NOFORMAT | FORMAT 選項指定媒體標題將被重寫，因此會使媒體中的原始資料無效。NOFORMAT 指定媒體標題將不被重寫。
  INIT | NOINIT | INIT 選項指定備份集合位於媒體的第一個檔案中並保存媒體標題，但覆寫媒體中的所有資料。也就是說，INIT覆寫在磁帶上的任何內容。NOINIT 選項指定備份附加到媒體中。如果您要重新使用磁帶，您將需要使用這個選項。
  MEDIADESCRIPTION = text | 設定媒體集合的說明。
  MEDIANAME = media_name | 指定媒體的名稱。
  MEDIAPASSWORD = password | 指定媒體集合的密碼
  NAME = backup_set_name | 設定備份集合名稱
  NOSKIP | SKIP | NOSKIP 選項指定在備份集合被覆寫前，檢查媒體中備份集合的到期日期。SKIP 選項不檢查到期日期。
  NO_TRUNCATE | 指定在備份後不刪減交易記錄檔。這個選項只在記錄檔備份中有用。
  NOUNLOAD | UNLOAD | NOUNLOAD 選項指定在完成備份後，媒體不被卸載（例如，不退出磁帶）。UNLOAD 選項指定在完成備份後，卸載媒體。
  RESTART | 指示 SQL Server 重新啟動被中斷的備份。
  STATS [ = percentage ] | 在完成指定備份的百分率後，顯示一個訊息。如果您想要檢視操作的過程，這個選項將會是有用的。

  請確認您指定了備份附加到媒體中，或是應該覆寫媒體；您選擇的選項會影響到寫入磁帶中資料的數量。如果您正要備份資料到一個已經使用過的磁帶裝置上，卻沒有清除這個磁帶，也沒有指定要覆寫磁帶，您將發現磁帶的空間很快就用完了。在附加模式中，備份程式將只使用磁帶末端的可用空間。

  真實世界 使用BACKUP

  這裏有一些使用 BACKUP T-SQL 指令的例子。

  下面的例子為 Example 資料庫備份資料檔案：

      BACKUP DATABASE Example
      TO Backup_Dev_1, Backup_Dev_2
      WITH
      DESCRIPTION = "DB backup of example",
      STATS = 5
      GO

  備份裝置是 Backup_Dev_1 和 Backup_Dev_2，並當每完成備份的 5% 就會顯示統計數字。注意，在先前的例子中提供備份的說明。

  如果您在一個小的資料庫上測試這個例子，例如 Northwind，您看到的統計數字並不是 5% 的增量，您可能看到如 7%、16% 等的增量。這種差異的出現是因為備份程式一次讀取和寫入大於整個備份的 5%，這時就顯示那些較大的增量。對於較大的資料集合，寫入的增量將比 5% 小，所以將按照預設的顯示。

  下面的陳述式將備份 Example 資料庫的交易記錄檔：

      BACKUP LOG Example
      TO Backup_Dev_3, Backup_Dev_4
      WITH
      DESCRIPTION = "DB backup of example",
      STATS = 25
      GO

  備份裝置是 Backup_Dev_3 和 Backup_Dev_4，統計數字將顯示出 25% 的間隔時間。輸出結果顯示已完成操作和備份結果的百分率。您將會被通知備份了多少頁面、備份花了多長時間、以及備份的速度（MB/sec）。

  管理備份

  因為 T-SQL 指令 BACKUP 不在 Enterprise Manger 下執行，因此不能在 SQL Server Agent 下執行，所以您不能透過 BACKUP 指令來排程一個工作。然而您可以使用 SQL Server 排程功能來排程一個 T-SQL BACKUP 指令。一旦排程了這個工作，就能夠和管理 Enterprise Manager 備份一樣來管理這個工作了。

  使用建立資料庫備份精靈

  現在讓我們進入第三種執行備份的方法：使用建立資料庫備份精靈。

  執行備份

  要使用建立資料庫備份精靈來執行一個備份，請按照下列步驟：

  1. 在 Enterprise Manager 中，點選您要建立備份的資料庫，然後從 工具 功能表中選擇 精靈 ，顯示 選擇精靈 對話方塊。在 選擇精靈 對話方塊中展開 管理 資料夾，選擇 備份精靈 ，接著點選 確定 。此時出現 歡迎使用資料庫備份精靈 畫面，如圖32-9所示。

     圖32-9　歡迎使用資料庫備份精靈畫面

  2. 點選 下一步 進入 選取要備份的資料庫 畫面，如圖32-10所示。在這個畫面中，指定將要備份的資料庫。圖32-10顯示所選的 Northwind 資料庫。

     圖32-10　選取要備份的資料庫畫面

  3. 點選 下一步 進入 輸入備份的名稱及描述 畫面，如圖32-11所示。提供備份集合的名稱和說明，在 名稱 的文字方塊中鍵入名稱，在 描述 的文字方塊中鍵入說明。如果擁有很多備份，建議鍵入一些說明。

     圖32-11　輸入備份的名稱及描述畫面

  4. 點選 下一步 進入 選取備份類型 畫面，如圖32-12所示。選擇想要執行備份的類型： 備份整個資料庫、差異式資料庫備份 或 交易記錄檔備份 。圖32-12顯示選擇的是 備份整個資料庫 。

     圖32-12　選取備份類型畫面

  5. 點選 下一步 進入 選取備份目的地及動作 畫面，如圖32-13所示。在 選取備份裝置 區域中，指定是否要備份資料到磁帶、檔案或是一個特定備份裝置上，如果需要的話，請在適當的文字方塊中鍵入檔案名稱或裝置名稱。在 屬性 區域中，指定是否應該覆寫或附加備份媒體，在備份後是否要彈出磁帶（如果您使用磁帶），以及是否應該確認備份的完整性。確認備份的完整性是很好的主意，因為壞的磁帶可能導致整個備份失效。SQL Server 透過讀取磁帶並確認所有資料是可讀取的來確認備份的完整性。

     說明

     建立資料庫備份精靈只允許選擇一個備份裝置，這將徹底影響到備份效能，我們在本章的 ＜改善備份＞ 一節中看到。由於這個原因，Enterprise Manager 備份方法比建立資料庫備份精靈更適合使用。

     圖32-13　選取備份目的地及動作畫面

  6. 點選 下一步 進入 備份確認與排程 畫面，如圖32-14所示。這裏有確認媒體標示和設定到期日期的選項，如在 ＜使用Enterprise Manager備份＞ 一節中的說明。您也可以使用 編輯排程 對話方塊來將備份排程在稍後的時間執行，前面曾說明過（如圖32-5所示）。

     圖32-14　備份確認與排程畫面

  7. 點選 下一步 進入 完成建立資料庫備份精靈 畫面，如圖32-15所示。檢查文字方塊中的資訊，並點選 Finish 來執行這個備份。

     圖32-15　完成建立資料庫備份精靈畫面

  管理備份

  如果使用建立資料庫備份精靈，只能執行備份或建立一個定期的備份作業。如果建立了一項作業，必須使用 Enterprise Manager 或 T-SQL 來管理作業。管理作業在本章的 ＜使用Enterprise Manager備份＞ 一節中已經簡要說明。

  追蹤備份

  當您執行一個備份時，不管是透過 Enterprise Manager、T-SQL 或建立資料庫備份精靈，都將保存一個備份的記錄。這個記錄作為一列儲存在 msdb 資料庫的 backupfile 資料表中。在資料庫回復時，這些資訊用來確定資料庫是在何時執行的最後一次備份。其他資訊，例如備份集合 ID、被備份的檔案名稱等等也被儲存。因此系統資料庫定期進行備份是很重要的，這樣在需要時，便能夠獲得回復的資訊。

  排程備份

  排程備份是非常主觀的任務。很多因素將會影響到設計備份排程。由於在備份過程中，系統效能將會降低，所以備份應該限制在業餘時間進行。在本節中，我們將回顧幾個訣竅，這些訣竅可以幫助您設定一個備份排程。記住，即使備份影響了系統的效能，它們仍然是必須進行的關鍵操作，它們可以防止系統出現資料丟失。

  備份排程秘訣

  下面的訣竅可以協助您決定系統的理想備份排程：

- 計劃完全備份在業餘時間進行 如果您的公司不是 在7-by-24 環境（每週7天，每天24小時）中執行，那麼業餘時間將是執行備份的最佳時間。
- 每隔幾天做一次完全備份排程 如果您的資料庫很大，而您不能在指定的時間執行完全備份，那就將備份操作分成幾個區塊。每次您可以執行資料庫中一個區塊的檔案或檔案群組備份。幾天之後您就備份了所有的資料。
- 使用差異備份 如果您不能每晚都提供時間來執行完全備份，那麼您可以在一週中執行差異備份，在週末的時候執行完全備份。
- 自訂備份計劃 每個系統都是不同的，每個公司也都是不同的。設計最能符合您需要的備份排程。

  真實世界　規劃備份

  這裏有幾個備份規劃的範例，可能有助於您開發您自己的備份排程：

  - 5-by-8環境中的小系統 這種類型的系統通常允許每晚的完全備份。根據交易記錄檔的大小和完成的交易數量，交易記錄檔每天只需備份一次。
  - 7-by-24環境中的中等規模系統 執行在 7-by-24 環境的中等規模系統不允許大量備份的停機時間。然而，如果您的系統是這種規模，可以在週末時執行完全備份。備份的排程範例如下：

    週一　差異資料庫備份

    週二 　差異資料庫備份

    週三　差異資料庫備份

    週四　差異資料庫備份

    週五　差異資料庫備份

    週六　差異資料庫備份

    週日　完全資料庫備份

    每天　根據需要的交易記錄檔備份

  - 7-by-24環境的大規模系統 大規模的系統可能不允許在一天內完成完全備份。折衷的辦法是將完全備份分到幾天當中完成（在這個例子中，分到週六和週日）：

    週一　差異資料庫備份

    週二　差異資料庫備份

    週三　差異資料庫備份

    週四　差異資料庫備份

    週五　差異資料庫備份

    週六　完全檔案群組備份

    週日　完全檔案群組備份

    每天　根據需要的交易記錄檔備份

  這個資訊是要為您提供如何排程備份的方法。由於每個系統和系統要求都是不同的，只有您才能決定最佳的排程備份。

  改善備份

  使用一些簡單的技術，您就可以改善備份的效能和備份的執行。在本節中，您將學到其他增強效能以及改善備份的訣竅。

  增強備份效能

  增強備份效能是很重要的主題，這是因為備份執行的越快，在備份過程中 SQL Server 效能降低的時間越短。下面的技術將幫助您改善您的備份效能，並且在某些情況下也能幫助改善還原效能。（資料庫還原將在

  第 33 章 中討論。）
- 使用多個備份裝置 擁有多個備份裝置使得 SQL Server 能夠同時執行多個備份操作。這是透過 SQL Server 將備份劃分到幾個裝置中達成的。為了建置這一點，SQL Server 根據資料檔案的數量和備份裝置的數量建立了大量的執行緒。備份效能同時也透過額外的執行緒得以改善，這些額外的執行緒被用以寫入資料到這些裝置中。同時執行操作減少了這些操作花費的時間總量，特別是在多處理器的系統中。這項技術將同時改善備份和回復效能。
- 在資料庫中使用多個資料檔案 在資料庫中使用多個小資料檔案，而非一個大的資料檔案，這樣 SQL Server 就能夠同時執行更多備份。這項技術將同時改善備份和回復效能。
- 使用多重LAN程式段來執行備份 透過將備份分割成多重 LAN 程式段，您可以增加備份的網路頻寬。如兩個 LAN 程式段提供雙倍頻寬，三個區段提供三倍頻寬等等。
- 階段（stage）備份 要改善備份的效能，您可以執行這個備份作為磁碟備份，然後將磁碟備份檔案拷貝到磁帶機中。這種方法可以改善效能，因為磁碟比磁帶快，而且它還能在磁碟上保存最新的可用備份。但這項技術只有當備份檔案仍留在磁碟上時才能改善還原的效能。
- 使用差異備份 差異備份可以改善每個備份的效能，但是在還原整個資料庫時將花費更長的時間，您將在 第 33 章 中看到。如果無法接受備份的時間過長，那麼這種方法可以為您的系統提供最佳解決方案。如果您需要還原資料的機會很少，這種風險是可以接受的。

  其他訣竅

  下面關於執行備份的訣竅也許可以套用到您的個人環境中：

- 離開工作儲存備份 如果您在工作站之外儲存備份，這樣備份就能在諸如火災或洪水的災難中保存下來。備份資料比電腦系統本身要重要的多。
- 確認備份 備份不可能總是好的。磁帶可能變質，特別是您一次次的重複使用同一個磁帶時更是如此。透過確認備份（至少有時候），您至少可以知道磁帶是好的
- 不要每天重複使用同一備份媒體 每天重複使用同一備份媒體，您可能無法還原幾天前刪除的資料。循環使用備份磁帶，這樣您至少可以還原過去幾天的資訊。
- 保留記錄 您應該製作使備份運作以及必要時如何重建系統的檔案。記住，不可能總是您自己去重建系統。
- 備份系統資料表 記住定期備份系統資料庫，例如 master、msdb 資料庫。

  這些訣竅是用來幫助您開發您自己的備份策略。每個系統是不同的，且每人的需求是不同的。再一次說明，您必須開發適合您的策略。

  本章總結

  在本章中，您學到了 SQL Server 記錄檔是如何工作的、如何使用檢查點來縮短資料庫還原的時間，您學到了執行 SQL Server 備份的基礎知識、以及完全備份和差異備份、資料庫備份和交易記錄檔備份之間的差別，您還學到了如何排程和改善您的備份。在

  第 33 章 中，我們將繼續討論關於資料庫備份、還原和回復，您將學到如何還原資料庫、以及如何規劃損壞回復。