В процессе администрирования баз данных 1С:Предприятие 8.3 (в частности, конфигурации «Управление производственным предприятием» редакции 1.3 на СУБД MS SQL Server) регулярно возникает необходимость монопольного доступа. Это требуется для проведения регламентных операций, обновления конфигурации базы данных, тестирования и исправления или создания резервной копии. Разберем подробно, почему стандартные средства конфигурации не всегда помогают, как корректно завершить работу пользователей через кластер серверов 1С и какие альтернативные способы гарантируют полный сброс активных подключений.
Проанализируем базовый и наиболее надежный способ отключения пользователей без перезапуска службы сервера 1С. Штатная обработка в пользовательском режиме (меню Сервис -> Блокировка соединений с информационной базой) отправляет клиентам предупреждающие сообщения с таймером. Однако если у пользователя открыто модальное окно (например, предупреждение или форма выбора) либо сессия зависла, штатная обработка не сможет завершить процесс. Для гарантированного результата используем системную консоль Администрирование серверов 1С:Предприятия.
Разберем по шагам порядок действий:
AdminPass). Этот код позволит администратору войти в заблокированную базу для выполнения технических работ.После этого все активные клиенты будут отключены, а новые подключения заблокированы сервером приложений.
Посмотрим на пример входа администратора в базу после установки блокировки. Так как сервер запрещает создание новых подключений, запуск 1С в обычном режиме приведет к ошибке доступа. Для входа используется специальный параметр командной строки /UC.
Разберем, как сформировать команду запуска ярлыка:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S "Server1C\BaseUPP" /UC "AdminPass"
Если требуется запустить конфигуратор для обновления или применения изменений, заменяем параметр ENTERPRISE на CONFIG:
"C:\Program Files\1cv8\common\1cestart.exe" CONFIG /S "Server1C\BaseUPP" /UC "AdminPass"
Рассмотрим современный вариант администрирования платформы 8.3 без использования графической MMC-консоли. С помощью службы ras и консольной утилиты rac все действия можно автоматизировать в командных файлах или сценариях PowerShell.
Разберем по шагам выполнение команд:
rac infobase update --cluster=cluster-id --ib=ib-id --sessions-denied=on --scheduled-jobs-denied=on --permission-code=AdminPass
rac session list --cluster=cluster-id --ib=ib-id
rac session terminate --cluster=cluster-id --session=session-id
Проанализируем ситуацию, когда необходимо программно сбросить подключения из внешней базы или системного VBScript-скрипта. Для этого предназначен объект V83.COMConnector.
Посмотрим на пример программного кода на языке 1С:
Соединитель = Новый COMОбъект("V83.COMConnector");
Агент = Соединитель.ConnectAgent("Server1C");
Кластеры = Агент.GetClusters();
Кластер = Кластеры[0];
Агент.Authenticate(Кластер, "", "");
Инфобазы = Агент.GetInfoBases(Кластер);
Для Каждого ТекБаза Из Инфобазы Цикл
Если ВРег(ТекБаза.Name) = "BASEUPP" Тогда
ТекБаза.SessionsDenied = Истина;
ТекБаза.ScheduledJobsDenied = Истина;
ТекБаза.PermissionCode = "AdminPass";
Агент.UpdateInfoBase(Кластер, ТекБаза);
Сеансы = Агент.GetInfoBaseSessions(Кластер, ТекБаза);
Для Каждого ТекСеанс Из Сеансы Цикл
Агент.TerminateSession(Кластер, ТекСеанс);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Выясним причину, по которой иногда сеансы зависают намертво и не удаляются через консоль 1С: зависшие сетевые пакеты или дедлоки на уровне СУБД удерживают рабочие процессы rphost. В критических ситуациях можно принудительно разорвать все клиентские подключения непосредственно в MS SQL Server Management Studio.
Для этого переведем базу данных в однопользовательский режим с мгновенным сбросом открытых транзакций, после чего сразу вернем многопользовательский режим:
USE master;
GO
ALTER DATABASE [BaseUPP] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [BaseUPP] SET MULTI_USER;
GO
Команда ROLLBACK IMMEDIATE мгновенно завершает все активные транзакции и отключает любые процессы, использующие таблицы базы данных. Этот прием гарантированно освобождает базу от зависших соединений со стороны СУБД.
Если пользователи работают с УПП 1.3 на сервере терминалов Windows Server, наиболее быстрый способ освободить ресурсы — завершить клиентские процессы 1cv8.exe на уровне операционной системы.
Разберем выполнение системных команд:
taskkill /F /IM 1cv8.exe
qwinsta, а затем выполняем сброс конкретной сессии по ее идентификатору:
logoff 15
Комбинация блокировки в консоли серверов 1С и проверки сессий на уровне СУБД позволяет администратору полностью контролировать доступ к базе данных и исключить любые конфликты блокировок при обслуживании системы.