Захват T-SQL Минимальный порядковый номер журнала таблицы в определенное время с использованием захвата данных изменений - PullRequest
1 голос
/ 07 июня 2019

У меня есть две таблицы, назовите их dbo.T1 и dbo.T2.Я хочу захватывать дельту каждые несколько часов, используя CDC.

При первом запросе CDC я передаю sys.fn_cdc_get_min_lsn ('dbo_t1') (и sys.fn_cdc_get_min_lsn ('dbo_t2')) * @ from_lsn для функции cdc.fn_cdc_get_net_changes_ dbo_t1 (и cdc.fn_cdc_get_net_changes_dbo_t2) .

Кроме того, sys.fn_cdc_get_max_lsn () as @to_lsn.

Пока все хорошо.

Теперь, следующийКогда я запускаю запрос, я только хочу перехватить дельту с момента предыдущего захвата. Я все еще могу вызвать sys.fn_cdc_get_max_lsn (), чтобы получить @to_lsn, но мне нужно получить @from_lsn для этих таблиц, в частности, это следующий VALID номер больше, чем максимальный lsn предыдущего захвата ДЛЯ ЭТИХ СПЕЦИФИЧЕСКИХ ТАБЛИЦ (не может использовать тот же min fx, что и раньше, так как я хочу дельту после последнего захвата).

Пример:

Первый раз: T1 @from_lsn = 1 (давайте упростим использование int) и T2 @from_lsn = 5. Global @to_lsn = 10

Secondвремя: T1 @ from_lsn = 14 и T2 @ from_lsn = 12 .Global @to_lsn = 20

Как мне получить эти @from_lsn для второго + захвата?Я не могу передать предыдущий @to_lsn как мин, потому что CDC выдает ошибку из-за недопустимого значения в этих захваченных экземплярах.По сути, мне нужно передать 14, когда я запрашиваю T1 и 12, когда я запрашиваю T2 как @from_lsn во второй раз.

...