復原到記錄序號 (SQL Server)
本主題僅與使用完整或大量記錄復原模式的資料庫相關。
您可使用記錄序號 (LSN) 定義還原作業的復原點。 但是,這是為工具供應商所提供的特定功能,未必普遍適用。
記錄序號概觀
執行 RESTORE 順序期間,在內部會使用 LSN 追蹤已還原之資料的時間點。 還原備份時,資料會還原到備份執行時間點所對應的 LSN; 差異與記錄備份則可將已還原的資料庫推往更後面的時間點,因為它們對應到較高的 LSN。
交易記錄中的每一筆記錄都由記錄序號 (LSN) 加以唯一識別。 LSN 是經過排序的,因此如果 LSN2 大於 LSN1,表示 LSN2 所參考記錄中描述的變更,發生在記錄 LSN1 所描述的變更之後。
發生重大事件時的記錄 LSN,有助於建構正確的還原順序。 因為 LSN 經過排序,所以可以進行相等和不等比較 (亦即 <、>、=、<=、>=)。 要建構還原順序時,這種比較很有用。
[!附註]
LSN 是資料類型 numeric(25,0) 的值。 數學運算 (例如:加、減) 在此沒有意義,且絕不能搭配 LSN 使用。
[回到頁首]
檢視備份與還原所使用的 LSN
特定備份與還原事件發生時的記錄 LSN,可透過下列一種或多種方式進行檢視:
[!附註]
LSN 也會出現在某些訊息文字中。
還原至 LSN 所用的 Transact-SQL 語法
使用 RESTORE 陳述式,可以在 LSN 上或剛好就在它之前停止,如下所述:
使用 WITH STOPATMARK = 'lsn:<lsn_number>' 子句,其中 lsn:<lsnNumber> 字串會指定包含所指定之 LSN 的記錄做為復原點。
STOPATMARK 會向前復原到 LSN,並且將該筆記錄納入向前復原中。
使用 WITH STOPBEFOREMARK = 'lsn:<lsn_number>' 子句,其中 lsn:<lsnNumber> 這個字串會指定緊接在包含指定之 LSN 號碼的記錄之前的記錄為復原點。
STOPBEFOREMARK 會向前復原到 LSN,並且從向前復原中排除該筆記錄。
通常會選取要納入或排除的特定交易。 實際上雖不需要這麼做,但指定的記錄是交易認可記錄。
範例
下列範例假設 AdventureWorks 資料庫已變更為使用完整復原模式。
RESTORE LOG AdventureWorks FROM DISK = 'c:\adventureworks_log.bak'
WITH STOPATMARK = 'lsn:15000000040000037'
GO