SQL Серверный CD C: Может / должно быть более одного значения переменной в таблице cdc_states - PullRequest
0 голосов
/ 18 июня 2020

Вопрос:

Должно ли быть несколько значений состояния CD C (т.е. строк) в таблице cdc_state, когда выполняются пакеты CD C, зависящие от результат других пакетов CD C? Ни в одном из учебных пособий, блогов или превью книг, которые я прочитал в Интернете, не обсуждается этот топ. мнение по этому поводу.

Контекст:

В настоящее время я работаю над проектом, который переносит данные из одной базы данных в другую, а CD C используется для отслеживания изменений в реальном времени. Состояние cd c хранится в таблице базы данных cdc_state и содержит столбцы имени и значения. Я новичок в работе с CD C. Все учебники, которые я прочитал, обсуждают CD C только для репликации одной таблицы.

Мой проект немного сложнее, потому что он требует изменения модели данных на лету. Таким образом, модель данных исходной базы данных отличается от модели данных целевой базы данных. В результате при запуске CD C мне приходится извлекать данные из других целевых таблиц, потому что эти данные не существуют в источнике (т. Е. Значения вставки идентичности). Это достаточно просто для обработки с помощью поиска в потоке данных.

Но, похоже, это вызывает состояние гонки. Если у меня есть пакет CD C, который зависит от вставок CD C другого пакета (думайте об этом как о порядке упорядочивания или родительско-дочерних отношениях), тогда значение состояния CD C не будет хранящиеся в таблице cdc_states, недопустимы в моем пакете при попытке использовать то же значение состояния cd c для запуска моего пакета?

Другими словами, когда родительский пакет запускается, он будет отмечать новый диапазон обработки в значении cdc_state, который содержит начальный и конечный LSN. Когда мой нисходящий пакет будет запущен, он будет смотреть на другой диапазон LSN, а не на диапазон, с которого он остановился, отсюда и состояние гонки. Это означает, что любая транзакция, которая произошла в диапазоне обработки родительского пакета и имеет отношение к дочернему пакету, будет пропущена дочерним пакетом.

Я правильно понимаю?

...