Нередко в практике сопровождения конфигураций 1С (особенно тяжелых, таких как Бухгалтерия предприятия) возникает специфическая проблема: при попытке обновить базу данных напрямую через сеанс RDP на сервере Конфигуратор намертво зависает, в то время как накатывание того же самого файла конфигурации с локального компьютера разработчика проходит штатно.
Разберем детально, почему возникает такое поведение платформы, какие узкие места приводят к зависаниям и какие технические способы позволяют гарантированно и безопасно выполнять обновление клиент-серверных баз данных.
Проанализируем технические различия между локальным запуском Конфигуратора на клиентском ПК и работой в терминальном сеансе на сервере:
РегламентныеЗадания по загрузке курсов валют, закрытию месяца или обновлению полнотекстового поиска), они непрерывно удерживают сессионные блокировки таблиц конфигурации. При попытке Конфигуратора захватить монопольную блокировку структуры возникает взаимная блокировка (deadlock).%TEMP% и каталогах AppData\Local\1C). Проверка этих файлов серверным антивирусом или службами индексации на лету способна намертво заблокировать процесс.Главное правило безопасного обновления структуры базы — полный перевод информационной базы в монопольный режим. Посмотрим, как это сделать правильно:
/SetSessionLock для временного закрытия доступа.Перед загрузкой изменений обязательно выполним очистку временных файлов 1С в терминальном профиле. Разберем по шагам:
1cv8.exe и 1cv8c.exe в диспетчере задач.%LOCALAPPDATA%\1C\1cv8\
%APPDATA%\1C\1cv8\
%TEMP%.Если обновление падает при совмещении нескольких операций в одном сеансе, применим проверенный алгоритм поэтапного наката:
.cf файл).Разделение операций позволяет Конфигуратору полностью освободить память, задействованную под парсинг метаданных файла поставки, перед началом этапа тяжелой реструктуризации таблиц СУБД.
Чтобы исключить падение 32-битного клиента из-за нехватки оперативной памяти при реструктуризации, перенесем выполнение этой задачи на 64-битный серверный процесс rphost. Для этого используем запуск пакетного обновления с параметром -Server.
Посмотрим на пример командного файла (.bat), выполняющего фоновое обновление базы на сервере:
@echo off
set V8PATH="C:\Program Files\1cv8\8.3.8.1652\bin\1cv8.exe"
set SRV_NAME=SERVER1C
set IB_NAME=BuhBase
set ADMIN_USER=Administrator
set ADMIN_PASS=StrongPassword
set CF_FILE="C:\Deploy\update.cf"
echo Загрузка конфигурации...
%V8PATH% DESIGNER /S "%SRV_NAME%\%IB_NAME%" /N "%ADMIN_USER%" /P "%ADMIN_PASS%" /LoadCfg %CF_FILE% /Out "C:\Deploy\log_load.txt"
echo Применение изменений на сервере 1С...
%V8PATH% DESIGNER /S "%SRV_NAME%\%IB_NAME%" /N "%ADMIN_USER%" /P "%ADMIN_PASS%" /UpdateDBCfg -Server -Dynamic- /Out "C:\Deploy\log_update.txt"
Разберем используемые параметры:
/LoadCfg — выполняет полную загрузку метаданных из файла поставки./UpdateDBCfg -Server — указывает платформе производить реструктуризацию средствами рабочего процесса кластера (rphost), минуя ограничения клиентского приложения.-Dynamic- — строго запрещает динамическое обновление, гарантируя корректное монопольное изменение таблиц СУБД.Проанализируем сопутствующие инфраструктурные настройки сервера, предотвращающие дедлоки:
%TEMP%, C:\ProgramData\1C и каталоги установки платформы в список исключений постоянного мониторинга антивирусного ПО на сервере.tcp:ИмяСервера), чтобы исключить конфликты протокола Shared Memory при локальных вызовах.Чтобы избежать ошибок при ручной передаче конфигураций через RDP, выстроим правильный процесс поставки:
.cf или файл обновления .cfu) на тестовой среде после проверки всех доработок.