2009-07-17 4 views
3

В чем смысл номера последовательности журналов? Я знаю, что это тип двоичный и 10bytes long, и это соответствует времени, в течение которого транзакция происходит в БД. Но является ли это высокоточным значением даты-времени, которое хранится в некотором эффективном двоичном формате или это функция даты и времени (например, серийный номер транзакций, которые происходят за один миллион секунд). Я много искал, но не мог найти хорошего ответа на этот вопрос.Что означает LSN в SQL Server?

Может ли кто-нибудь объяснить формулой или функцией, которая используется для получения LSN из даты или времени.

ответ

14

Каждая запись в журнале транзакций SQL Server однозначно идентифицируется порядковым номером журнала (LSN). LSN заказываются таким образом, что если LSN2 равен больше, чем LSN1, изменение , описанное в записи журнала от к LSN2, произошло после изменения , описанного в записи журнала LSN.

От here.

Вы не должны беспокоиться о том, как они сгенерированы.

+0

Митч, я проверил MSDN перед публикацией здесь. Я ищу, как это делается. Как и для моего конкретного приложения. Спасибо за ваше время. – Faiz

+1

Если это важно для вашего приложения, я могу предположить, что вы пишете какую-то утилиту восстановления низкого уровня? Если нет, вам не нужно знать, как они сгенерированы. Это может измениться (маловероятно, но ничего не остановить MS, поскольку это не опубликованный интерфейс). –

+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

5

Это возрастающая последовательность (1,2,3,4, ...), а не значение даты. От Microsoft documentation:

значением Последовательности лога номер (LSN) является из трех частей, однозначно приращение значения. Он используется для ведения последовательности в журнале транзакций записей в базе данных. Это позволяет SQL Server поддерживать свойства ACID и выполнять соответствующие действия по восстановлению .

+0

Хорошо. Тогда как это сопоставляется с датой? Похоже, когда происходит DML, LSN увеличивается, а значение даты и времени вместе с LSN сохраняется в таблице сопоставления? – Faiz

+0

Нет сопоставления между LSN и любой датой. LSN используется для создания глобального заказа по всем транзакциям. Как указывает Ауассонный ниже, при создании резервной копии создается LNS. Но это единственное. –

+0

Я прочел ваш комментарий к Митчу Пшеницу выше. Я бы предложил создать транзакцию (вставить дату в таблицу приложений), а затем использовать ее как ваш LSN для целей до/после/дельта. –

1

Там нет гарантированного способа получить его, но вы можете догадаться из msdb.dbo.backupset на машине вы сделали резервную копию на:

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

Это, конечно, не точны и не надежны.

+1

sys.fn_cdc_map_lsn_to_time(), чтобы получить дату от lsn sys.fn_cdc_map_time_to_lsn(), чтобы получить lsn (s) с даты и "relationaloperator" – max

-1

LSN - это автоматически сгенерированное инкрементное число, когда транзакции совершены, и выполняется резервное копирование, поэтому, если вы хотите использовать эту последовательность в таблице приложений, используйте цикл while для извлечения последовательности и использования значений даты и времени.