備份唯讀資料庫

這個主題會提出備份目前為唯讀或上次備份時為唯讀的資料庫的考量事項。

就唯讀資料庫而言,其主要檔案無法在備份期間更新。對唯讀資料庫的最佳作法就是進行完整備份。不過,如果資料庫時而唯讀又時而讀取/寫入,那麼在它為讀取/寫入時備份資料庫,可能比較有意義。接下來,只要資料庫仍然是讀取/寫入,而變更的範圍又很小,您便可進行差異備份。

[!附註]

您無法在備份期間變更檔案群組的 IsReadOnly 屬性。嘗試這麼做會產生錯誤並且失敗。

在資料庫變更為讀取/寫入權限之後的部分備份

唯讀資料庫的部分備份只包含主要檔案群組。如果資料庫後來變成讀取/寫入,則現在可能有不在部分備份中的讀取/寫入次要檔案群組。若情況如此,當您試圖進行差異部分備份時,備份會失敗。您必須先進行另一個部分備份,才可以進行資料庫的差異部分備份。新的部分備份會包含每個讀取/寫入次要檔案群組,並且可作為差異部分備份的基底。

唯讀資料庫的差異備份

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

重建,還原或卸離後再重新附加唯讀資料庫時,會遺失差異基底資訊。發生這種情形的原因是,master 資料庫與使用者資料庫並未同步。SQL Server Database Engine 無法偵測或防止此問題。以後的任何差異備份將不會以最近的完整備份為基底,因此可能會產生出人意料的結果。若要建立新的差異基底,我們建議您建立完整資料庫備份。

對唯讀資料庫使用差異備份的最佳作法

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

如果 master 資料庫遺失,在還原使用者資料庫的任何差異備份之前,請先將此資料庫還原。

如果您先卸離再附加您打算於稍後使用差異備份的唯讀資料庫,請盡可能進行唯讀資料庫和 master 資料庫的完整資料庫備份。