Динамическое обновление конфигурации базы данных (в среде разработчиков часто называемое «демоническим обновлением») позволяет применить изменения метаданных и программного кода без необходимости монопольного захвата базы и отключения активных пользователей. Однако на практике такое удобство нередко оборачивается повреждением структуры базы данных, ошибками формата потока и аварийным завершением сеансов. Разберем технические причины нестабильности этого механизма, ограничения платформы и проверенные методы безопасной работы.
Проанализируем внутреннее устройство платформы 1С:Предприятие 8.3 и выясним причину возникновения критических ошибок при частом применении обновлений «на лету»:
Config и ConfigSave. При многократном повторении процедуры без монопольного сброса накапливается цепочка промежуточных состояний. В определенный момент происходит рассинхронизация метаданных, вызывающая ошибку «Нарушение целостности структуры конфигурации» или «Ошибка формата потока».rphost. При динамическом обновлении сеансы могут продолжить исполнять старый код, в то время как сервер уже ожидает новый контекст. В результате сеанс пользователя внезапно завершает работу с ошибкой.rphost всего кластера.Если специфика бизнеса не позволяет организовать регламентное окно для монопольного обновления, и динамическое обновление неизбежно, рассмотрим обязательные правила предосторожности:
.dt./ClearCache.Если база данных начала выдавать ошибки структуры конфигурации или перестала запускаться, разберем по шагам алгоритм восстановления целостности:
Завершаем все пользовательские сеансы и останавливаем регламентные задания. Открываем базу в конфигураторе, вносим незначительное изменение (например, добавляем комментарий или пробел в любой общий модуль) и выполняем обновление конфигурации базы данных клавишей F7. Платформа сотрет накопленные инкременты в таблице Config и запишет цельную версию метаданных.
Выгружаем конфигурацию в файл (меню «Конфигурация» — «Сохранить конфигурацию в файл...» с расширением .cf). Затем в монопольном режиме выбираем пункт «Конфигурация» — «Загрузить конфигурацию из файла...». Важно использовать именно операцию загрузки, а не сравнения/объединения, так как загрузка полностью пересоздает служебные таблицы версий в СУБД.
Останавливаем службу сервера 1С:Предприятия. Переходим в рабочий каталог кластера серверов (каталог srvinfo) и очищаем содержимое папок контекста сеансов snccntx*, после чего перезапускаем службу.
Если транзакция динамического обновления зависла и база заблокирована, на уровне SQL-сервера в таблице Config удаляется запись блокировки со служебным именем commit (перед выполнением прямых SQL-запросов резервная копия базы обязательна).
Чтобы исключить риски повреждения информационной базы и не прерывать рабочий процесс пользователей, рассмотрим альтернативные архитектурные подходы: