Пользовательская переменная SSIS не обновляется после развертывания проекта в каталоге

У меня есть поток управления, который устанавливает пользовательскую переменную с задачей "Выполнение SQL". В Visual Studio все работает нормально, но после развертывания в каталоге служб SSIS переменная, похоже, не назначается. Я выполняю это против тех же самых источников данных.

Я точно объясню, что происходит...

Поток управления SSIS с аннотациями

Первая задача в контейнере последовательности читает последний LSN, записанный для таблицы из таблицы состояний. Если для таблицы нет записи, то она следует по пути 1 на диаграмме выше.

На шаге 2 он считывает минимальный номер LSN для таблицы, используя функции CDC в исходной базе данных. Затем он сохраняет номер LSN и дату и время для этого номера LSN в двух пользовательских переменных. Это "начало окна" для репликации данных.

Шаг 3 считывает максимальную дату изменения из таблицы назначения.

Шаг 4 ветвится, если начало окна предшествует дате последнего изменения, поскольку это приведет к тому, что дубликаты данных будут импортированы в таблицу назначения. (Достаточно сказать, что есть причины, которые я не могу дедуплицировать перед загрузкой в ​​таблицу назначения...)


Когда я запускаю проект в Visual Studio все работает нормально. Он проходит шаги 1-3 и затем переходит к DFT, потому что минимальный LSN для таблицы находится после максимальной даты изменения в таблице назначения. Я использовал точки останова, чтобы убедиться, что переменные действительно установлены правильно.

После развертывания проекта в каталоге служб SSIS он выполняет шаг 4 и записывает строку ошибок. Кажется, переменная не установлена, или выражения ограничений не используют правильное значение. Я попытался установить переменные с набором результатов и в качестве выходных параметров в задаче "Выполнение SQL". Из сообщения журнала видно, что максимальная дата изменения из исходной таблицы верна.

Одна странность в том, что значение переменной в сообщении журнала не совпадает со значением времени разработки. Значение времени разработки - "1899-12-25 14:20:00", но в журнале отображается сообщение "1899-12-30 00:00:00". Но это может быть связано с тем, что я использовал неправильный метод преобразования или что-то в этом роде... Я не особо разбирался в этом, потому что он все еще не должен идти по пути 4.

Тот факт, что он работает должным образом в Visual Studio, но на сервере он работает по-другому, меня очень смущает. Я не могу думать о том, что может вызвать это.

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

1 ответ

Решение

Убедитесь, что у учетной записи, на которой запущена служба SSIS, есть разрешения для запроса исходных таблиц. Служба SSIS не всегда выдает ошибку в том виде, в котором вы ожидаете в связи с недостаточными разрешениями.

Мой фаворит - цикл Foreach File, всегда возвращающий пустой список файлов с небольшим предупреждением "не удалось найти путь"

Я предполагаю, что здесь есть нюанс чтения LSN из функций CDC

Другие вопросы по тегам