При автоматизации пакетного обновления конфигураций 1С:Предприятие в клиент-серверном режиме разработчики и администраторы часто сталкиваются с неочевидным поведением платформы. После завершения обновления базы данных с ключом командной строки /UpdateDBCfg база остается заблокированной ещё на одну минуту. Попытки подключиться к ней через COM-соединение или клиентский сеанс завершаются ошибкой разделенного доступа.
Рассмотрим подробно причины возникновения этой проблемы и разберем способы её решения.
Проанализируем порядок действий, приводящий к возникновению блокировки:
/UpdateDBCfg. На этом этапе платформа сообщает об успешном завершении процесса.V83.COMConnector).При исследовании журнала регистрации выясняется, что за секунду до завершения процесса /UpdateDBCfg сервер 1С автоматически запускает системное фоновое задание. В поле данных этого задания указано значение UpdateConfigurationLicense.
Выясним ключевые особенности этого процесса:
1. Низкоуровневый механизм платформы. Поиск UpdateConfigurationLicense в модулях и метаданных конфигурации ничего не дает. Это задание вшито в сам серверный процесс rphost платформы «1С:Предприятие 8.3».
2. Игнорирование запрета регламентных заданий. Задание является системным, поэтому платформа запускает его даже в том случае, если в свойствах информационной базы включен флаг «Блокировка выполнения регламентных заданий».
3. Влияние на доступ к базе. Во время выполнения задания платформа держит блокировку структуры базы данных, препятствуя установке новых сеансов.
Разберем, почему задание UpdateConfigurationLicense выполняется ровно одну минуту и блокирует работу.
Назначение данного механизма — проверка легальности полученного обновления и валидация прав на установленный релиз конфигурации через сервисы фирмы «1С». При обновлении базы данных платформа пытается выполнить исходящие HTTPS-запросы к официальным веб-ресурсам лицензирования.
Если сервер приложений 1С находится в изолированной сети и не имеет прямого доступа к интернету (либо исходящий трафик блокируется файрволом/прокси), происходит следующее:
Если политика безопасности компании позволяет, наиболее эффективным решением будет предоставление серверу приложений 1С доступа к сервисам проверки лицензий. Для этого необходимо открыть исходящий трафик по портам 80 и 443 со стороны сервера 1С до следующих доменов:
1c.ruv8.1c.ruportal.1c.rureleases.1c.ruПри наличии устойчивого интернет-соединения проверка выполняется за доли секунды, и задержка в 1 минуту полностью исчезает.
Если сервер 1С должен работать в полностью изолированном контуре без выхода в интернет, необходимо учитывать минутную задержку в алгоритмах автоматического обновления.
При написании собственных скриптов обновления или использовании внешних утилит после выполнения команды /UpdateDBCfg следует добавить специальный цикл повторных попыток подключения с перехватом исключений.
Посмотрим на пример реализации логики ожидания подключения на языке 1С:
// Алгоритм безопасного подключения к базе после пакетного обновления
МаксимальноеВремяОжидания = 120; // Максимальное время ожидания в секундах
ИнтервалПовтора = 5; // Пауза между попытками в секундах
ПрошлоВремени = 0;
ПодключениеУспешно = Ложь;
Пока ПрошлоВремени < МаксимальноеВремяОжидания И НЕ ПодключениеУспешно Цикл
Попытка
// Попытка установить COM-соединение с базой
COMСоединитель = Новый COMОбъект("V83.COMConnector");
БазаСоединение = COMСоединитель.Connect(СтрокаПодключения);
ПодключениеУспешно = Истина;
Исключение
// Если база заблокирована заданием UpdateConfigurationLicense, ждем и пробуем снова
Приостановить(ИнтервалПовтора);
ПрошлоВремени = ПрошлоВремени + ИнтервалПовтора;
КонецПопытки;
КонецЦикла;
Если НЕ ПодключениеУспешно Тогда
ВызватьИсключение "Не удалось подключиться к базе данных за отведенное время.";
КонецЕсли;
В случаях, когда фоновое задание по причине сетевого сбоя зависает на срок более минуты, снять блокировку базы можно принудительно. Для этого используется консоль администрирования кластера серверов 1С:Предприятия или утилита командной строки rac.
Порядок действий при ручном сбросе: