差異備份 (SQL Server)

適用于:yesSQL Server (所有支援的版本)

此備份和還原文章與所有SQL Server資料庫有關。

差異備份是以先前最近的完整資料備份為基礎。 差異備份只擷取自那次完整備份以後變更過的資料。 差異備份據以為基礎的完整備份就稱為差異的 「基底」 (Base)。 完整備份 (不包括僅限複製備份) 可做為一系列差異備份的基底,包括資料庫備份、部分備份及檔案備份。 檔案差異備份的基底備份可以包含在完整備份、檔案備份或部分備份之中。

優點

建立差異備份的速度比建立完整備份更快。 差異備份只會記錄自差異備份據以為基礎的完整備份以後變更過的資料。 這有利於經常備份資料,以降低資料遺失的風險。 但是,在還原差異備份之前,必須先還原其基底。 因此,從差異備份中還原較之從完整備份中還原,由於需要兩個備份檔案,因此勢必要採取更多的步驟和時間。

如果資料庫某個子集的修改比資料庫的其餘部分更加頻繁,差異資料庫備份就特別有用。 在這些情形下,差異資料庫備份可以讓您經常備份,而避免完整資料庫備份的負擔。

在完整復原模式下,使用差異備份可減少您必須還原的記錄備份數目。

差異備份概觀

差異備份會擷取任何 範圍 的狀態, (八個實際連續頁面的集合,) 在建立差異基底和建立差異備份時有所變更。 這表示給定差異備份的大小取決於基底之後變更過的資料量。 一般而言,基底愈舊,新的差異備份就會愈大。 在一系列的差異備份中,經常更新的範圍很可能包含每個差異備份中的不同資料。

下圖說明差異備份的運作方式。 圖中顯示 24 個資料範圍,其中 6 個已經變更。 差異備份只包含這六個數據範圍。 差異備份作業必須藉助點陣圖頁面 (此頁面包含每個範圍的一個位元)。 對於基底之後已更新的每個範圍,點陣圖中的位元將設為 1。

Diagram of how the differential bitmap identifies changed extents.

注意

僅限複製備份不會更新差異點陣圖。 因此,只複製備份不影響後續的差異備份。

在基底之後相當快進行的差異備份,可能會明顯小於差異基底。 因此可以節省儲存空間和備份時間。 不過,資料庫隨著時間不斷變更後,資料庫和特定差異基底之間的差異也會跟著增加。 差異備份及其基底之間相隔的時間愈長,差異備份的規模可能愈大。 這表示差異備份的大小到最後會與差異基底的大小十分接近。 大型的差異備份將喪失備份速度較快與規模較小的優勢。

隨著差異備份大小增加,還原差異備份會大幅增加還原資料庫所需的時間。 因此,建議您定期進行新的完整備份,為資料建立新的差異基底。 例如,您可能每週進行整個資料庫的完整備份 (亦即,完整資料庫備份),然後在該週定期進行一連串的差異資料庫備份。

還原時,您必須在還原差異備份之前先還原其基底。 接著,只還原最新的差異備份,以便將資料庫向前復原到建立該差異備份的時間點。 通常,您會在還原最新的完整備份之後,接著還原以該完整備份為基礎的最新差異備份。

具有記憶體優化資料表的資料庫差異備份

如需差異備份和具有記憶體最佳化資料表之資料庫的資訊,請參閱 備份含有記憶體最佳化資料表的資料庫

唯讀資料庫的差異備份

對於唯讀資料庫,單獨使用的完整備份比搭配差異備份使用時更容易管理。 當資料庫是唯讀時,備份和其他作業無法變更檔案中包含的中繼資料。 因此,差異備份所需的中繼資料,例如差異備份開始 (差異基底 LSN) 儲存在 master 資料庫中的記錄序號。 如果資料庫是唯讀時採用差異基底,差異點陣圖表示自基底備份以來發生的變更多。 額外的資料是透過備份讀取,但不會寫入備份,因為 differential_base_lsn 儲存在 backupset 系統資料表中的 是用來判斷資料自基底之後是否已變更。

重建,還原或卸離後再重新附加唯讀資料庫時,會遺失差異基底資訊。 這是因為 master 資料庫未與使用者資料庫同步。 SQL Server 資料庫引擎無法偵測或防止此問題。 任何稍後的差異備份都不是以最新的完整備份為基礎,而且可能會提供非預期的結果。 若要建立新的差異基底,我們建議您建立完整資料庫備份。

搭配唯讀資料庫使用差異備份的最佳做法

建立唯讀資料庫的完整資料庫備份之後,如果您想要建立後續的差異備份,請 master 備份資料庫。

master如果資料庫遺失,請先還原它,再還原使用者資料庫的任何差異備份。

如果您卸離並附加您稍後打算使用差異備份的唯讀資料庫,只要可行,請同時取得唯讀資料庫和 master 資料庫的完整資料庫備份。

另請參閱