Завершаем чужой сеанс в базе 1С: консоль кластера, rac, файловая база и SQL
Содержание
Отключить активного пользователя в клиент-серверной 1С 8.3 проще всего в консоли кластера: Администрирование серверов 1С Предприятия → кластер → Информационные базы → нужная база → Сеансы → правый клик по сеансу → Удалить. Сеанс завершится за секунды, лицензия освободится. В файловой базе такой кнопки нет: пользователя выгоняют через блокировку работы пользователей, закрытием процесса 1cv8.exe на его компьютере или закрытием открытого файла базы на сервере.
Отключение пользователя всегда обрывает его работу: несохранённый документ пропадёт, незавершённая транзакция откатится. Если время терпит, сначала предупредите человека.
Кто сейчас в базе и что держит блокировку
Прежде чем кого-то выгонять, выясните, кто реально мешает. Часто «висит» не живой человек, а фоновое задание или сеанс, который давно потерял связь с клиентом.
Где смотреть список:
- 👥 В самой программе. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть форма «Активные пользователи». Обычно она лежит в разделе
Администрирование→Обслуживание; если не нашли, наберите «Активные пользователи» в поиске по командам. Форма показывает пользователя, компьютер, приложение и время начала сеанса. - 🛠 В Конфигураторе.
Администрирование→Активные пользователи. Только просмотр, завершить сеанс отсюда нельзя. - 🖥 В консоли кластера. Ветка
Сеансыу базы. Здесь видно больше всего: номер сеанса, приложение (тонкий клиент, фоновое задание, COM-соединение, Конфигуратор), рабочий процесс, время последней активности.
Как читать колонку «Приложение»:
| Значение | Что это | Можно ли удалять |
|---|---|---|
| Тонкий / толстый клиент, веб-клиент | Живой пользователь | Да, предупредив его |
| Конфигуратор | Разработчик или администратор | Только согласовав, иначе потеряет несохранённые правки |
| Фоновое задание | Регламентное задание, обмен, проведение | Да, но задача прервётся и запустится по расписанию снова |
| COM-соединение | Внешняя обработка, интеграция, другая программа | Да, но выясните, что это за интеграция |
Если база жалуется на блокировку данных, загляните в ветку Блокировки у той же базы в консоли. Там видно, какой сеанс держит управляемую блокировку и на каком объекте. Выгонять нужно именно его, а не всех подряд.
Сеанс с давним временем последней активности и пустым компьютером — первый кандидат. Это часто «зомби»: клиент упал, а сервер ещё считает человека подключённым.
Удаление сеанса в консоли администрирования серверов 1С
Основной способ для клиент-серверной базы. Консоль ставится вместе с сервером 1С и запускается с ярлыка «Администрирование серверов 1С Предприятия».
Пошагово
- Откройте консоль. Если центрального сервера нет в дереве, добавьте его: правый клик по
Central 1C:Enterprise 8.3 servers→Создать→Центральный сервер 1С:Предприятия 8.3, укажите имя сервера и порт1540. - Разверните
Кластеры→ кластер (по умолчанию «Локальный кластер», порт1541) →Информационные базы. - Раскройте нужную базу. Если стоит вход по администратору базы, консоль спросит его логин и пароль.
- Выберите ветку
Сеансы. - Найдите сеанс по пользователю и компьютеру. Можно выделить несколько строк через Ctrl.
- Правый клик →
Удалить, подтвердите.
У пользователя появится сообщение о разрыве соединения, программа закроется или предложит перезапуститься. Лицензия освобождается сразу.
Если консоль не открывается
Типичная беда после обновления платформы: консоль показывает ошибку про класс или просто не стартует. Причина — не зарегистрирована библиотека radmin.dll нужной версии. Запустите командную строку от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"
Номер версии подставьте свой: он должен совпадать с версией работающего сервера. Если на сервере стоят 32- и 64-битные платформы, регистрируйте radmin.dll той же разрядности, что и консоль.
Если на кластере заведены администраторы, консоль спросит их логин и пароль. Потерянный пароль администратора кластера не «сбрасывают» удалением кластера: остановите службу и восстановите файлы реестра кластера из резервной копии или обратитесь к тому, кто настраивал сервер.
Без консоли: утилита rac
Когда графической консоли под рукой нет (Linux, удалённый сервер, скрипт), сеанс удаляют утилитой rac. Ей нужен запущенный сервер администрирования ras (по умолчанию порт 1545).
Запуск ras, если он не установлен службой:
cd "C:\Program Files\1cv8\8.3.24.1548\bin"
ras cluster --port=1545 localhost:1540
Дальше в другом окне:
rac localhost:1545 cluster list
rac localhost:1545 infobase summary list --cluster=<UUID кластера>
rac localhost:1545 session list --cluster=<UUID кластера> --infobase=<UUID базы>
rac localhost:1545 session terminate --cluster=<UUID кластера> --session=<UUID сеанса>
В выводе session list смотрите поля user-name, host, app-id и session-id. Если у кластера есть администратор, добавьте к командам --cluster-user=<имя> --cluster-pwd=<пароль>.
Как выгнать пользователя из файловой базы
В файловом варианте нет сервера, который управляет сеансами. Каждый клиент сам открывает файл 1Cv8.1CD. Поэтому способов три, и все — не из одной кнопки.
Способ 1. Блокировка работы пользователей
В конфигурациях на БСП откройте форму «Блокировка работы пользователей» (тот же раздел Администрирование → Обслуживание или поиск по командам). Заполните:
- 🕐 время начала и окончания блокировки;
- 💬 сообщение, которое увидят пользователи;
- 🔑 код разрешения — по нему администратор сможет войти, пока база закрыта.
После установки блокировки программа предупреждает работающих пользователей и через несколько минут сама завершает их сеансы. Новые входы запрещены. В файловой базе блокировка хранится в файле 1Cv8.cdn в каталоге базы.
Войти в заблокированную базу самому можно с параметром /UC:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "D:\Base\Buh" /UC 12345
Блокировка не выгонит пользователя, у которого клиент завис или открыт модальный диалог. Для таких случаев есть способы 2 и 3.
Способ 2. Закрыть процесс на компьютере пользователя
Если человек работает на своём компьютере или на терминальном сервере, завершите его процесс 1cv8.exe или 1cv8c.exe (тонкий клиент). На терминальном сервере удобно через диспетчер задач, вкладка «Пользователи»: видно, чей процесс.
Из командной строки на терминальном сервере:
tasklist /v /fi "imagename eq 1cv8c.exe"
taskkill /pid 4120 /f
Способ 3. Закрыть открытый файл базы на сервере
Если база лежит в сетевой папке на Windows-сервере, откройте Управление компьютером → Общие папки → Открытые файлы. Найдите строки с 1Cv8.1CD и нужным пользователем, правый клик → Закрыть открытый файл.
Это самый грубый способ: клиент теряет файл посреди записи. Пользуйтесь им, когда остальные не сработали, и только после резервной копии каталога базы.
Разрыв соединения на уровне СУБД
Этот способ относится только к клиент-серверной базе на MS SQL Server или PostgreSQL. Сразу оговорка: в СУБД нет пользователей 1С. К базе данных подключаются рабочие процессы rphost, и одно соединение обслуживает сеансы разных людей.
Когда SQL нужен:
- 🔒 запрос висит на блокировке в СУБД, а удаление сеанса в консоли не помогает;
- 🧟 рабочий процесс завис и не отвечает, соединение с СУБД держит транзакцию;
- 🛑 нужно срочно перевести базу в однопользовательский режим для обслуживания.
MS SQL Server
Найдите соединения к базе:
SELECT session_id, host_name, program_name, status, blocking_session_id
FROM sys.dm_exec_sessions s
LEFT JOIN sys.dm_exec_requests r ON r.session_id = s.session_id
WHERE s.database_id = DB_ID('buh_base');
Если program_name пуст или обрезан, ориентируйтесь на host_name (имя сервера 1С) и на blocking_session_id: он показывает, кто кого держит. Завершение:
KILL 57;
PostgreSQL
SELECT pid, client_addr, state, query_start, wait_event_type
FROM pg_stat_activity
WHERE datname = 'buh_base';
SELECT pg_terminate_backend(12345);
После KILL или pg_terminate_backend СУБД откатывает транзакцию, а рабочий процесс 1С получает ошибку соединения. Пострадать могут сеансы нескольких пользователей, обслуживаемых этим процессом. Делайте это в нерабочее время или когда другие способы исчерпаны.
Управляемые блокировки 1С в СУБД не видны вообще: они живут в менеджере блокировок кластера. Если пользователь ругается «Конфликт блокировок при выполнении транзакции», ищите виновника в ветке Блокировки консоли, а не в SQL.
Технологический журнал и «зомби»-сеансы
Если один и тот же сеанс зависает регулярно, удаление лечит симптом. Причину покажет технологический журнал (ТЖ).
Как включить сбор событий о блокировках
ТЖ настраивают файлом logcfg.xml в каталоге conf платформы (например, C:\Program Files\1cv8\conf). Пример для поиска ожиданий на блокировках и взаимоблокировок:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="D:\TechLog" history="24">
<event><eq property="name" value="TLOCK"/></event>
<event><eq property="name" value="TTIMEOUT"/></event>
<event><eq property="name" value="TDEADLOCK"/></event>
<property name="all"/>
</log>
</config>
Сервер подхватывает файл без перезапуска. history="24" — хранить 24 часа, старые файлы удаляются сами.
Что искать в логах:
TTIMEOUT— сеанс не дождался блокировки; в событии указан номер сеанса-виновника;TDEADLOCK— взаимоблокировка, два сеанса ждали друг друга;TLOCK— кто и какую область заблокировал.
Как очистить технологический журнал
ТЖ на сервере растёт до десятков гигабайт, если забыть history. Чтобы очистить:
- Уберите или переименуйте
logcfg.xml— запись прекратится через минуту-другую. - Удалите содержимое каталога из
location. - Верните конфигурацию с разумным
historyи узким набором событий.
Сеансы, которые не удаляются
Бывает, сеанс в консоли удаляется и тут же появляется снова, или удаление не срабатывает. Обычно это значит, что зависли данные кластера. Признанный приём — очистка сеансовых данных:
- Остановите службу «Агент сервера 1С:Предприятия 8.3».
- В каталоге
srvinfo\reg_1541удалите папкиsnccntx*. - Запустите службу.
Остановка службы обрывает работу всех пользователей всех баз кластера. Делайте это вне рабочего времени. Файлы реестра кластера (1CV8Clst.lst) не трогайте.
Как запретить вход и контролировать сеансы без ручной работы
Перед обновлением или закрытием месяца удобнее не ловить людей по одному, а запретить вход заранее.
Блокировка начала сеансов в свойствах базы
В консоли кластера: правый клик по базе → Свойства. Там есть флажок «Блокировка начала сеансов включена», поля начала и конца блокировки, сообщение и код разрешения. Работает так же, как блокировка из программы, но действует на уровне сервера. Рядом флажок блокировки регламентных заданий — включайте его, если фоновые задания мешают обслуживанию.
То же самое через rac:
rac localhost:1545 infobase update --cluster=<UUID кластера> --infobase=<UUID базы> ^
--infobase-user=Админ --infobase-pwd=*** ^
--sessions-deny=on --denied-message="Обновление базы до 21:00" --permission-code=12345
Снять блокировку — та же команда с --sessions-deny=off.
Блокировка начала сеансов в свойствах базы сама по себе не выгоняет тех, кто уже вошёл. Работающих пользователей нужно завершить отдельно: удалением сеансов или блокировкой из программы, которая сама закрывает сеансы.
Ночной скрипт на rac
Если пользователи регулярно оставляют базу открытой на ночь, а в 23:00 стартует регламент, поставьте в планировщик Windows простой скрипт. Он перебирает сеансы базы и завершает пользовательские, оставляя фоновые задания:
@echo off
set RAC="C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
set CL=<UUID кластера>
set IB=<UUID базы>
for /f "tokens=2 delims=: " %%S in ('%RAC% localhost:1545 session list --cluster=%CL% --infobase=%IB% ^| findstr /b "session "') do (
%RAC% localhost:1545 session terminate --cluster=%CL% --session=%%S
)
В этом варианте завершаются все сеансы базы. Чтобы не трогать фоновые задания, сначала разберите вывод session list и фильтруйте по полю app-id (для фоновых заданий там BackgroundJob). На PowerShell это удобнее, чем в bat.
Что ещё помогает держать сеансы под контролем
- ⏳ Спящие сеансы. В свойствах базы в консоли есть параметры засыпания пассивного сеанса и завершения спящего сеанса. Они освобождают лицензии у тех, кто ушёл, не закрыв программу.
- 📋 Регламент. Время закрытия базы на обслуживание лучше прописать и сообщить заранее, чем каждый раз выгонять людей.
- 🔐 Права. Завершать чужие сеансы должен узкий круг: администратор кластера и ответственный за базу.