Как устранить блокировку базы 1С фоновым заданием UpdateConfigurationLicense после обновления

Системный администратор 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При автоматизации пакетного обновления конфигураций 1С:Предприятие в клиент-серверном режиме разработчики и администраторы часто сталкиваются с неочевидным поведением платформы. После завершения обновления базы данных с ключом командной строки /UpdateDBCfg база остается заблокированной ещё на одну минуту. Попытки подключиться к ней через COM-соединение или клиентский сеанс завершаются ошибкой разделенного доступа.

Рассмотрим подробно причины возникновения этой проблемы и разберем способы её решения.

Симптомы и механика работы задания UpdateConfigurationLicense

Проанализируем порядок действий, приводящий к возникновению блокировки:

  1. Выполняется пакетное обновление конфигурации из файла или хранилища.
  2. Выполняется обновление конфигурации базы данных командой /UpdateDBCfg. На этом этапе платформа сообщает об успешном завершении процесса.
  3. Сразу после этого скрипт или программа автоматизации пытается установить подключение к информационной базе (например, через V83.COMConnector).
  4. Возникает ошибка: "Ошибка разделенного доступа к базе данных, база данных заблокирована..., приложение: фоновое задание".

При исследовании журнала регистрации выясняется, что за секунду до завершения процесса /UpdateDBCfg сервер 1С автоматически запускает системное фоновое задание. В поле данных этого задания указано значение UpdateConfigurationLicense.

Выясним ключевые особенности этого процесса:

1. Низкоуровневый механизм платформы. Поиск UpdateConfigurationLicense в модулях и метаданных конфигурации ничего не дает. Это задание вшито в сам серверный процесс rphost платформы «1С:Предприятие 8.3».

2. Игнорирование запрета регламентных заданий. Задание является системным, поэтому платформа запускает его даже в том случае, если в свойствах информационной базы включен флаг «Блокировка выполнения регламентных заданий».

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

Причина задержки и блокировки базы

Разберем, почему задание UpdateConfigurationLicense выполняется ровно одну минуту и блокирует работу.

Назначение данного механизма — проверка легальности полученного обновления и валидация прав на установленный релиз конфигурации через сервисы фирмы «1С». При обновлении базы данных платформа пытается выполнить исходящие HTTPS-запросы к официальным веб-ресурсам лицензирования.

Если сервер приложений 1С находится в изолированной сети и не имеет прямого доступа к интернету (либо исходящий трафик блокируется файрволом/прокси), происходит следующее:

  1. Платформа отправляет сетевой запрос к внешнему серверу 1С.
  2. Из-за отсутствия связи сервер 1С ожидает ответа до истечения системного таймаута сети (стандартный таймаут составляет 60 секунд).
  3. В течение всей минуты ожидания база остается заблокированной для сторонних подключений.
  4. По истечении 60 секунд задание завершается по таймауту, блокировка снимается, и база становится доступной.

Варианты решения проблемы

Вариант 1. Настройка сетевого доступа для сервера 1С

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

При наличии устойчивого интернет-соединения проверка выполняется за доли секунды, и задержка в 1 минуту полностью исчезает.

Вариант 2. Реализация цикла ожидания в скриптах автоматизации

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

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

Посмотрим на пример реализации логики ожидания подключения на языке 1С:


// Алгоритм безопасного подключения к базе после пакетного обновления
МаксимальноеВремяОжидания = 120; // Максимальное время ожидания в секундах
ИнтервалПовтора = 5;            // Пауза между попытками в секундах
ПрошлоВремени = 0;
ПодключениеУспешно = Ложь;

Пока ПрошлоВремени < МаксимальноеВремяОжидания И НЕ ПодключениеУспешно Цикл
    Попытка
        // Попытка установить COM-соединение с базой
        COMСоединитель = Новый COMОбъект("V83.COMConnector");
        БазаСоединение = COMСоединитель.Connect(СтрокаПодключения);
        ПодключениеУспешно = Истина;
    Исключение
        // Если база заблокирована заданием UpdateConfigurationLicense, ждем и пробуем снова
        Приостановить(ИнтервалПовтора);
        ПрошлоВремени = ПрошлоВремени + ИнтервалПовтора;
    КонецПопытки;
КонецЦикла;

Если НЕ ПодключениеУспешно Тогда
    ВызватьИсключение "Не удалось подключиться к базе данных за отведенное время.";
КонецЕсли;

Вариант 3. Принудительное завершение зависшего сеанса

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

Порядок действий при ручном сбросе:

  1. Откройте консоль администрирования кластера серверов 1С.
  2. Найдите нужную информационную базу и перейдите в раздел «Сеансы».
  3. Найдите фоновое задание, у которого в качестве приложения указано фоновое задание без имени пользователя или с типом фонового процесса.
  4. Завершите данный сеанс принудительно, после чего монопольный доступ к базе данных будет сразу восстановлен.
← На главную