Если транзакции SSIS не работают на вас, подумайте о повторной архитектуре дизайна упаковки. Возможно ли несколько раз разбить этапы и данные этапа, прежде чем окончательно перевести их в таблицу конечных результатов.
Я честно никогда не использую транзакции. Для процесса ETL я разбиваю его на 4 отдельные области, вызывающие озабоченность:
- Извлечь. Получает данные как есть и отправляет их в исходное состояние и физически ставит его в таблицу. Столбец будет выглядеть точно так же, как исходная таблица. Это минимизирует прерывание с блокировкой в исходной системе.
- Cleanse - Очищает данные на месте без учета других таблиц. Очистка может выполняться в представлении или с помощью отдельного пакета, который обрабатывает данные.
- Conform - переносит данные из нескольких источников в один стол. Эта таблица будет выглядеть как таблица целей (т. Е. Факт, размер)
- Загрузка - загрузка в таблицу конечных результатов предназначена только для загрузки, чтобы минимизировать прерывание доступа к таблице для конечных пользователей.
Я создаю перезапуск для пакетов таким образом, чтобы, если они сделали это через первые несколько шагов, им не нужно начинать. Они могут подобрать место, где они остановились, и закончить процесс ETL.
Если у меня было несколько файлов для извлечения, я бы построил пакет для каждого. Если бы существовала серия файлов с той же схемой, которые нужно было прорезать. Я бы построил процесс с возможностью повторного использования. То есть:
- Округление стол постановка
- Extract в промежуточную таблицу один файл одновременно или параллельно
- Архив файлов
Если процесс выйдет из строя, в этом случай, мы можем начать с вершины. Поскольку мы демпируем данные в промежуточную таблицу (которая может быть кучей), это может быть очень быстрый эффективный процесс.
Если ваша основная проблема заключается в том, что вы не хотите, чтобы конкретная таблица конечных результатов находилась в несогласованном состоянии, путем организации данных вы можете легко обернуть окончательный процесс вставки/обновления в транзакцию SQL.
Это довольно общий совет, но суть в том, что он не использует транзакции, разбивает процесс на шаги и использует транзакции SQL там, где это действительно необходимо. Надеюсь это поможет.
Вы спрашиваете, правильно ли сконфигурированы транзакции, чтобы включить откаты в случае сбоя или вы говорите, что у вас есть проблема, при которой процесс «застревает» во второй задаче потока? –
Я пробовал этот подход для отката всех транзакций в пакетах, пока я застрял в нем. но если вы порекомендуете мне другой подход, я могу это рассмотреть. – Mohsin
Похоже, что у вас настроены пакеты, и у вас работает служба MSDTC. Но я не понимаю, что такое застрявшая часть? Вы хотите, чтобы у вас был возможность убить процесс и все еще иметь его как-то откат, хотя ошибка технически не произошла? –