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

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

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

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

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

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

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

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

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

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

ПримечаниеПримечание

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

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

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

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

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

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

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

Свойство

Описание

CheckpointFileName

Определяет имя файла контрольных точек.

CheckpointUsage

Определяет, используются ли контрольные точки.

SaveCheckpoints

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

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

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

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

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

Значение

Описание

Never

Указывает, что файл контрольных точек не используется и пакет выполняется с начала рабочего процесса пакета.

Always

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

IfExists

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

ПримечаниеПримечание

Параметр /CheckPointing on команды dtexec эквивалентен присвоению свойству SaveCheckpoints пакета значения True, а свойству CheckpointUsage значения Always. Дополнительные сведения см. в разделе Программа dtexec (средства служб SSIS).

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

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

Настройка свойств контрольных точек

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

Значок служб Integration Services (маленький) Оставайтесь в курсе новых возможностей служб Integration Services

Чтобы загрузить последнюю версию документации, статьи, образцы и видеоматериалы корпорации Майкрософт, а также лучшие решения участников сообщества, посетите страницу служб Integration Services на сайтах MSDN или TechNet:

Чтобы получать автоматические уведомления об этих обновлениях, подпишитесь на RSS-каналы, предлагаемые на этой странице.