Перезапуск пакетов с помощью контрольных точек

Область применения:SQL Server среда выполнения интеграции SSIS в Фабрика данных Azure

Integration Services могут перезапускать пакеты, завершившиеся сбоем, начиная с момента этого сбоя, не перезапуская весь пакет. Если настройка пакета предполагает использование контрольных точек, сведения о выполнении пакета записываются в файл контрольных точек. Файл контрольных точек используется при перезапуске давшего сбой пакета для осуществления повторного запуска пакета с момента сбоя. В случае успешного выполнения пакета файл контрольных точек удаляется, а затем при следующем выполнении пакета создается повторно.

Использование контрольных точек в пакете обеспечивает следующие преимущества.

  • Предотвращение повторной загрузки и передачи файлов большого объема. Например, пакет, осуществляющий загрузку множества файлов большого объема при помощи задачи «FTP» для каждой загрузки, можно перезапустить после сбоя, возникшего при загрузке отдельного файла, и загрузить только этот файл.

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

  • Избегайте повторного агрегирования значений. Например, пакет выполняет вычисление нескольких статистических выражений, таких как среднее и суммарное значения, при помощи задачи потока данных для выполнения каждого статистического выражения. Пакет можно перезапустить после сбоя, возникшего при вычислении отдельного выражения, и заново выполнить вычисление только этого выражения.

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

Определение точек перезапуска

Контейнер сервера задач, в котором заключена единственная задача, является наименьшей единицей работы, которая может быть перезапущена. Контейнер цикла Foreach и контейнер транзакции также рассматриваются как атомарные единицы работы.

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

Примечание.

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

Данные контрольной точки не сохраняются для контейнеров «цикл For» и «цикл Foreach». При перезапуске пакета контейнеры «цикл For» и «цикл Foreach», а также их дочерние контейнеры выполняются повторно. Если дочерний контейнер в цикле выполняется успешно, он не записывается в файл контрольных точек, а вместо этого запускается повторно. Дополнительные сведения и обходной путь см. в разделе Контрольные точки SSIS не применяются к элементам контейнеров «цикл For» и «цикл Foreach».

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

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

Настройка пакета для перезапуска

Файл контрольных точек содержит результаты выполнения всех завершенных контейнеров, текущие значения системных и пользовательских переменных, а также сведения о настройке пакета. Кроме того, файл содержит уникальный идентификатор пакета. Для успешного перезапуска пакета идентификатор пакета в файле контрольных точек должен совпадать с идентификатором в пакете, в противном случае перезапуск завершится сбоем. Это предотвращает использование пакетом файла контрольной точки, записанного другой версией пакета. Если пакет выполнен успешно, после его перезапуска файл контрольных точек удаляется.

В следующей таблице представлены свойства пакета, которые устанавливаются для использования контрольных точек.

Свойство Описание
CheckpointFileName Определяет имя файла контрольных точек.
Использование контрольных точек Определяет, используются ли контрольные точки.
Сохранить контрольные точки Показывает, сохраняет ли пакет контрольные точки. Для перезапуска пакета с момента сбоя это свойство должно иметь значение True.

Также необходимо установить значение true для свойства FailPackageOnFailure всех контейнеров пакета, которые нужно обозначить как точки перезапуска.

Для проверки использования контрольных точек в пакете можно применить свойство ForceExecutionResult. Установив для свойства ForceExecutionResult задачи или контейнера значение Failure, можно имитировать сбой в реальном времени. При перезапуске пакета вызвавшие сбой задача и контейнеры будут перезапущены.

Использование контрольных точек

Свойство CheckpointUsage может принимать следующие значения:

значение Описание
Никогда Указывает, что файл контрольных точек не используется и пакет выполняется с начала рабочего процесса пакета.
Всегда Указывает, что файл контрольных точек используется всегда и пакет перезапускается с момента предыдущего сбоя в выполнении. Если файл контрольных точек не обнаружен, при выполнении пакета происходит сбой.
IfExists Указывает, что файл контрольных точек должен использоваться, если он существует. Если файл контрольных точек существует, пакет перезапускается с момента последнего сбоя в выполнении; иначе пакет выполняется с начала рабочего процесса пакета.

Примечание.

Указание параметра /CheckPointing on команды dtexec эквивалентно заданию для свойства SaveCheckpoints пакета значения True, а для свойства CheckpointUsage — значения Always. Дополнительные сведения см. в статье dtexec Utility.

Защита файлов контрольных точек

Уровень защиты пакета не включает защиту файлов контрольных точек, поэтому необходимо дополнительно обеспечить их защиту. Данные контрольных точек могут быть сохранены только в файловой системе, поэтому необходимо использовать список управления доступом (ACL) операционной системы для обеспечения безопасности места расположения или папки, где хранятся файлы. Важно защитить файлы контрольных точек, так как они содержат сведения о состоянии пакета, включая текущие значения переменных. Например, переменная может содержать набор записей с многочисленными строками личных данных, таких как номера телефонов. Дополнительные сведения см. в разделе Доступ к файлам, используемым пакетами.

Настройка контрольных точек для повторного запуска пакета, завершившегося с ошибкой

Устанавливая свойства, влияющие на контрольные точки, можно настроить пакеты Integration Services таким образом, чтобы они перезапускались с точки сбоя вместо выполнения всего пакета с начала.

Настройка пакета для перезапуска

  1. В SQL Server Data Tools (SSDT) откройте проект служб Integration Services, содержащий пакет, который требуется настроить.

  2. Чтобы открыть пакет, дважды щелкните его в обозревателе решений.

  3. Перейдите на вкладку Поток управления .

  4. Щелкните правой кнопкой мыши в любом месте фона на поверхности конструктора потока управления, а затем выберите Свойства.

  5. Присвойте свойству SaveCheckpoints значение True.

  6. Введите имя файла контрольных точек в поле свойства CheckpointFileName.

  7. Установите значение свойства CheckpointUsage в одно из двух значений:

    • Установите Always , чтобы всегда перезапускать пакет с контрольной точки.

      Внимание

      Если файл контрольных точек недоступен, то возникнет ошибка.

    • Выберете свойство IfExists , чтобы перезапускать пакет, только если доступен файл контрольных точек.

  8. Настройте задачи и контейнеры, из которых пакет может быть перезапущен.

    • Правой кнопкой мыши щелкните задание или контейнер и выберите пункт Свойства.

    • Установите свойство FailPackageOnFailure в значение True для каждой выбранной задачи и каждого выбранного контейнера.