此備份和還原主題與所有 SQL Server 數據庫相關。
差異備份所基於的是最近一次的完整數據備份。 差異備份僅捕獲自該次完整備份後發生更改的數據。 差異備份所基於的完整備份稱為差異的“基准”。 完整備份(僅復制備份除外)可以用作一系列差異備份的基准,包括數據庫備份、部分備份和文件備份。 文件差異備份的基准備份可以包含在完整備份、文件備份或部分備份中。
本主題內容:
優點
差異備份概述
對只讀數據庫進行差異備份
相關任務
優點
與創建完整備份相比,創建差異備份的速度可能非常快。 差異備份只記錄自差異備份所基於的完整備份後更改的數據。 這有助於頻繁地進行數據備份,減少數據丟失的風險。 但是,在還原差異備份之前,必須先還原其基准。 因此,從差異備份進行還原必然要比從完整備份進行還原需要更多的步驟和時間,因為這需要兩個備份文件。
如果數據庫的某個子集比該數據庫的其余部分修改得更為頻繁,則差異數據庫備份特別有用。 在這些情況下,使用差異數據庫備份,您可以頻繁執行備份,並且不會產生完整數據庫備份的開銷。
在完整恢復模式下,使用差異備份可以減少必須還原的日志備份的數量。
差異備份概述
差異備份捕獲在創建差異基准和創建差異備份之間發生更改的任何“區”(物理上連續的八個頁的集合)的狀態。 這意味著,給定差異備份的大小取決於自建立差異基准後更改的數據量。通常,差異基准越舊,新的差異備份就越大。 在一系列差異備份中,頻繁更新的區可能在每個差異備份中包含不同的數據。
下圖顯示的是差異備份的工作原理。 該圖顯示了二十四個數據區,其中的六個已發生更改。 差異備份只包含這六個數據區。 差異備份操作取決於位圖頁,此頁針對每個區包含一位。 對於自建立差異基准後更新的每個區,該位在位圖中設置為 1。
在建立基准之後立即執行的差異備份通常明顯小於差異基准。 這可以節省存儲空間和備份時間。 但是,當數據庫隨著時間的推移發生更改時,數據庫與特定差異基准之間的差異將增大。 差異備份與其基准間隔的時間越長,差異備份可能就越大。 這意味著差異備份的大小最終會接近差異基准的大小。 較大的差異備份將失去備份更快、更小的優勢。
當差異備份的大小增大時,還原差異備份會顯著延長還原數據庫所需的時間。 因此,建議按設定的間隔執行新的完整備份,以便為數據建立新的差異基准。 例如,您可以每周執行一次整個數據庫的完整備份(即完整數據庫備份),然後在該周內執行一系列常規的差異數據庫備份。
在還原過程中,還原差異備份之前,必須先還原其基准。 然後只需還原最新的差異備份,即可將數據庫前滾到創建差異備份的時間。 通常,應該先還原最新的完整備份,然後再還原基於該完整備份的最新差異備份。
對只讀數據庫進行差異備份
對於只讀數據庫,單獨使用完整備份比同時使用完整備份和差異備份更容易管理。 當數據庫為只讀時,備份和其他操作無法更改文件中包含的元數據。 因此,差異備份所要求的元數據(如差異備份開始的日志序列號,即差異基准 LSN)存儲在 master 數據庫中。 如果在數據庫只讀時采用的是差異基准,則差異位圖指示的更改多於在基准備份之後實際發生的更改。 額外的數據由備份讀取,但不會寫入到備份中,因為存儲在 backupset 系統表中的 differential_base_lsn 用於確定在基准之後是否實際更改了數據。
重新構建、還原只讀數據庫或者分離再重新附加只讀數據庫後,會丟失差異基准信息。 這是因為 master 數據庫與用戶數據庫不同步。 SQL Server 數據庫引擎無法檢測或防止此問題的出現。 所有後續差異備份都不是基於最新的完整備份,從而可能會出現出人意料的結果。 若要建立新的差異基准,建議先創建完整數據庫備份。