2009-07-17 69 views
3

Log Sequence Number的含義是什麼?我知道它是二進制類型和10字節長的,它對應於在數據庫中發生事務的時間。但是,這是一個高精度的日期 - 時間值,它以某種有效的二進制格式存儲,或者是日期時間和其他內容(例如在同一毫秒內發生的事務的序列號)的函數。我做了很多搜索,但找不到一個好的答案。LSN在SQL Server中的含義是什麼?

任何人都可以解釋一個公式或函數,用於從日期時間或任何東西派生LSN。

回答

14

在SQL Server 事務日誌中的每個記錄由一個日誌序列號(LSN)唯一標識 。對LSN 進行排序,使得如果LSN2是大於LSN1的 ,則日誌記錄所描述的變化 被稱爲 到LSN2發生在由日誌記錄LSN描述的變化 之後。

here

你不應該關心這些是如何產生的。

+0

米奇,我在發佈之前檢查了MSDN。我正在尋找的是它是如何製造的。就像這對我的特殊應用很重要。謝謝你的時間。 – Faiz 2009-07-19 15:30:45

+1

如果它對您的應用程序很重要,我只能假設您正在編寫某種低級恢復實用程序?如果沒有,你不需要知道這些是如何產生的。它可能會改變(不太可能,但沒有什麼可以阻止MS,因爲它不是一個已發佈的界面)。 – 2009-07-20 00:58:11

+0

我正在嘗試在ETL中使用此提取窗口提取窗口。不適用於恢復實用程序。我想確保使用LSN作爲窗口的目的是安全的。看到我的其他問題[http://stackoverflow.com/questions/1137283/in-sql-server-cdc-with-ssis-which-data-should-be-stored-for-windowing-lsn-or-da/1137329 #1137329] – Faiz 2009-07-20 06:43:26

5

它是一個遞增序列(1,2,3,4,...),而不是日期時間值。從Microsoft documentation

的日誌序列號(LSN)值是 由三部分組成,唯一地遞增 值。它用於維護數據庫中事務日誌 記錄的 序列。這允許 SQL Server維護ACID 屬性並執行適當的 恢復操作。

1

沒有萬無一失的方法獲得它,但你可以從msdb.dbo.backupset你做了備份的機器上猜:

SELECT last_lsn 
FROM msdb.dbo.backupset 
WHERE backup_start_date = @backup_date 

這當然是不準確和不可靠的。

-1

當提交事務並完成備份時,LSN是一個自動生成的增量編號,因此如果要將該序列用於應用程序表,請使用while循環獲取序列並使用日期時間值。