Как выкинуть всех пользователей из базы 1С 8.3 УПП и заблокировать новые подключения

Системный администратор 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

В процессе администрирования баз данных 1С:Предприятие 8.3 (в частности, конфигурации «Управление производственным предприятием» редакции 1.3 на СУБД MS SQL Server) регулярно возникает необходимость монопольного доступа. Это требуется для проведения регламентных операций, обновления конфигурации базы данных, тестирования и исправления или создания резервной копии. Разберем подробно, почему стандартные средства конфигурации не всегда помогают, как корректно завершить работу пользователей через кластер серверов 1С и какие альтернативные способы гарантируют полный сброс активных подключений.

Способ 1. Завершение сеансов и установка блокировки через консоль кластера серверов 1С

Проанализируем базовый и наиболее надежный способ отключения пользователей без перезапуска службы сервера 1С. Штатная обработка в пользовательском режиме (меню Сервис -> Блокировка соединений с информационной базой) отправляет клиентам предупреждающие сообщения с таймером. Однако если у пользователя открыто модальное окно (например, предупреждение или форма выбора) либо сессия зависла, штатная обработка не сможет завершить процесс. Для гарантированного результата используем системную консоль Администрирование серверов 1С:Предприятия.

Разберем по шагам порядок действий:

  1. Открываем оснастку управления кластером серверов 1С (консоль MMC).
  2. Раскрываем дерево нужного кластера, переходим в ветку Информационные базы и находим целевую базу.
  3. Открываем свойства информационной базы (клик правой кнопкой мыши -> Свойства).
  4. Устанавливаем флаг Блокировка начала сеансов включена. В полях периода указываем время начала блокировки.
  5. Обязательно заполняем поле Код разрешения (например, AdminPass). Этот код позволит администратору войти в заблокированную базу для выполнения технических работ.
  6. Обратите внимание на фоновые процессы: если не установить флаг Блокировка регламентных заданий включена, планировщик сервера 1С продолжит непрерывно создавать фоновые сеансы. Активируем этот флаг, чтобы исключить запуск фоновых задач.
  7. Сохраняем изменения, нажав кнопку применения настроек.
  8. Переходим в ветку базы Сеансы (не путать с веткой Соединения, так как пользовательские подключения отображаются именно в сеансах). Выделяем всех активных пользователей, нажимаем правой кнопкой мыши и выбираем команду Удалить.

После этого все активные клиенты будут отключены, а новые подключения заблокированы сервером приложений.

Способ 2. Авторизация администратора в заблокированной базе

Посмотрим на пример входа администратора в базу после установки блокировки. Так как сервер запрещает создание новых подключений, запуск 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"

Способ 3. Автоматизация управления блокировкой через утилиту RAC

Рассмотрим современный вариант администрирования платформы 8.3 без использования графической MMC-консоли. С помощью службы ras и консольной утилиты rac все действия можно автоматизировать в командных файлах или сценариях PowerShell.

Разберем по шагам выполнение команд:

  1. Включаем блокировку сеансов и регламентных заданий с установкой кода разрешения:

rac infobase update --cluster=cluster-id --ib=ib-id --sessions-denied=on --scheduled-jobs-denied=on --permission-code=AdminPass
  1. Получаем список идентификаторов всех активных сеансов базы:

rac session list --cluster=cluster-id --ib=ib-id

  1. Выполняем принудительное завершение каждого сеанса:

rac session terminate --cluster=cluster-id --session=session-id

Способ 4. Программный сброс сеансов через COM-соединитель

Проанализируем ситуацию, когда необходимо программно сбросить подключения из внешней базы или системного VBScript-скрипта. Для этого предназначен объект V83.COMConnector.

Посмотрим на пример программного кода на языке 1С:


Соединитель = Новый COMОбъект("V83.COMConnector");
Агент = Соединитель.ConnectAgent("Server1C");
Кластеры = Агент.GetClusters();
Кластер = Кластеры[0];
Агент.Authenticate(Кластер, "", "");

Инфобазы = Агент.GetInfoBases(Кластер);
Для Каждого ТекБаза Из Инфобазы Цикл
    Если ВРег(ТекБаза.Name) = "BASEUPP" Тогда
        ТекБаза.SessionsDenied = Истина;
        ТекБаза.ScheduledJobsDenied = Истина;
        ТекБаза.PermissionCode = "AdminPass";
        Агент.UpdateInfoBase(Кластер, ТекБаза);
        
        Сеансы = Агент.GetInfoBaseSessions(Кластер, ТекБаза);
        Для Каждого ТекСеанс Из Сеансы Цикл
            Агент.TerminateSession(Кластер, ТекСеанс);
        КонецЦикла;
    КонецЕсли;
КонецЦикла;

Способ 5. Принудительный сброс соединений на уровне MS SQL Server

Выясним причину, по которой иногда сеансы зависают намертво и не удаляются через консоль 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 мгновенно завершает все активные транзакции и отключает любые процессы, использующие таблицы базы данных. Этот прием гарантированно освобождает базу от зависших соединений со стороны СУБД.

Способ 6. Завершение пользовательских процессов в терминальной среде (RDP)

Если пользователи работают с УПП 1.3 на сервере терминалов Windows Server, наиболее быстрый способ освободить ресурсы — завершить клиентские процессы 1cv8.exe на уровне операционной системы.

Разберем выполнение системных команд:

  1. Принудительное закрытие всех запущенных процессов платформы 1С:

taskkill /F /IM 1cv8.exe

  1. Если необходимо выборочно отключить зависшую RDP-сессию пользователя, сначала просматриваем список сессий командой qwinsta, а затем выполняем сброс конкретной сессии по ее идентификатору:

logoff 15

Комбинация блокировки в консоли серверов 1С и проверки сессий на уровне СУБД позволяет администратору полностью контролировать доступ к базе данных и исключить любые конфликты блокировок при обслуживании системы.

← На главную