Зачем нужен контроль за выполнением отложенных обработчиков обновления?

  оглавление  Возможно ли автоматическое выполнение обработчиков обновления для базовой платформы?

Обновлятор-1с. Что делать если в базе есть невыполненные обработчики обновления?

Введение

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

Таких обработчиков бывает 2 вида: основные и отложенные.

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

Обновлятор по умолчанию выполняет и те и другие обработчики в своём цикле обновления сразу.

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

Что делать?

Если у вас включён контроль за выполнением отложенных обработчиков обновления, то обновлятор может в какой-то момент начать отказываться продолжать обновление базы.

В этом случае...

Отключаем контроль за обработчиками

... нужно или отключить этот контроль (нежелательный вариант).

Выполняем обработчики в ручном режиме

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

Для этого запустите базу в режиме пользователя.

Согласитесь, если это потребуется, на выполнение основных обработчиков обновления и дождитесь его окончания.

Далее зайдите в меню Функции для технического специалиста ( оно может быть скрыто из меню, о том как его показать читайте здесь ):

В этом меню раскройте раздел "Обработки":

И в нём найдите и откройте подпункт "Результаты обновления программы":

В этой обработке можно увидеть сведения о выполненных обработчиках и возможных проблемах с ними:

И если не все обработчики были выполнены - это будет отражено в этом окне.

Тогда их можно будет открыть по ссылке и запустить на повторное выполнение (через контекстное меню правой кнопкой или через кнопку "Запустить"):

При необходимости перед запуском, зайдите в свойства обработчика и измените режим выполнения на "Монопольно", предварительно обеспечив отсутствие других сеансов в базе. Это ускорит выполнение процедуры обработчика.

Внимание! Специальная оговорка для серверных баз (раскройте)

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

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

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

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

Задействуем специальный механизм при обновлении очень старых серверных баз

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

Но для серверных баз возможность такого выполнения отложенных обработчиков была не всегда (вернее БСП, на основе которой пишутся типовые конфигурации, её не всегда поддерживала).

И в  этом случае требовалось:

  • или обновлять базу в файловом режиме (что не всегда возможно) - там этой проблемы нет
  • или применять обновления по одному и после каждого из них запускать базу в режиме пользователя и дожидаться выполнения всех отложенных обработчиков

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

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

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

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

Итак, вот как будет действовать обновлятор в этом особом режиме:

  1. Сначала он выполнит все обработчики обновления стандартным способом.
  2. Далее он проверит - остались ли в базе невыполненные отложенные обработчики обновления.
  3. Если такие обработчики остались, то он:
    1. Полностью снимет блокировку сеансов.
    2. Разблокирует запуск регламентных заданий в кластере.
    3. И будет в цикле ожидать пока регламентное задание "Отложенное обновление ИБ" само по расписанию выполнит все отложенные обработчики (то есть переведёт их в состояние "выполнено" или "ошибка"). По умолчанию регламентное задание "Отложенное обновление ИБ" запускается каждую минуту для выполнения очередного обработчика. Вы можете изменить настройки его запуска через расписание регламентного задания. Это может быть полезно для того, чтобы ускорить процесс выполнения отложенных обработчиков, если их много.
    4. После этого обновлятор вернёт блокировку сеансов базы и блокировку регламентных заданий, если они были установлены до этого.

При таком варианте выполнения обработчиков обновления - отчёт в этой части будет подробным, даже если вы не включили режим отладки.

Учтите, что отложенные обработчики могут выполняться и 5 минут и 2 часа. И это нормально и зависит от обновления и размера вашей базы. Ещё раз обратите внимание на возможность ускорения выполнения отложенных обработчиков путём изменения расписания запуска регламентного задания "Отложенное обновление ИБ". По умолчанию оно запускается один раз в минуту, выполняет один обработчик и делает паузу ещё на минуту. И если у вас 60 отложенных обработчиков, то этот процесс будет длиться уже 2 часа, хотя его можно прогнать за 20 минут, если настроить запуск регламентного задания, скажем, каждые 10 секунд без паузы.

Если вы захотите прервать ожидания выполнения отложенных обработчиков, то нажмите кнопку "Остановить всё" и дожидайтесь пока обновлятор сам прервёт ожидание.

В противном случае вам нужно будет самому зайти в диспетчер задач и завершить процесс с именем Connector1Cx86.exe или Connector1Cx64.exe. И далее самому проконтролировать в каком состоянии блокировки осталась база и её регламентные задания.

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

С уважением, (преподаватель школы 1С программистов и разработчик обновлятора).



Владимир Милькин
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:



Зачем нужен контроль за выполнением отложенных обработчиков обновления?

  оглавление  Возможно ли автоматическое выполнение обработчиков обновления для базовой платформы?