При обслуживании корпоративных информационных систем на базе 1С:Предприятие 8.3, работающих в связке с MS SQL Server (включая конфигурацию 1С:Управление производственным предприятием 1.3), регулярно возникает задача монопольного доступа к базе данных. Обновление конфигурации, архивация, тестирование и исправление или регламентные операции на сервере СУБД требуют полного завершения всех пользовательских сеансов. Разберем по шагам все доступные способы отключения пользователей — от штатных интерфейсных механизмов конфигурации до низкоуровневых административных инструментов кластера серверов и СУБД.
В конфигурации 1С:Управление производственным предприятием 1.3 реализован штатный механизм корректного предупреждения и отключения пользователей. Этот способ считается наиболее мягким, так как клиенты получают системное оповещение и время для сохранения открытых документов.
После наступления времени блокировки платформа 1С на клиентских рабочих местах начинает регулярно выводить предупреждения, а по истечении тайм-аута выполняет автоматическое закрытие программы.
Если пользователи не реагируют на оповещения или клиентские приложения зависли, воспользуемся графической утилитой управления кластером серверов. Рассмотрим порядок действий системного администратора:
Для автоматизации ночного регламентного обслуживания удобно использовать утилиту командной строки rac, взаимодействующую со службой удаленного администрирования ras. Проанализируем примеры типовых команд:
rac infobase update --cluster=CLUSTER_ID --ibase=IBASE_ID --sessions-deny=on --denied-from="2025-01-01T22:00:00" --denied-message="Технические работы" --permission-code="SecretPass"
rac session list --cluster=CLUSTER_ID --ibase=IBASE_ID
rac session terminate --cluster=CLUSTER_ID --session=SESSION_ID
Если требуется встроить отключение пользователей во внешний скрипт резервного копирования или регламентную внешнюю обработку, подключимся к агенту кластера через объект V83.COMConnector. Разберем пример кода на встроенном языке 1С:
Соединитель = Новый COMОбъект("V83.COMConnector");
Агент = Соединитель.ConnectAgent("ServerName");
Кластеры = Агент.GetClusters();
Для Каждого Кластер Из Кластеры Цикл
Агент.Authenticate(Кластер, "ClusterAdmin", "Password");
РабочиеПроцессы = Агент.GetWorkingProcesses(Кластер);
Для Каждого Процесс Из РабочиеПроцессы Цикл
Описание = Соединитель.ConnectWorkingProcess(Процесс.HostName + ":" + Формат(Процесс.MainPort, "ЧГ="));
Описание.AddAuthentication("BaseAdmin", "BasePassword");
Инфобаза = Описание.CreateInfoBaseInfo();
Инфобаза.Name = "upp_production";
Сеансы = Описание.GetSessions(Инфобаза);
Для Каждого Сеанс Из Сеансы Цикл
Если Не Сеанс.AppID = "COMConsole" Тогда
Описание.TerminateSession(Инфобаза, Сеанс);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Когда в базе включена блокировка сеансов, стандартный запуск клиента выдает ошибку о запрете соединений. Чтобы администратор мог зайти в конфигуратор или предприятие, используется специальный ключ командной строки /UC. Запуск выполняется следующим образом:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" ENTERPRISE /S "ServerName\upp_production" /N "Администратор" /P "Пароль" /UC "SecretPass"
Здесь параметр /UC принимает значение кода разрешения, указанного ранее в свойствах базы или в обработке блокировки.
В практической работе системный администратор сталкивается с ситуациями, когда команда сброса сеанса не приводит к немедленному закрытию приложения:
1cv8.exe на стороне ОС/RDP или сбросом сеанса на сервере СУБД.
ALTER DATABASE [upp_production] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [upp_production] SET MULTI_USER;
rphost с клиентским компьютером может оставаться в пуле еще некоторое время, что является нормальным поведением платформы.