Пользовательская переменная SSIS не обновляется после развертывания проекта в каталоге
У меня есть поток управления, который устанавливает пользовательскую переменную с задачей "Выполнение SQL". В Visual Studio все работает нормально, но после развертывания в каталоге служб 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