Microsoft SQL Server 事物日志中每個記錄都由一個唯一的日志序列號(LSN)標識,如果 LSN2 大于 LSN1,則 LSN2 所標識的日志記錄描述的更改發(fā)生在日志記錄 LSN1 描述的更改之后。順序還原期間,還原完整備份后,數(shù)據(jù)被還原到進行備份的時間點相對應的 LSN,利用差異和日志備份可以將還原的數(shù)據(jù)庫推到稍后的時間,該時間與一個更高的 LSN 相對應。還原計劃中,最重要的日志序列號(LSN)是第一個和最后一個 LSN。
first_lsn或FirstLSN:備份集中第一個或最早日志記錄的日志序列號。對于數(shù)據(jù)備份和差異備份,第一個 LSN 標識的是需要此備份執(zhí)行恢復的最早日志記錄,對于日志備份,第一個 LSN 標識的是備份中包含的第一個日志記錄。last_lsn或LastLSN:備份集之后的下一條日志記錄的序列號。最后一個 LSN 標識的是備份結(jié)束后的下一個日志記錄。對于數(shù)據(jù)備份和差異備份(以及包含大容量日志操作的日志備份)。必須至少前滾到此 LSN,否則,還原期間復制的數(shù)據(jù)會出現(xiàn)不一致。對于日志備份,它包含的日志記錄最多到(但不包含)此LSN。
日志序列號和數(shù)據(jù)備份或差異備份對于數(shù)據(jù)備份或差異備份,first_lsn 和 last_lsn 之間的日志數(shù)據(jù)包含在備份中,這使得使用該備份(而無需日志備份)就可以恢復到 last_lsn。對于數(shù)據(jù)備份或差異備份,如果按還原順序使用備份,則 last_lsn 可能是最早的恢復點,如果需要更早的恢復點,則必須使用更早的備份。
當計劃在還原數(shù)據(jù)備份或差異備份后使用哪個日志備份前滾時,通常將從該數(shù)據(jù)備份或差異備份之后的第一個日志備份開始,檢查備份的屬性時,你就會發(fā)現(xiàn)這樣一個日志備份,其 first_lsn 小于或等于數(shù)據(jù)備份或差異備份中的 last_lsn,并且 last_lsn 大于數(shù)據(jù)備份或者差異備份中的 last_lsn。
日志序列號和日志鏈中的日志備份新的日志鏈將隨順序局創(chuàng)建后的第一個完整數(shù)據(jù)庫備份而啟動,或在從簡單恢復模式切換到完整或大容量日志恢復模式后啟動。first_lsn 和 last_lsn 用于將日志備份連成一個連續(xù)的序列?梢允褂眠B續(xù)的日志備份序列前滾數(shù)據(jù)庫。
在日志備份中,first_lsn 是備份中第一個日志記錄的 LSN,從此日志記錄開始,日志備份最多包含到 LSN 為 last_lsn 的日志記錄。而且僅當早期備份(Backup_A)中的最后一個日志記錄的 LSN 大于或等于后期備份(Backup_B)的第一個日志記錄的 LSN 時,這兩個日志備份才是連續(xù)的;也就是 Backup_A.last_lsn >= Backup_B.first_lsn。如果不是這樣,這兩個備份之間將存在空白。
這些 LSN 之間關系的意義如下:
A.last_lsn = B.last_lsn:則 B 通常是緊跟著 A 后進行的日志備份、A.last_lsn > B.last_lsn:存在重疊。重疊通常是由于創(chuàng)建僅復制日志備份或在時點還原后備份第一個日志引起的。重疊可能會涉及不同的恢復分叉。
日志鏈斷開的原因,通常,SQL Server 數(shù)據(jù)庫引擎會防止日志備份序列中出現(xiàn)空白,從而使日志鏈保持完整。但是,如果數(shù)據(jù)庫管理員先將恢復模式更改為簡單恢復模式,然后再將其改回完整或者大容量日志恢復模式,會使日志鏈斷開。
以上內(nèi)容是關于MSSQL 日志序列號和數(shù)據(jù)庫還原的關系的介紹,要想了解更多相關信息、教育培訓內(nèi)容,請隨時關注唯學網(wǎng),小編會第一時間為大家更新、跟進最新信息。