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

Применяется к:sql Server SSIS Integration Runtime в Фабрика данных Azure

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

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

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

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

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

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

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

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

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

Примечание.

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

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

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

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

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

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

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

Свойство Description
CheckpointFileName Определяет имя файла контрольных точек.
CheckpointUsage Определяет, используются ли контрольные точки.
SaveCheckpoints Показывает, сохраняет ли пакет контрольные точки. Для перезапуска пакета с момента сбоя это свойство должно иметь значение 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 для каждой выбранной задачи и каждого выбранного контейнера.

Внешние ресурсы