在備份和還原期間偵測及處理媒體錯誤

Microsoft SQL Server 2005 及更新的版本可讓您選擇在不理會所偵測之錯誤的情況下,復原資料庫。有一項重要的新錯誤偵測機制,就是可以選擇建立備份總和檢查碼,這是由備份作業所建立,並可使用還原作業來加以驗證。您可以控制作業是否要檢查錯誤,以及在發生錯誤時,是要停止作業,還是要繼續進行。如果備份包含備份總和檢查碼,RESTORE 和 RESTORE VERIFYONLY 陳述式就可以檢查錯誤。

[!附註]

鏡像備份提供高達四個媒體集複本 (鏡像),可在因為媒體損壞而導致錯誤時,提供其他的複本來復原。如需詳細資訊,請參閱<使用鏡像備份媒體集>。

BACKUP 期間的總和檢查碼

SQL Server 支援三種類型的總和檢查碼:分頁上的總和檢查碼、記錄區塊中的總和檢查碼,以及備份總和檢查碼。產生備份總和檢查碼時,BACKUP (備份) 會驗證從資料庫讀取的資料,是否與資料庫中的任何總和檢查碼或損毀頁指示一致。

BACKUP 陳述式可選擇性地計算備份資料流的備份總和檢查碼;如果分頁總和檢查碼或損毀頁資訊顯示在特定的分頁上,備份該分頁時,BACKUP 也會驗證該分頁的總和檢查碼、損毀頁狀態及分頁識別碼。建立備份總和檢查碼時,備份作業不會新增任何總和檢查碼至分頁。分頁會依照其存在於資料庫中的樣子來備份,而且備份不會修改分頁。因為驗證及產生備份總和檢查碼會造成額外負擔,使用備份總和檢查碼可能會影響效能。工作負載及備份的輸送量可能都會受到影響。因此,您可以選擇是否要使用備份總和檢查碼。決定要在備份期間產生總和檢查碼時,請小心監視對 CPU 造成的額外負擔,以及對系統上任何並行工作負載所造成的影響。

[!附註]

BACKUP 絕不會修改磁碟上的來源分頁或是分頁的內容。

下列 BACKUP 選項可控制備份總和檢查碼的行為:

  • CHECKSUM

    若啟用並可使用此選項,則會要求備份作業驗證每一分頁的總和檢查碼以及損毀頁,並且會產生整個備份的總和檢查碼。

    若在備份作業期間要求驗證總和檢查碼:

    • 在將分頁寫入備份媒體之前,BACKUP 會先驗證分頁層級的資訊 (分頁總和檢查碼或損毀頁偵測,若其中一項存在的話)。如果兩個都不存在,備份就不能驗證該分頁;將該分頁併入時會保持原狀,並且會將內容加入整體的備份總和檢查碼。

      [!附註]

      如需分頁總和檢查碼及損毀頁偵測的詳細資訊,請參閱 ALTER DATABASE 陳述式的 PAGE_VERIFY 選項。如需詳細資訊,請參閱<ALTER DATABASE (Transact-SQL)>。

    • 不論頁面是否有總和檢查碼,備份都會產生個別的備份總和檢查碼 (「備份總和檢查碼」),並將此資訊記錄在備份媒體上,以供還原階段選擇使用。

    • 備份組會以旗標標示為包含備份總和檢查碼 (在 msdb..backupsethas_backup_checksums 資料行中)。如需詳細資訊,請參閱<backupset (Transact-SQL)>。

    [!附註]

    若為記錄備份,則會產生並驗證備份總和檢查碼。

  • NO_CHECKSUM

    明確地停用備份總和檢查碼的分頁驗證及產生功能。(此為預設的行為。)

控制錯誤的回應

指定 CHECKSUMS 時,若 BACKUP 在驗證期間發生分頁錯誤,則備份失敗。下列 BACKUP 選項可控制此行為:

  • CONTINUE_AFTER_ERROR

    指示 BACKUP 繼續,儘管產生了無效的備份總和檢查碼。在此情況下,BACKUP 會:

    將備份媒體上的備份組標註為包含錯誤,並且在 msdb 資料庫的 suspect_pages 資料表中追蹤該分頁。如需詳細資訊,請參閱<suspect_pages (Transact-SQL)>。

    • 將錯誤記錄在 SQL Server 錯誤記錄檔中。

    • 將備份組標示為包含該類型的錯誤 (在 msdb.backupsetis_damaged 資料行中)。如需詳細資訊,請參閱<backupset (Transact-SQL)>。

    • 發出訊息指出已順利產生備份,但包含分頁錯誤。

  • STOP_ON_ERROR

    指示 BACKUP 在未進行總和檢查碼的驗證之下,便告失敗。(此為預設的行為。)

RESTORE 及 RESTORE VERIFYONLY 期間的總和檢查碼

如果備份媒體上有備份總和檢查碼,依預設 RESTORE 和 RESTORE VERIFYONLY 作業都會驗證備份總和檢查碼及分頁總和檢查碼。如果沒有備份總和檢查碼,這二種還原作業仍會繼續進行,但不會執行任何驗證;這是因為沒有備份總和檢查碼,還原作業就不能確實地驗證分頁總和檢查碼。

有兩個選項 (CHECKSUM 及 NO_CHECKSUM) 可讓您修改 RESTORE 及 RESTORE VERIFYONLY 處理總和檢查碼驗證的方式,如下所示:

  • CHECKSUM

    如果您明確地在還原作業中要求 CHECKSUM,而且備份包含備份總和檢查碼,就會和預設情況一樣,備份總和檢查碼及分頁總和檢查碼都會加以驗證。然而,如果備份組沒有備份總和檢查碼,則還原作業就會失敗,並且會產生訊息指出總和檢查碼不存在。

  • NO_CHECKSUM

    明確地讓還原作業停止執行任何總和檢查碼的預設驗證。

控制錯誤的回應

若要指定發生錯誤時的還原作業行為,請使用下列的 RESTORE 及 RESTORE VERIFYONLY 選項:

  • CONTINUE_AFTER_ERROR

    指定在發生錯誤之後,還原作業繼續運作。這是 RESTORE VERIFYONLY 的預設行為,可讓它報告驗證錯誤並繼續執行,盡可能提供備份組的相關資訊。CONTINUE_AFTER_ERROR 會要求 RESTORE 盡可能繼續進行。最重要的是,這樣會促使 RESTORE 略過無效的總和檢查碼。

  • STOP_ON_ERROR

    指定還原作業在發生第一次錯誤時即停止且失敗。這是 RESTORE 的預設行為。