記錄序號和還原計畫

 這個主題是關於使用完整復原模式的 SQL Server 資料庫。

關於還原計畫,最重要的記錄序號 (LSN) 是第一個及最後一個 LSN。這些 LSN 可以從下列位置取得:

  • msdb 中的 backupset 資料表。名為 first_lsnlast_lsn 的資料行。

  • RESTORE HEADERONLY 陳述式。名為 FirstLSNLastLSN 的資料行。

下表針對不同的備份來定義這些詞彙。

詞彙

定義

first_lsnFirstLSN

備份組中第一個或最舊記錄的記錄序號。

若為資料和差異備份,第一個 LSN 會找出以此備份執行復原時所需要的最早記錄。

若為記錄備份,第一個 LSN 會找出備份所包含的第一個記錄。

last_lsnLastLSN

備份組之後下一個記錄的記錄序號。

最後一個 LSN 識別下一個記錄超過備份結尾。若為資料和差異備份 (以及若為含有大量記錄作業的記錄備份),向前復原則至少必須到這個 LSN。否則,還原期間複製的資料會不一致。

若為記錄備份,記錄備份包括在這個 LSN 之前的記錄記錄。

記錄序號和資料或差異備份

若為資料和差異備份,則 first_lsnlast_lsn 之間的記錄資料會包含在備份中。這允許在沒有記錄備份的情況下使用備份,以復原成 last_lsn

若為資料或差異備份,如果您在還原順序中使用備份,則 last_lsn 可能會是最早的復原點。如果需要較早的復原點,則必須使用較早的備份。

規劃要在還原資料或差異備份之後使用哪個記錄備份來向前復原時,您通常從該資料或差異備份之後的第一個記錄備份開始。檢閱備份的屬性時,您將會發現其 first_lsn 小於或等於資料或差異備份之 last_lsn 的記錄備份,以及 last_lsn 大於資料或差異記錄備份之 last_lsn 的記錄備份。

記錄序號和記錄鏈結中的記錄備份

新記錄鏈結始於建立資料庫之後,或從簡單復原模式切換到完整或大量記錄復原模式之後的第一個完整資料庫備份。在鏈結的第一個記錄備份中,backupset.begins_log_chain = 1。

first_lsnlast_lsn 是用來將記錄備份連結至連續時序 (記錄鏈結)。您可以使用一連串的連續記錄備份,從最新的資料或差異備份,或從在遺漏或損壞資料之前的較早備份和差異備份,向前復原資料庫。

在記錄備份中,first_lsn 是備份中第一個記錄的 LSN,而從這個記錄開始,記錄備份包含的記錄是到 LSN 是 last_lsn 的記錄為止,但不包括此記錄在內。只有在較早備份 (Backup_A) 中最後一個記錄的 LSN 大於或等於較晚備份 (Backup_B) 中第一個記錄的 LSN 時,這兩個記錄備份才會連續;亦即,Backup_A.last_lsn >= Backup_B.first_lsn。如果不是這樣,表示這兩個備份之間有間距存在。

這些 LSN 之間關係的重要性如下:

  • A.last_lsn = B.first_lsn

    如果 A.last_lsn = B.first_lsn,則 B 通常是緊接在 A 之後產生的記錄備份。

    這個關聯性顯示在下圖中。請注意,出現在記錄備份 B 的記錄 n,在記錄備份 A 中是記錄為 last_lsn,而在記錄備份 B 中則記錄為 first_lsn

    記錄備份 A 的 last_lsn = 記錄備份 B 的 first_lsn

  • A.last_lsn> B.first_lsn

    如果 A.last_lsn > B.first_lsn,則會發生重疊。重疊發生的原因通常是因為建立僅複製記錄備份,或因為時間點復原之後取用的第一個記錄備份。重疊可能涉及不同的復原分支。如需詳細資訊,請參閱<復原路徑>。

中斷記錄鏈結的原因

一般而言,SQL Server Database Engine 可防止一連串記錄備份產生間距,確保記錄鏈結完整無缺。然而,資料庫管理員可透過將復原模式變更為簡單模式,再回到完整或大量記錄模式,以中斷記錄鏈結。

在涉及簡單復原模式的復原模式變更之際,您無法向前復原,因為記錄鏈結已中斷。變更為完整或大量記錄復原模式之後,您應該取用新的差異基底或差異基底組。或者,您也可以使用差異備份來填補間距。