У меня есть две таблицы, назовите их 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 во второй раз.