Запланирован переход на .NET Framework 4.5

  оглавление  Зачем перед обновлением удаляются исправления (патчи)

Обновлятор-1с. Настраиваем выполнение обработчиков обновления

Введение

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

Режим выполнения обработчиков настраивается в свойствах базы...

... на закладке "Обновление" в разделе "Обработчики":

Режимы

Выполнять основные и отложенные

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

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

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

Выполнять основные и отложенные особым образом

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

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

Этот режим нужен в 2 случаях:

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

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

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

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

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

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

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

Выполнять только основные

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

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

При применении этого режима рекомендую в свойствах базы, на закладке "Обновление", в разделе "Ограничения" выставить опцию "Обновлять не более чем на" в значение 1. Тогда база обновится не более чем на 1 релиз, будут выполнены основные обработчики, а затем база полностью разблокируется и уже в фоне будут выполняться отложенные обработчики. Обновлятор в этом случае (в отличие от предыдущего режима) не будет ожидать окончания их выполнения. Этот вариант более надёжный, чем предыдущий режим.

Запускать базу с ключом /CВыполнитьОбновлениеИЗавершитьРаботу

Этот режим предназначен прежде всего для базовой платформы 1с.

Базовая 1с не позволяет обновлятору подключаться к базам программно (это её ограничение). Поэтому обновлятор в этом случае не может выполнить (и проконтролировать) программно обработчики.

При этом некоторые типовые конфигурации поддерживают параметр командной строки '/CВыполнитьОбновлениеИЗавершитьРаботу'. При запуске клиента с этим ключом в базе автоматически запускается выполнение обработчиков обновления, а после база закрывается.

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

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

Именно поэтому у этого режима есть дополнительная опция, позволяющую указать, что нужно ожидать пока не закроется база, но не менее X минут.

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

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

Не выполнять

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

Этот режим я также советую использовать в сочетании с обновлением не более чем на 1 релиз за одну операцию. То есть сначала нужно обновиться на 1 релиз, затем запустить базу, чтобы выполнились все обработчики и только после этого обновляться на следующий релиз.

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



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

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



Запланирован переход на .NET Framework 4.5

  оглавление  Зачем перед обновлением удаляются исправления (патчи)