В практике системного администрирования иногда возникает ситуация, когда при миграции с одной версии платформы на другую (например, при переходе с релиза 8.2 на 8.3) администраторы временно оставляют активными оба сервера приложений 1С, направленными на одну и ту же базу данных в СУБД. Мотивом обычно служит желание обеспечить непрерывность работы пользователей, пока клиентские приложения обновляются постепенно. Однако в результате администраторы сталкиваются со сбоями бизнес-логики: слетает автонумерация, зависают сеансы, задваиваются регламентные задания.
Разберем детально, почему подобная схема недопустима, какие именно сервисы платформы выходят из строя, что происходит с данными на низком уровне и как по шагам восстановить целостность информационной базы.
Проанализируем архитектуру клиент-серверного взаимодействия. Сервер «1С:Предприятие» — это не просто маршрутизатор трафика к СУБД, а полноценный сервер приложений с собственной сложной инфраструктурой служб и кэширования в оперативной памяти. СУБД (например, MS SQL Server или PostgreSQL) воспринимает рабочие процессы rphost разных серверов как независимые клиентские соединения и разрешает параллельное подключение, не сигнализируя об ошибке.
Официальная позиция фирмы 1С категорична: подключение двух разных серверов приложений (особенно разных версий платформ) к одной базе данных строго запрещено. Платформа принципиально не проектировалась под такой сценарий. Возникающие при этом ошибки квалифицируются вендором как нарушение лицензионных и эксплуатационных требований, а система автоматически лишается технической поддержки.
Рассмотрим сервисы кластера, которые выделяются платформой строго по принципу «один сервис на одну информационную базу», и выясним, к чему приводит их дублирование:
Помимо явных ошибок интерфейса, параллельная работа двух серверов (в особенности разных версий, таких как 8.2 и 8.3) создает скрытые угрозы целостности базы данных:
rphost кэшируют в оперативной памяти константы, параметры функциональных опций и схемы таблиц. Изменения, внесенные через один сервер, второй сервер не увидит до перезапуска своих процессов. Возникает эффект «фантомного чтения», когда запись перезаписывается устаревшими данными из кэша.Config, Params), механизмы сериализации и генерации временных таблиц SQL. Попытка сервера 8.2 работать со структурами, модифицированными сервером 8.3, может нарушить физическую целостность конфигурации.Разберем четкую последовательность действий по локализации проблемы и приведению базы данных в рабочее состояние.
Шаг 1. Отключение устаревшего сервера и изоляция базы. Немедленно остановите службу «1С:Предприятия» на старом сервере или удалите регистрацию информационной базы из его консоли кластера. Убедитесь, что все клиентские подключения осуществляются строго через один рабочий сервер приложений.
Шаг 2. Восстановление автонумерации документов. Для устранения сбоев нумерации документов и кодов справочников воспользуемся встроенной процедурой глобального контекста. Выполним программный пересчет в контексте внешней обработки или сеанса с административными правами:
// Восстановление механизма автонумерации для метаданных конфигурации
ОбновитьНумерациюОбъектов();
Метод ОбновитьНумерациюОбъектов() выполняет сброс внутренних счетчиков номеров в кэше и заново определяет максимальный существующий номер в таблицах базы данных для всех типов объектов. Если сбой затронул конкретный вид документов, передайте в процедуру метаданные этого объекта:
// Сброс и актуализация нумератора для конкретного документа
ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваровУслуг);
Шаг 3. Очистка кэша сервера приложений. Остановите службу рабочего сервера 1С. В каталоге данных кластера (по умолчанию srvinfo) удалите кэш метаданных и сеансовых данных. Это гарантирует, что рабочие процессы не поднимут в память устаревшие структуры.
Шаг 4. Проверка целостности на уровне СУБД. До запуска пользователей выполните служебную проверку средствами СУБД, чтобы убедиться в отсутствии повреждений страниц данных. Для MS SQL Server выполним команду:
DBCC CHECKDB (ИмяБазыДанных) WITH NO_INFOMSGS, ALL_ERRORMSGS;
Шаг 5. Полный пересчет итогов регистров. Перейдите в режим «1С:Предприятие» под учетной записью администратора. Откройте стандартную обработку управления итогами (или используйте процедуру в конфигураторе) и выполните полный пересчет итогов по всем регистрам накопления и бухгалтерии.
Шаг 6. Тестирование и исправление в конфигураторе. Запустите конфигуратор в монопольном режиме и откройте меню Администрирование -> Тестирование и исправление... Отметьте следующие обязательные пункты:
Шаг 7. Сброс индекса полнотекстового поиска. Поскольку поисковые индексы на серверах разделились, выполните программную или интерактивную очистку индекса полнотекстового поиска через меню администрирования, после чего запустите полное обновление индекса через регламентное задание ОбновлениеИндексаППД.
Чтобы избежать одновременного подключения разных платформ к единой базе в будущем, разберем штатные архитектурные сценарии перевода пользователей: