Транзакции служб Integration Services
Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure
Пакеты используют транзакции для связывания выполняемых в базе данных задачами операций в атомарные объекты, и, таким образом, сохраняют целостность данных. Все типы контейнеров Служб Microsoft Integration Services, контейнеры цикла foreach и последовательности, а также узлы задач, которые инкапсулируют каждую задачу, можно настроить для использования транзакций. Службы Integration Services предоставляют три варианта настройки транзакций: NotSupported, Supported и Required.
Required указывает, что контейнер запускает транзакцию, если она еще не запущена родительским контейнером. Если транзакция уже существует, контейнер с ней соединяется. Например, если пакет, не настроенный для поддержки транзакций, содержит контейнер последовательности, использующий параметр Required , то контейнер последовательности начнет свою собственную транзакцию. Если бы пакет был настроен для использования параметра Required , контейнер последовательности соединился бы с транзакцией пакета.
Supported указывает, что контейнер не запускает транзакцию, но соединяется с любой транзакцией, запущенной родительским контейнером. Например, если пакет с четырьмя задачами «Выполнение SQL» запускает транзакцию и все четыре задачи используют параметр Supported , то обновления базы данных, выполненные задачами «Выполнение SQL», откатываются при ошибке обновления любой из этих задач. Если пакет не начинает транзакцию, четыре задачи «Выполнение SQL» не связаны транзакцией и в случае ошибки обновления базы данных одной из задач отменяются только обновления этой задачи.
NotSupported указывает, что контейнер не начинает транзакцию и не соединяется с существующей транзакцией. Транзакция, запущенная родительским контейнером, не влияет на дочерние контейнеры, которые не были настроены на поддержку транзакций. Например, если пакет был настроен на запуск транзакции, а контейнер «цикл по элементам» в пакете использует параметр NotSupported , то в случае неудачи откат каких-либо задач в контейнере «цикл по элементам» невозможен.
Настройка транзакций происходит с помощью свойства контейнера TransactionOption. Это свойство можно задать с помощью окна свойств в SQL Server Data Tools (SSDT) или программно задать это свойство.
Примечание.
Cвойствo TransactionOption влияет на то, применяется ли значение свойства IsolationLevel , запрашиваемого контейнером. Дополнительные сведения см. в описании свойства IsolationLevel в разделе Установка свойств пакета.
Настройка пакета для использования транзакций
Существуют два режима настройки пакета для использования транзакций.
Одна транзакция на пакет. В этом случае инициирует транзакцию сам пакет, а индивидуальные задачи и контейнеры пакета участвуют в этой одиночной транзакции.
Несколько транзакций на пакет. В этом случае пакет поддерживает транзакции, но в действительности инициируют эти транзакции индивидуальные задачи и контейнеры пакета.
В следующих двух процедурах описывается настройка в каждом из режимов.
Настройка пакета для использования одиночной транзакции
В этом режиме инициирует одиночную транзакцию сам пакет. Настройте пакет для инициирования этой транзакции, задав для свойства TransactionOption пакета значение Required.
Далее, прикрепите к этой одиночной транзакции конкретные задачи и контейнеры. Чтобы прикрепить к транзакции задачу или контейнер, установите свойство TransactionOption этой задачи или контейнера в значение Supported.
В SQL Server Data Tools (SSDT) откройте проект служб Integration Services, содержащий пакет, который требуется настроить для использования транзакции.
Чтобы открыть пакет, дважды щелкните его в обозревателе решений.
Перейдите на вкладку Поток управления .
Щелкните правой кнопкой мыши в области конструктора потока управления и выберите Свойства.
В окне Свойства установите свойство TransactionOption в значение Required.
Чтобы зарегистрировать задачу или контейнер в транзакции, щелкните их правой кнопкой мыши в рабочей области конструирования на вкладке Поток управления , а затем выберите пункт Свойства.
В окне Свойства установите свойство TransactionOption в значение Supported.
Примечание.
Чтобы прикрепить соединение к транзакции, зарегистрируйте в транзакции задачи, использующие это соединение. Дополнительные сведения см. в статье Соединения служб Integration Services (SSIS).
Повторите шаги 6 и 7 для каждой задачи и контейнера, которые должны быть зарегистрированы в транзакции.
Настройка пакета для использования множественных транзакций
В этом режиме пакет сам по себе поддерживает транзакции, но не запускает их. Настройте пакет для поддержки транзакций, задав для свойства TransactionOption пакета значение Supported.
Далее настройте задачи и контейнеры пакета, которые должны инициировать транзакции или участвовать в них. Чтобы настроить задачу или контейнер для инициирования транзакции, установите свойство TransactionOption этой задачи или контейнера в значение Required.
В SQL Server Data Tools (SSDT) откройте проект служб Integration Services, содержащий пакет, который нужно настроить для использования transaction.s.
Чтобы открыть пакет, дважды щелкните его в обозревателе решений.
Перейдите на вкладку Поток управления .
Щелкните правой кнопкой мыши в области конструктора потока управления и выберите Свойства.
В окне Свойства установите свойство TransactionOption в значение Supported.
Примечание.
Пакет поддерживает транзакции, но транзакции запускаются задачами или контейнерами в пакете.
В рабочей области конструирования на вкладке Поток управления щелкните правой кнопкой мыши задачу или контейнер в пакете, для которого необходимо начать транзакцию, и выберите пункт Свойства.
В окне Свойства установите свойство TransactionOption в значение Required.
Если транзакция начата контейнером, щелкните правой кнопкой мыши задачу или контейнер, которые необходимо зарегистрировать в транзакции, и выберите пункт Свойства.
В окне Свойства установите свойство TransactionOption в значение Supported.
Примечание.
Чтобы прикрепить соединение к транзакции, зарегистрируйте в транзакции задачи, использующие это соединение. Дополнительные сведения см. в статье Соединения служб Integration Services (SSIS).
Повторите шаги с 6 по 9 для каждой задачи и контейнера, которые запускают транзакцию.
Несколько транзакций в пакете
Пакет может включать несвязанные транзакции в пакет служб Integration Services. Каждый раз, когда контейнер в середине иерархии вложенных контейнеров не поддерживает транзакции, контейнеры выше и ниже по иерархии начинают отдельные транзакции, если настроены для поддержки транзакций. Транзакции фиксируются или откатываются, начиная с самой глубокой задачи в иерархии вложенных контейнеров пакета. Однако после фиксации вложенной транзакции она не откатывается, если внешняя транзакция прервана.
Пример нескольких транзакций в пакете
Например, пакет включает контейнер последовательности, содержащий два контейнера «цикл по каждому элементу», и каждый контейнер включает две задачи «Выполнение SQL». Контейнеры «цикл по каждому элементу» не поддерживают транзакции, а контейнер последовательности и задача «Выполнение SQL» поддерживают. В данном примере каждая задача «Выполнение SQL» будет выполнять свою собственную транзакцию и не будет подвергаться откату в случае, если транзакция в задаче последовательности окажется прерванной.
Свойства TransactionOption контейнера последовательности, контейнера "цикл по каждому элементу" и задач "Выполнение SQL" установлены следующим образом:
Свойство TransactionOption контейнера последовательности установлено в значение Required.
Свойства TransactionOption контейнеров "цикл по каждому элементу" установлены в значения NotSupported.
Свойство TransactionOption задач Execute SQL установлено в значение Required.
На следующей диаграмме показаны пять несвязанных транзакций в пакете. Одна транзакция была начата контейнером последовательности, а четыре других — задачами «Выполнение SQL».
Наследуемые транзакции
Пакет может запускать другой пакет с помощью задачи «Выполнение пакета». Дочерний пакет, то есть пакет, запускаемый задачей «Выполнение пакета», может создавать собственную транзакцию пакетов или наследовать родительскую транзакцию.
Дочерний пакет наследует родительскую транзакцию пакетов, если выполняются оба приведенных ниже условия:
Пакет вызывается задачей «Выполнение пакета».
Задача «Выполнение пакета», вызвавшая пакет, также присоединяется к родительской транзакции пакета.
Контейнеры и задачи в дочернем пакете не могут присоединяться к родительской транзакции пакетов, если только к ней не присоединяется сам дочерний пакет.
Пример унаследованных транзакций
Все три пакета, показанные на приведенной ниже диаграмме, используют транзакции. Каждый пакет содержит несколько задач. Чтобы выделить поведение транзакций, показаны только задачи «Выполнение пакета». Пакет A запускает пакеты B и C. В свою очередь пакет B запускает пакеты D и E, а пакет C запускает пакет F.
Пакеты и задачи имеют следующие атрибуты транзакции:
ПараметруTransactionOption присвоено значение Required для пакетов A и C
ПараметруTransactionOption присвоено значение Supported в пакетах B и D, а также в задачах выполнения пакетов B, D и F.
ПараметруTransactionOption присвоено значение NotSupported в пакете E, а также в задачах выполнения пакетов C и E.
Наследовать транзакции от родительских пакетов могут только пакеты B, D и F.
Пакеты B и D наследуют транзакцию, запущенную пакетом A.
Пакет F наследует транзакцию, запущенную пакетом C.
Пакеты A и C управляют своими собственными транзакциями.
Пакет E не использует транзакции.
Внешние ресурсы
- Запись в блоге, Как использовать транзакции в службах SQL Server Integration Services SSIS, на сайте www.mssqltips.com