Задача «Выполнение пакета»
Задача «Выполнение пакета» расширяет возможности служб Службы Integration Services в рамках организации, позволяя одним пакетам выполнять другие пакеты как часть рабочего процесса.
Задачу выполнения пакета можно использовать в следующих целях.
Дробление сложного пакетного рабочего процесса. Эта задача позволяет разбить рабочий процесс на множество пакетов, что удобнее для чтения, проверки и поддержки. Например, при загрузке данных в схеме типа «звезда» в целях заполнения каждого измерения возможно построение раздельных пакетов и таблицы фактов.
Повторное использование частей пакетов. Другие пакеты могут использовать части рабочего процесса пакетов. Например, можно создать модуль извлечения данных, который может быть вызван из разных пакетов. Каждый пакет, вызывающий модуль извлечения, в состоянии производить разные операции чистки, фильтрации или статистической обработки.
Группирование рабочих единиц. Единицы работы можно инкапсулировать в отдельные пакеты и присоединить как компоненты транзакции к рабочему процессу родительского пакета. Например, родительский пакет запускает вспомогательные пакеты. Основываясь на успешном завершении вспомогательных пакетов или же на их завершении со сбоем, родительский пакет или фиксирует транзакцию, или выполняет ее откат.
Управление безопасностью пакетов. Авторам пакетов требуется доступ только к части многопакетного решения. При разделении пакета на множество пакетов возрастает степень безопасности, так как можно предоставить авторский доступ только к нужным пакетам.
Пакет, выполняющий другие пакеты, обычно называется родительским пакетом, а выполняемые родительским рабочим процессом пакеты называются дочерними пакетами.
Службы Службы Integration Services содержат задачи, выполняющие операции рабочего процесса, такие как выполнение исполняемых файлов и пакетных файлов. Дополнительные сведения см. в разделе Задача «Выполнение процесса».
Запуск пакетов
Задача «Выполнение пакета» может запускать дочерние пакеты, которые содержатся в одном проекте с родительским пакетом. Чтобы выбрать дочерний пакет из проекта, необходимо задать свойству Тип ссылки значение Ссылка на проект, а затем установить свойство PackageNameFromProjectReference.
Примечание |
---|
Если проект, в котором содержится пакет, не был преобразован в модель развертывания проекта, то параметр Тип ссылки доступен только для чтения и ему задано значение Внешняя ссылка. Дополнительные сведения о преобразовании см. в разделе Развертывание проектов на сервере служб Integration Services. |
Задача «Выполнение пакета» может также запускать пакеты, хранящиеся в базе данных SQL Servermsdb, и пакеты, хранящиеся в файловой системе. Эта задача использует диспетчер соединений OLE DB для соединения с SQL Server или диспетчер соединения файлов для доступа к файловой системе. Дополнительные сведения см. в разделах Диспетчер соединений OLE DB и Диспетчер соединений с неструктурированными файлами.
Также задача «Выполнение пакета» может выполнять план обслуживания базы данных, что позволяет управлять пакетами служб Службы SSIS и планами обслуживания базы данных в одном решении служб Службы Integration Services. План обслуживания базы данных аналогичен пакету служб Службы SSIS с той лишь разницей, что план может содержать только задачи обслуживания базы данных и всегда храниться в базе данных msdb.
При выборе пакета, сохраненного в файловой системе, необходимо предоставить имя и место расположения пакета. Пакет может находиться в любом месте файловой системы; он не обязан находиться в той же папке, что и родительский пакет.
Дочерний пакет может выполняться в процессе родительского пакета или же в своем собственном процессе. Выполнение дочернего пакета в собственном процессе требует больших затрат памяти, но обеспечивает большую гибкость. Например, если процесс дочернего пакета закончится с ошибкой, родительский процесс продолжит свою работу.
С другой стороны, в некоторых задачах необходимо, чтобы родительский и дочерний пакеты прекращали свое выполнение одновременно, но иногда не имеет смысла тратить дополнительную память на другой процесс. Например, если дочерний процесс заканчивается с ошибкой, а последующая работа родительского пакета зависит от результата работы дочернего пакета, необходимо, чтобы дочерний пакет выполнялся в процессе родительского пакета.
По умолчанию свойство ExecuteOutOfProcess в задаче «Выполнение пакета» равно значению False, а дочерний пакет выполняется в том же процессе, что и родительский пакет. Если установить свойство в значение True, дочерний пакет запускается в отдельном процессе. Это может замедлить запуск дочернего пакета. Кроме того, если задано значение свойства True, то выполнять отладку пакета в установке только для инструментов нельзя. Необходимо установить Службы Integration Services. Дополнительные сведения см. в разделе Установка служб Integration Services.
Расширение транзакций
Транзакции, используемые родительским пакетом, могут быть расширены на дочерний пакет; таким образом, работа, выполняемая обоими пакетами, может фиксироваться и откатываться. Например, вставка в базу данных, производимая родительским пакетом, может фиксироваться или откатываться в зависимости от вставки в базу данных, которую производит дочерний пакет, и наоборот. Дополнительные сведения см. в разделе Наследуемые транзакции.
Распространение подробностей журналов
Дочерний пакет, запущенный задачей «Выполнение пакета», может быть настроен для использования журнала, а может быть и не настроен, однако он всегда отправляет родительскому пакету подробные сведения для журнала. Если задача «Выполнение пакета» настроена для использования журнала, она регистрирует подробности журнала дочернего пакета. Дополнительные сведения см. в разделе Ведение журналов в службах Integration Services (SSIS).
Передача значений дочерним пакетам
Часто дочерний пакет использует значения, переданные ему вызвавшим его пакетом, обычно его родительским пакетом. Значения, переданные родительским пакетом, удобно использовать в следующих случаях:
Части большого рабочего процесса присваиваются различным пакетам. Например, один пакет загружает данные, суммирует их и присваивает переменным значения суммарных данных, а затем передает значения другому процессу для дополнительной обработки данных.
Родительский пакет динамически координирует задачи в дочернем пакете. Например, родительский пакет определяет число дней в текущем месяце и присваивает это число переменной, а дочерний пакет выполняет задачу равное этой переменной количество раз.
Дочернему пакету необходим доступ к данным, динамически поставляемым родительским пакетом. Например, родительский пакет извлекает данные из таблицы и записывает набор строк в переменную, а дочерний пакет производит дополнительные операции над данными.
Для передачи значений в дочерний пакет вы можете использовать следующие методы:
Конфигурации пакета
Службы Службы Integration Services предоставляют тип конфигурации, конфигурацию переменной родительского пакета для передачи значения из родительского в дочерние пакеты. Конфигурация настраивается в дочернем пакете и использует переменные родительского пакета. Конфигурация сопоставляется c переменной в дочернем пакете или свойством объекта в дочернем пакете. Переменная может также использоваться в скриптах, используемых задачей «Скрипт» или компонентом скрипта.
Параметры
Вы можете настроить задачу «Выполнение пакета» для сопоставления переменных или параметров родительского пакета либо параметров проекта с параметрами дочернего пакета. Проект должен использовать модель развертывания проекта, а дочерний пакет должен содержаться в одном проекте с родительским пакетом. Дополнительные сведения см. в разделе редактор задачи «Выполнение пакета».
Примечание Если параметр дочернего пакета не является конфиденциальным и сопоставляется с конфиденциальным родительским пакетом, запуск дочернего пакета завершится с ошибкой.
Поддерживаются следующие условия сопоставления:
Конфиденциальный параметр дочернего пакета сопоставляется с конфиденциальным параметром родительского пакета
Конфиденциальный параметр дочернего пакета сопоставляется с неконфиденциальным параметром родительского пакета
Неконфиденциальный параметр дочернего пакета сопоставляется с неконфиденциальным параметром родительского пакета
Переменная родительского пакета может быть определена в области задачи «Выполнение пакета» или в самом пакете. Если доступно несколько переменных с одинаковыми именами, то используется та переменная, которая определена в области задачи выполнения пакетов, или ближайшая к задаче переменная из области видимости.
Дополнительные сведения см. в разделе Использование значений переменных и параметров в дочернем пакете.
Доступ к переменным родительского пакета
Дочерние пакеты могут обращаться к переменным родительского пакета с помощью задачи «Скрипт». При вводе имени переменной родительского пакета на странице Скрипт в редактора задачи «Скрипт» не указывайте User: в имени переменной. В противном случае дочерний пакет не сможет обнаружить переменную при выполнении родительского пакета. Дополнительные сведения об использовании задачи «Скрипт» для доступа к переменным родительского пакета см. в записи блога Службы SSIS: доступ к переменным из родительского пакета на сайте consultingblogs.emc.com.
Настройка задачи «Выполнение пакета»
Значения свойств вы можете задавать с помощью конструктора Службы SSIS или программными средствами.
Дополнительные сведения о свойствах, которые можно задать в конструкторе служб Службы SSIS, см. в следующих разделах:
Дополнительные сведения об установке этих свойств в конструкторе служб Службы SSIS см. в следующем разделе:
Программная настройка задачи «Выполнение пакета»
Дополнительные сведения об установке этих свойств программным путем см. в следующем разделе:
См. также
Запись в блоге Службы SSIS. Следует ли выполнять дочерние пакеты внутри процесса или вне его? на сайте consultingblogs.emc.com.
Запись в блоге Службы SSIS: доступ к переменным из родительского пакета на сайте consultingblogs.emc.com.
|