結尾記錄備份

本主題僅與使用完整或大量記錄復原模式的資料庫有關。

在完整模式或大量記錄復原模式下,SQL Server 2005 及更新的版本多半會要求您備份記錄的結尾,以便擷取尚未備份的記錄檔記錄。在還原作業之前對記錄結尾進行的記錄備份,就稱為「結尾記錄備份」。

SQL Server 2005 及更新的版本通常會要求您在開始還原資料庫之前進行結尾記錄備份。結尾記錄備份可防止工作遺失,並保持記錄鏈結完整。當您將資料庫復原到失敗點時,結尾記錄備份是復原計畫中重要的最後備份。如果您無法備份記錄的結尾,則只能將資料庫復原到失敗前建立的最後一個備份的結尾。

並不是所有的還原實例都需要結尾記錄備份。如果復原點已包含在較早的記錄備份中,或者您要移動或取代 (覆寫) 資料庫,就不需要有結尾記錄備份,而且不需要將它還原至最近備份之後的某個時間點。此外,如果記錄檔損毀,而且無法建立結尾記錄備份,您也必須在不使用結尾記錄備份的情況下還原資料庫。任何在最近一次記錄備份之後認可的交易都會遺失。如需詳細資訊,請參閱本主題稍後的「不使用結尾記錄備份而進行還原」。

備份記錄檔的結尾

就像任何記錄備份一樣,結尾記錄備份是使用 BACKUP LOG 陳述式所進行的。我們建議您在下列情況中進行結尾記錄備份:

  • 如果資料庫在線上,而且您打算執行資料庫的還原作業,請在開始還原作業之前,先使用 WITH NORECOVERY 備份記錄結尾:

    BACKUP LOG <database_name> TO <backup_device> WITH NORECOVERY

    [!附註]

    為了避免錯誤,NORECOVERY 選項是必要的。

  • 如果資料庫離線而且未啟動。

    嘗試進行結尾記錄備份。因為這段時間不會發生交易,使用 WITH NORECOVERY 是選擇性的。如果資料庫受損,請使用 WITH CONTINUE_AFTER_ERROR,如下所示:

    BACKUP LOG database_name TO <backup_device> WITH CONTINUE_AFTER_ERROR

    如果資料庫受損 (例如,資料庫未啟動),則只有在記錄檔未損壞、資料庫處於支援結尾記錄備份的狀態,以及資料庫沒有包含任何大量記錄變更時,結尾記錄備份才會成功。

下表彙總這些選項。

BACKUP LOG 選項

註解

NORECOVERY

每當您打算在資料庫上繼續還原作業時,請使用 NORECOVERY。NORECOVERY 會讓資料庫進入還原狀態。這樣可以保證資料庫不會在結尾記錄備份之後變更。

除非也指定了 NO_TRUNCATE 選項或 COPY_ONLY 選項,否則會截斷記錄。

重要事項重要事項
除非資料庫受損,否則建議您避免使用 NO_TRUNCATE。

CONTINUE_AFTER_ERROR

只有在您要備份受損資料庫的結尾時,才使用 CONTINUE_AFTER_ERROR。

附註附註
當您在受損資料庫上使用結尾記錄備份時,一般可在記錄備份中擷取到的某些中繼資料可能無法使用。如需詳細資訊,請參閱本主題稍後的「具有不完整備份中繼資料的結尾記錄備份」。

若要在資料庫損毀時建立交易記錄備份

具有不完整備份中繼資料的結尾記錄備份

即使資料庫離線、損毀或遺漏資料檔案,結尾記錄備份還是會擷取記錄檔的結尾。這可能會導致還原資訊命令和 msdb 產生不完整的中繼資料。不過,只有中繼資料不完整,所擷取的記錄仍然完整可用。

如果結尾記錄備份具有不完整的中繼資料,backupset 資料表中的 has_incomplete_metadata 會設為 1。此外,在 RESTORE HEADERONLY 的輸出中,HasIncompleteMetadata 也會設為 1

如果結尾記錄備份的中繼資料不完整,backupfilegroup 資料表將會遺失有關檔案群組在結尾記錄備份期間的大部分資訊。大部分 backupfilegroup 資料表資料行為 NULL,只有下列資料行具有意義:

  • backup_set_id

  • filegroup_id

  • type

  • type_desc

  • is_readonly

不使用結尾記錄備份而進行還原

不需要結尾記錄備份的還原實例包括:

變更記錄

更新的內容

已更新<備份記錄檔的結尾>一節,更正有關資料庫離線而且無法啟動時採用結尾記錄備份的資訊。