Отключить контейнер последовательности в службах SSIS с помощью запроса SQL? - PullRequest
0 голосов
/ 28 апреля 2020

Предположим, у меня есть пакет служб SSIS, в котором содержится почти 20 контейнеров последовательностей, и во время выполнения задания несколько контейнеров последовательностей были успешно завершены, а некоторые - неудачно. Итак, здесь я хочу, чтобы автоматический запрос SQL отключил завершенный контейнер последовательности и включил контейнер с ошибочной последовательностью, чтобы при повторном запуске пакета он запускал только контейнер с ошибочной последовательностью.

Есть ли шанс отключить завершенный контейнер последовательности и запустить сбойный?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2020

Лично я ненавижу контрольно-пропускные пункты. Они не работают в контексте al oop и, возможно, это просто моя неудача, но я слишком часто испытывал повреждение файла контрольных точек

Я всегда советую клиентам разрабатывать свои решения ETL с перезагрузка в виду. В какой-то момент процесс потерпит неудачу, и вы знаете, что он окажется в центре чего-то важного, поэтому уберите «мыслительный» аспект его перезапуска. Не устанавливайте зависимость от того, кто запускает скрипт для очистки половинных загруженных нагрузок и т. Д. c Но это другой вопрос ...

Каждый объект в вашем потоке управления будет поддерживать свойство с именем Disable. Когда вы запускаете пакет, вы можете деактивировать задачи с помощью команды / SET. В следующем примере каждый контейнер последовательности имеет задачу «Сценарий», которая не выполняет ничего, кроме запускает информационное событие

enter image description here

Когда я запускаю что из командной строки

C:\Users\bfellows\source\repos\SO_Trash\SO_Trash>dtexec /file SO_61477591.dtsx /rep i
Microsoft (R) SQL Server Execute Package Utility
Version 14.0.3238.1 for 32-bit
Copyright (C) 2017 Microsoft. All rights reserved.

Started:  10:45:43 AM
Info: 2020-04-28 10:45:43.71
   Code: 0x00000000
   Source: SCR0 SCR Echo Back
   Description: System::ParentContainerGUID : {3910E325-F3D0-4EC6-96FD-5E125FEC0ED2}
End Info
Info: 2020-04-28 10:45:43.74
   Code: 0x00000000
   Source: SCR1 SCR Echo Back
   Description: System::ParentContainerGUID : {08bf88d5-71c3-4105-824e-bb8b1e942b24}
End Info
Info: 2020-04-28 10:45:43.77
   Code: 0x00000000
   Source: SCR2 SCR Echo Back
   Description: System::ParentContainerGUID : {59823604-1caf-4a90-9303-45d55126d8b3}
End Info
Info: 2020-04-28 10:45:43.80
   Code: 0x00000000
   Source: SCR3 SCR Echo Back
   Description: System::ParentContainerGUID : {977567f1-6bcf-4c84-909e-eb18ba17165d}
End Info
DTExec: The package execution returned DTSER_SUCCESS (0).
Started:  10:45:43 AM
Finished: 10:45:43 AM
Elapsed:  0.609 seconds

Указав путь к исполняемому файлу, я могу установить свойство отключения свойства как /set \Package\SEQC1.Properties[Disable];"True", где SEQC1 - чувствительное к регистру имя объекта, который я хочу отключить

C:\Users\bfellows\source\repos\SO_Trash\SO_Trash>dtexec /file .\SO_61477591.dtsx /rep i /set \Package\SEQC1.Properties[Disable];"True"
Microsoft (R) SQL Server Execute Package Utility
Version 14.0.3238.1 for 32-bit
Copyright (C) 2017 Microsoft. All rights reserved.

Started:  10:45:50 AM
Info: 2020-04-28 10:45:50.62
   Code: 0x00000000
   Source: SCR0 SCR Echo Back
   Description: System::ParentContainerGUID : {3910E325-F3D0-4EC6-96FD-5E125FEC0ED2}
End Info
Info: 2020-04-28 10:45:50.66
   Code: 0x00000000
   Source: SCR2 SCR Echo Back
   Description: System::ParentContainerGUID : {59823604-1caf-4a90-9303-45d55126d8b3}
End Info
Info: 2020-04-28 10:45:50.69
   Code: 0x00000000
   Source: SCR3 SCR Echo Back
   Description: System::ParentContainerGUID : {977567f1-6bcf-4c84-909e-eb18ba17165d}
End Info
DTExec: The package execution returned DTSER_SUCCESS (0).
Started:  10:45:50 AM
Finished: 10:45:50 AM
Elapsed:  0.609 seconds

Обратите внимание, что SCR1 больше не выводится из-за его отключения командой SET.

Зная, как отключить задачи, вы можете оставить пакет как есть и изменить свой старт, чтобы он стал текст, сгенерированный из SQL запросов (дайте мне все задачи, которые были выполнены, и создайте правильные операторы / SET)

Лучший подход, который потребовал бы модификации существующего пакета, заключался бы в выполнении задачи Execute SQL. (s), который запускается в начале пакета и устанавливает логические переменные SSIS с индикатором того, должна ли задача быть отключена. А затем измените каждый объект, чтобы иметь выражение в свойстве Disable, которое является новой переменной SSIS.

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

Затем у меня есть пакет orchestrator, который запрашивает список известных пакетов и идентифицирует любой пакет, который не имеет запустить успешно. Затем он использует foreach l oop с задачей пакета Execute, чтобы затем запустить дочерние процессы.

enter image description here

Преимущество моего подхода заключается в том, что Исходя из предположения, что между задачами 1 и 3 нет никакой зависимости, у меня может быть две копии этого запуска - один «стек» обрабатывает пакеты 0 и 2, а другой стек обрабатывает 1 и 3. Одним из преимуществ SSIS является то, что он делает его тривиально распараллелить вашу рабочую нагрузку.

0 голосов
/ 28 апреля 2020

Вы можете использовать функцию файла CHECKPOINT в SSIS для автоматического запуска только сбойных контейнеров в задаче потока управления. Это доступно из коробки в SSIS. Вы можете настроить его в пакете.

Подробнее об использовании контрольной точки & Перезапустить пакеты с использованием контрольной точки на MSDN

Checkpoint File setting

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...