2015-07-02 2 views
0

У меня есть родительский пакет, в котором у меня есть цикл foreach для подсчета плоских файлов, и внутри него я обрабатываю каждый файл один за другим во время вызова дочернего пакета Exec package, где у меня есть контейнер последовательности. Хотя в контейнере последовательности дочерних пакетов у меня есть две задачи потока -one - это удаление данных из таблиц схемы импорта и импорт всех данных из плоского файла в него, который передается родительским пакетом. -второе время перемещает новые и обновленные строки из схемы импорта в соответствующие таблицы схем размещения.контроль транзакций в родительских дочерних пакетах ssis

Теперь я установил свойство «требуется» для родительского потока управления, а все остальные компоненты в нем «поддерживаются». и установить свойство «поддерживаемого» транзакции для потока дочернего контроля и для всех компонентов в нем. Поэтому, когда я выполняю родительский пакет, он застревает во второй задаче потока в дочернем пакете.

Я хочу откат всех транзакций, если какой-либо сбой или ошибка произойдут в любом pacakge.

Пожалуйста, любая помощь будет отличной.

+0

Вы спрашиваете, правильно ли сконфигурированы транзакции, чтобы включить откаты в случае сбоя или вы говорите, что у вас есть проблема, при которой процесс «застревает» во второй задаче потока? –

+0

Я пробовал этот подход для отката всех транзакций в пакетах, пока я застрял в нем. но если вы порекомендуете мне другой подход, я могу это рассмотреть. – Mohsin

+0

Похоже, что у вас настроены пакеты, и у вас работает служба MSDTC. Но я не понимаю, что такое застрявшая часть? Вы хотите, чтобы у вас был возможность убить процесс и все еще иметь его как-то откат, хотя ошибка технически не произошла? –

ответ

0

Если транзакции SSIS не работают на вас, подумайте о повторной архитектуре дизайна упаковки. Возможно ли несколько раз разбить этапы и данные этапа, прежде чем окончательно перевести их в таблицу конечных результатов.

Я честно никогда не использую транзакции. Для процесса ETL я разбиваю его на 4 отдельные области, вызывающие озабоченность:

  1. Извлечь. Получает данные как есть и отправляет их в исходное состояние и физически ставит его в таблицу. Столбец будет выглядеть точно так же, как исходная таблица. Это минимизирует прерывание с блокировкой в ​​исходной системе.
  2. Cleanse - Очищает данные на месте без учета других таблиц. Очистка может выполняться в представлении или с помощью отдельного пакета, который обрабатывает данные.
  3. Conform - переносит данные из нескольких источников в один стол. Эта таблица будет выглядеть как таблица целей (т. Е. Факт, размер)
  4. Загрузка - загрузка в таблицу конечных результатов предназначена только для загрузки, чтобы минимизировать прерывание доступа к таблице для конечных пользователей.

Я создаю перезапуск для пакетов таким образом, чтобы, если они сделали это через первые несколько шагов, им не нужно начинать. Они могут подобрать место, где они остановились, и закончить процесс ETL.

Если у меня было несколько файлов для извлечения, я бы построил пакет для каждого. Если бы существовала серия файлов с той же схемой, которые нужно было прорезать. Я бы построил процесс с возможностью повторного использования. То есть:

  1. Округление стол постановка
  2. Extract в промежуточную таблицу один файл одновременно или параллельно
  3. Архив файлов

Если процесс выйдет из строя, в этом случай, мы можем начать с вершины. Поскольку мы демпируем данные в промежуточную таблицу (которая может быть кучей), это может быть очень быстрый эффективный процесс.

Если ваша основная проблема заключается в том, что вы не хотите, чтобы конкретная таблица конечных результатов находилась в несогласованном состоянии, путем организации данных вы можете легко обернуть окончательный процесс вставки/обновления в транзакцию SQL.

Это довольно общий совет, но суть в том, что он не использует транзакции, разбивает процесс на шаги и использует транзакции SQL там, где это действительно необходимо. Надеюсь это поможет.

+0

Позвольте мне объяснить вам весь сценарий или требования: 1. Запустите проверку пакетов и количество файлов в исходной папке. 2. Затем сохраните информацию о файле по одному в любой таблице. 3. Тогда для каждого цикла для файла я должен создать дочерний пакет, чтобы я мог добиться атомарного процесса для каждого файла. 4. Детский пакет имеет две основные задачи: сначала усечь таблицу схем импорта, а затем вставить данные файла, как в этой таблице. Затем во второй задаче объединить импортированные данные таблицы с данными промежуточной таблицы. – Mohsin

+0

5. Затем выйдите из дочернего пакета и верните управление родительскому пакету. 6. Архивируйте обработанный файл. 7. Аудит окончания пакета. Итак, я реализовал каждый шаг, пока он отлично работал со свойствами транзакций по умолчанию, но когда дело доходит до управления транзакциями, я настроил его соответствующим образом, но он застрял во второй задаче, как указано выше в 4-й точке. – Mohsin

+0

Я ничего не вижу в Reqs, который заставит вас использовать транзакции. Пока файлы архивируются в конце, вам нечего мешать перезапускать сверху, если есть ошибка. –

Смежные вопросы