在備份和還原期間可能的媒體錯誤 (SQL Server)
適用於:SQL Server
SQL Server 可讓您選擇復原資料庫,而不理會偵測到的錯誤。 有一項重要的新錯誤偵測機制,就是可以選擇建立備份總和檢查碼,這是由備份作業所建立,並可使用還原作業來加以驗證。 您可以控制作業是否要檢查錯誤,以及在發生錯誤時,是要停止作業,還是要繼續進行。 如果備份包含備份總和檢查碼,RESTORE 和 RESTORE VERIFYONLY 陳述式就可以檢查錯誤。
注意
鏡像備份提供高達四個媒體集複本 (鏡像),可在因為媒體損壞而導致錯誤時,提供其他的複本來復原。 如需詳細資訊,請參閱鏡像備份媒體集 (SQL Server) (機器翻譯)。
備份總和檢查碼
SQL Server 支援三種類型的總和檢查碼:分頁上的總和檢查碼、記錄區塊中的總和檢查碼,以及備份總和檢查碼。 產生備份總和檢查碼時,BACKUP (備份) 會驗證從資料庫讀取的資料,是否與資料庫中的任何總和檢查碼或損毀頁指示一致。
BACKUP 陳述式可選擇性地計算備份資料流的備份總和檢查碼;如果分頁總和檢查碼或損毀頁資訊顯示在特定的分頁上,備份該分頁時,BACKUP 也會驗證該分頁的總和檢查碼、損毀頁狀態及分頁識別碼。 建立備份總和檢查碼時,備份作業不會新增任何總和檢查碼至分頁。 分頁會依照其存在於資料庫中的樣子來備份,而且備份不會修改分頁。
因為驗證及產生備份總和檢查碼會造成額外負擔,使用備份總和檢查碼可能會影響效能。 工作負載及備份的輸送量可能都會受到影響。 因此,您可以選擇是否要使用備份總和檢查碼。 決定要在備份期間產生總和檢查碼時,請小心監視對 CPU 造成的額外負擔,以及對系統上任何並行工作負載所造成的影響。
BACKUP 絕不會修改磁碟上的來源分頁或是分頁的內容。
已啟用備份總和檢查碼時,備份作業會執行下列步驟:
在將分頁寫入備份媒體之前,備份作業會先驗證分頁層級的資訊 (分頁總和檢查碼或損毀頁偵測,若其中一項存在的話)。 如果兩者都不存在,則備份無法驗證分頁。 而是直接包含未驗證的分頁,並且將其內容加入整體的備份總和檢查碼。
如果備份作業在驗證期間發生分頁錯誤,則備份失敗。
注意
如需分頁總和檢查碼及損毀頁偵測的詳細資訊,請參閱 ALTER DATABASE 陳述式的 PAGE_VERIFY 選項。 如需詳細資訊,請參閱 ALTER DATABASE SET 選項 (Transact-SQL)。
不論頁面總和檢查碼是否存在,BACKUP 都會產生備份資料流的個別備份總和檢查碼。 還原作業可以選擇性地利用備份總和檢查碼來驗證備份是否損毀。 備份總和檢查碼儲存在備份媒體中,而不是儲存在資料庫頁面中。 在還原時,您可以選擇性地使用備份總和檢查碼。
備份組會以旗標標示為包含備份總和檢查碼 (在 msdb..backupset 的 has_backup_checksums資料行中)。 如需詳細資訊,請參閱 backupset (Transact-SQL)。
在還原作業期間,如果備份媒體上有備份總和檢查碼,依預設 RESTORE 和 RESTORE VERIFYONLY 陳述式都會驗證備份總和檢查碼及分頁總和檢查碼。 如果沒有備份總和檢查碼,這二種還原作業仍會繼續進行,但不會執行任何驗證;這是因為沒有備份總和檢查碼,還原作業就不能確實地驗證分頁總和檢查碼。
在備份或還原作業期間對分頁總和檢查碼錯誤的回應
根據預設,在發生分頁總和檢查碼錯誤之後,BACKUP 或 RESTORE 作業會失敗,而 RESTORE VERIFYONLY 作業會繼續。 但是,您可以控制給定的作業在發生錯誤時是失敗還是盡其所能地繼續。
如果 BACKUP 作業在發生錯誤後繼續,該作業會執行下列步驟:
將備份媒體上的備份組標註為包含錯誤,並且在 msdb 資料庫的 suspect_pages 資料表中追蹤該分頁。 如需詳細資訊,請參閱 suspect_pages (Transact-SQL)。
將錯誤記錄在 SQL Server 錯誤記錄檔中。
將備份組標示為包含該類型的錯誤 (在 msdb.backupset 的 is_damaged資料行中)。 如需詳細資訊,請參閱 backupset (Transact-SQL)。
發出訊息指出已順利產生備份,但包含分頁錯誤。
相關工作
若要啟用或停用備份總和檢查碼
若要在備份作業期間控制錯誤的回應方式
另請參閱
ALTER DATABASE (Transact-SQL)
BACKUP (Transact-SQL)
backupset (Transact-SQL)
鏡像備份媒體集 (SQL Server)
RESTORE (Transact-SQL)
RESTORE VERIFYONLY (Transact-SQL)