Для № 1, я не уверен, но я бы не стал делать это предположение.Я видел повторяющиеся значения последовательности в разных таблицах в связанных транзакциях с немного отличающимися начальными номерами LSN.Я никогда не замечал дубликатов в одной и той же таблице, но это не значит, что это не может произойти.
Что касается ваших общих ожиданий, используйте комбинацию всех четырех значений последовательности , чтобы получитьдетерминированный список транзакций и операций внутри них.Я склонен использовать:
ORDER BY __$start_lsn ASC, __$seqval ASC, __$command_id ASC, __$operation ASC
Для более официального заказа, вот определение кластерного индекса на моих серверах для каждой таблицы CDC, сгенерированное, когда CDC включен для этой таблицы:
CREATE UNIQUE CLUSTERED INDEX ... (
[__$start_lsn] ASC,
[__$command_id] ASC,
[__$seqval] ASC,
[__$operation] ASC
)
Некластеризованный индекс, включающий первичный ключ исходной таблицы, аналогичен.
Предупреждения с __$command_id
:
- Некоторые версии SQL Server не упорядочивают их правильно. Полностью исправленные системы не должны иметь проблем, однако.
- Этот столбец недоступен в выходных данных сгенерированных функций, которые официальная документация говорит, что вы должны использовать .Эти функции делают несколько вещей для вас, наиболее важно запросить
WITH (NOLOCK)
, чтобы избежать конфликта базы данных, но большая часть моего собственного кода запрашивает эти таблицы _CT напрямую.