Рассмотрим ситуацию, с которой иногда сталкиваются системные администраторы при переходе с одной версии платформы на другую. Например, у нас была рабочая база на платформе 1С:Предприятие 8.2. Мы установили сервер 1С 8.3 и в его консоли создали информационную базу, указав ссылку на ту же самую физическую базу MS SQL, с которой продолжает работать сервер 8.2. На первый взгляд, на тестовом стенде всё может работать, но проанализируем, к каким фатальным последствиям это приведет в продуктивной среде и какие подводные камни скрывает такая архитектура.
Платформа 1С физически не запрещает указывать одну базу данных SQL в настройках нескольких кластеров серверов (эта возможность оставлена разработчиками для исключительных случаев отладки). Однако, согласно официальной документации ИТС, одновременное использование одной базы данных несколькими информационными базами строго не рекомендуется при штатной работе.
Организация служебных данных подразумевает, что одной базе данных на сервере СУБД должна соответствовать строго одна совокупность служебных данных кластера. Параллельная модификация данных в таких условиях приведет к их непоправимому разрушению и нарушению логической целостности. Разберем по шагам, почему это происходит.
1. Изолированность серверных кэшей
Каждый кластер серверов (в нашем примере и 8.2, и 8.3) поддерживает собственный независимый кэш метаданных и объектных данных. Если пользователь, подключенный через сервер 8.3, изменит и запишет документ, сервер 8.2 об этом никак не узнает. При следующем обращении пользователя через сервер 8.2 платформа выдаст ему устаревшие данные из своего локального кэша, а при попытке их записать — затрет новые данные, сохраненные первым пользователем. Будут возникать ошибки сырого чтения данных и нарушения атомарной целостности транзакций.
2. Конфликт механизмов блокировок
Сервер 1С управляет пессимистическими блокировками объектов на уровне приложения (например, когда пользователь открывает форму документа). Если два пользователя зайдут в одну и ту же базу, но через разные серверы (один через 8.2, другой через 8.3), они будут "слепы" по отношению к сеансам друг друга. Платформа позволит им одновременно открыть и редактировать один и тот же объект. Сообщение «Объект заблокирован пользователем...» не появится. Запись данных одним поверх другого неизбежна, а менеджер управляемых блокировок будет работать некорректно.
3. Дублирование регламентных и фоновых заданий
Если расписание фоновых заданий активно, оба кластера начнут параллельно инициировать выполнение одних и тех же регламентных процедур. Разберем, к чему это приведет:
4. Разделение журнала регистрации и поломка поиска
Каждый сервер 1С пишет свой собственный журнал регистрации в свою локальную папку кластера srvinfo. История действий пользователей будет разорвана на две части, и восстановить целостную картину для аудита станет практически невозможно. Кроме того, индексы полнотекстового поиска формируются на стороне кластера. При работе двух серверов они окажутся задублированными, рассинхронизированными и начнут выдавать некорректные результаты поиска.
Если вам нужно протестировать работу базы на новой платформе (например, перед обновлением), рассмотрим правильные подходы:
Base_Test_83). В кластере 8.3 создайте новую информационную базу, которая будет ссылаться только на эту независимую копию.Если вы всё же подключили два сервера к одной базе, и пользователи успели поработать (начали появляться ошибки "номер не уникален", отрицательные остатки или разрушилась конфигурация), обычная перезагрузка служб не поможет. Посмотрим, какие шаги необходимо предпринять:
DBCC CHECKDB, так как одновременная запись могла повредить индексы SQL-таблиц.Важно: Если параллельная работа привела к фатальному разрушению структуры таблиц (что вполне вероятно), поможет только восстановление из последней исправной резервной копии.