Зависший пользователь держит базу 1С: как завершить его сеанс без перезагрузки сервера
Содержание
Зависший сеанс в клиент-серверной базе 1С 8.3 сбрасывают в консоли администрирования серверов: Кластер → Информационные базы → <база> → Сеансы, правый клик по сеансу → Удалить. В файловой базе консоли нет: там закрывают процесс 1cv8.exe (или 1cv8c.exe) на том компьютере, где он висит, а если компьютер недоступен — снимают сетевую блокировку файла базы на сервере, где лежит каталог.
Частое заблуждение — что сеанс «сам отвалится», если пользователь закрыл крестик или выключил компьютер. Нередко он остаётся висеть: держит лицензию, блокировку данных или не даёт получить монопольный доступ для обновления. Перезагружать сервер ради одного такого сеанса не нужно — почти всегда хватает точечного удаления.
Почему сеанс завис и как это распознать
Прежде чем удалять, убедитесь, что сеанс действительно «мёртвый», а не выполняет долгую операцию. Закрытие месяца или перепроведение за квартал может идти час, и прерванная операция откатится целиком.
Типичные причины зависания:
- 🔌 Обрыв связи. Ноутбук ушёл в сон, упал VPN, пропал Wi-Fi. Клиента уже нет, а сервер ещё держит сеанс.
- 🧱 Ожидание блокировки. Сеанс ждёт, пока другой пользователь отпустит записи, и сам блокирует третьих. Получается цепочка.
- 🐢 Долгий серверный вызов. Тяжёлый отчёт без отборов, обработка с бесконечным циклом, запрос по огромной таблице.
- 💥 Аварийное закрытие клиента. Процесс убит через диспетчер задач, а запись о сеансе осталась.
- 🖥️ Зависший терминальный сеанс Windows. Пользователь «отключился» от RDP, но не вышел — 1С продолжает работать в его профиле.
Как отличить зависший сеанс от рабочего — смотрите на колонки списка сеансов в консоли:
| Признак | Сеанс живой | Сеанс завис |
|---|---|---|
| «Время последней активности» | обновляется | не меняется десятки минут |
| «Ожидание блокировки» / «Время ожидания блокировки» | пусто или растёт и сбрасывается | растёт без остановки |
| «Длительность текущего серверного вызова» | короткая или ноль | большая и растёт |
| Компьютер пользователя | доступен | выключен или не отвечает |
Если колонок не видно, включите их через настройку списка в консоли (правый клик по шапке таблицы). Полезно сразу добавить «Режим ожидания», «Хост», «Процесс» и «Соединение».
Прежде чем удалять сеанс, позвоните пользователю. Две минуты разговора иногда показывают, что у него идёт выгрузка в банк или формирование отчётности, которые лучше дождаться.
Сброс сеанса в консоли администрирования кластера
Это основной способ для клиент-серверных баз. Консоль подключается к агенту сервера 1С (по умолчанию порт 1540), а он уже показывает кластеры, базы и сеансы.
Пошагово
- Откройте
Администрирование серверов 1С Предприятияиз меню «Пуск». Если консоль пустая или не открывается — перерегистрируйте библиотекуradmin.dllтой версии платформы, что стоит на сервере (команда ниже). - Раскройте
Центральные серверы 1С:Предприятия → <имя сервера> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы. - Найдите сеанс по пользователю и компьютеру. Проверьте признаки из таблицы выше.
- Правый клик по сеансу →
Удалить. Подтвердите действие. - Обновите список (
F5) и убедитесь, что сеанс исчез и лицензия освободилась.
Регистрация консоли , если она не запускается (путь подставьте под свою версию платформы, командную строку запустите от администратора):
regsvr32 "C:\Program Files\1cv8\8.3.24.1586\bin\radmin.dll"
Сеанс не удаляется: работаем с соединением и процессом
Бывает, что сеанс пропадает из списка, а пользователь по-прежнему «внутри», или сеанс появляется снова. Тогда:
- Перейдите в
Кластер → Рабочие процессы → <процесс rphost> → Соединения. - Найдите соединение с нужной базой и хостом пользователя, удалите его.
- Если удалить нечего, а блокировка остаётся — в свежих версиях платформы в контекстном меню сеанса есть команда прерывания текущего серверного вызова. Она обрывает именно долгий вызов, не закрывая сеанс.
Крайняя мера — перезапуск рабочего процесса rphost или службы сервера 1С.
Перезапуск rphost или службы обрывает сеансы ВСЕХ пользователей, которые на нём работают, а не только зависшего. Незаписанные документы пропадут, а длинные транзакции откатятся. Делайте это после предупреждения коллег или вне рабочего времени.
То же самое из командной строки через rac
Если графическая консоль недоступна (Linux-сервер, удалённый доступ без RDP), используйте утилиту rac. Ей нужен запущенный сервер администрирования ras (по умолчанию порт 1545).
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-сеанса>
Если у кластера задан администратор, добавьте к каждой команде --cluster-user и --cluster-pwd. Полный набор параметров для вашей версии смотрите в справке rac help session.
Как завершить сеанс прямо из программы
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11 и другие) администратор может увидеть и завершить чужие сеансы, не заходя на сервер.
| Конфигурация | Где искать список |
|---|---|
| Бухгалтерия 3.0 | Администрирование → Обслуживание → Активные пользователи |
| ЗУП 3.1 | Администрирование → Обслуживание → Активные пользователи |
| УТ 11 | НСИ и администрирование → Администрирование → Обслуживание → Активные пользователи |
В старых релизах раздел мог называться «Поддержка и обслуживание» — список пользователей находится там же. Если пункта не видно, откройте Все функции (включается в параметрах программы) → Обработки → Активные пользователи.
Порядок:
- Откройте список активных пользователей.
- Выделите сеанс зависшего пользователя.
- Нажмите
Завершить сеанс. Программа попросит пароль администратора кластера, если он задан.
В режиме Конфигуратора тоже есть Администрирование → Активные пользователи, но это только просмотр: кто подключён, с какого компьютера и в каком приложении. Завершать сеансы оттуда нельзя.
Когда нужно выгнать всех: блокировка работы пользователей
Перед обновлением или тестированием базы удобнее не гоняться за каждым сеансом, а установить блокировку. В том же разделе Обслуживание есть Блокировка работы пользователей: задаёте время начала, текст сообщения и код разрешения. Платформа предупредит пользователей и через несколько минут завершит их сеансы.
Для разовых задач без программы ту же блокировку ставят в консоли кластера: свойства информационной базы → флаг «Блокировка начала сеансов включена», время и сообщение. Код разрешения из этого окна потом передают в строке запуска своего клиента параметром /UC, чтобы самому войти в заблокированную базу.
Блокировки на стороне СУБД: смотрим и снимаем через SQL
Распространённый миф — будто в базе есть «таблица блокировок 1С», которую можно очистить запросом. Её нет. Управляемые блокировки 1С живут в памяти кластера и исчезают вместе с сеансом. А вот на уровне СУБД транзакция зависшего сеанса может продолжать держать строки, если соединение не закрылось.
Прямые запросы к базе 1С — это крайний случай. Любые изменения данных таблиц через SQL ломают целостность базы. Ниже — только просмотр и завершение подключения, никаких DELETE и UPDATE.
MS SQL Server
Найти, кто кого блокирует:
SELECT r.session_id, r.blocking_session_id, r.wait_type,
r.wait_time / 1000 AS wait_sec, s.host_name, s.program_name
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id
WHERE r.blocking_session_id <> 0;
В колонке blocking_session_id — номер подключения-виновника. Подключения 1С идут от имени процесса rphost, поэтому host_name покажет сервер 1С, а не компьютер пользователя. Сопоставить подключение с сеансом 1С помогает колонка «Соединение с СУБД» в списке сеансов консоли кластера.
Завершить подключение (транзакция будет откачена):
KILL 87;
PostgreSQL
SELECT pid, state, wait_event_type, now() - xact_start AS tx_age, query
FROM pg_stat_activity
WHERE datname = 'buh_base' AND state <> 'idle'
ORDER BY xact_start;
SELECT pg_terminate_backend(12345);
Ищите подключения с состоянием idle in transaction и большим tx_age — это и есть зависшие транзакции, держащие строки.
Сначала удаляйте сеанс в консоли 1С и только если блокировка СУБД осталась — завершайте подключение в SQL. Обратный порядок тоже работает, но рабочий процесс может переоткрыть соединение и запутать картину.
Файловая база: процессы, файл блокировки и chdbfl
В файловой базе нет сервера и списка сеансов — каждый пользователь сам открывает файл 1Cv8.1CD по сети. Поэтому «сеанс» здесь — это открытый файл и процесс на чьём-то компьютере.
Сброс по шагам
- Посмотрите в Конфигураторе
Администрирование → Активные пользователи, кто числится в базе и с какого компьютера. - Закройте
1cv8.exe/1cv8c.exeна этом компьютере (или завершите его RDP-сеанс на терминальном сервере). - Если компьютер недоступен — на сервере с общей папкой откройте
Управление компьютером → Общие папки → Открытые файлыи закройте1Cv8.1CDдля нужного пользователя. - Когда все вышли, проверьте каталог базы. Файл
1Cv8.1CL— служебный файл блокировки. Если он остался, а пользователей точно нет, его можно удалить, предварительно скопировав в сторону.
Удаляйте 1Cv8.1CL только когда в базе никого нет. Если хотя бы один пользователь работает, его сеанс оборвётся, а база может повредиться.
Проверка базы утилитой chdbfl
Аварийно оборванный сеанс в файловой базе иногда оставляет повреждения. Тогда база не открывается или выдаёт ошибки формата потока. Для проверки физической целостности в каталоге платформы есть утилита chdbfl.exe:
- Сделайте копию каталога базы целиком.
- Убедитесь, что в базе никого нет — утилита требует монопольного доступа.
- Запустите
C:\Program Files\1cv8\<версия>\bin\chdbfl.exe. - Укажите путь к
1Cv8.1CD, отметьте «Исправлять обнаруженные ошибки» и нажмитеВыполнить.
Если chdbfl ошибок не нашёл, а проблемы остались, следующий шаг — Конфигуратор → Администрирование → Тестирование и исправление с проверкой логической целостности. Это тоже монопольная операция.
Профилактика: таймауты, засыпание сеансов и порядок работы
Зависшие сеансы — не случайность, их можно почти убрать настройками.
В консоли кластера, в свойствах информационной базы:
- ⏳ «Засыпание пассивного сеанса» — через сколько секунд бездействия сеанс без связи с клиентом «засыпает» и отпускает лицензию.
- 🛑 «Завершение спящего сеанса» — через сколько секунд спящий сеанс закрывается совсем. Значения порядка 300 и 3600 секунд подойдут большинству офисов.
В свойствах кластера:
- включите контроль проблемных процессов: ограничение объёма памяти рабочих процессов и принудительное завершение тех, что его превысили;
- настройте интервал перезапуска рабочих процессов, если
rphostгодами копит память. Перезапуск идёт плавно, с переносом сеансов на новый процесс.
Организационно:
- ✅ научите пользователей выходить из 1С, а не закрывать крышку ноутбука;
- ✅ на терминальном сервере задайте лимит для отключённых RDP-сеансов в групповых политиках;
- ✅ тяжёлые отчёты и закрытие месяца запускайте с отборами и вне пиковых часов;
- ✅ проверьте стабильность VPN: частые обрывы — главный источник «призраков».
Частые ошибки при сбросе сеансов
- ❌ Перезагрузка сервера вместо удаления одного сеанса. Страдают все, а проблема решалась одним кликом.
- ❌ Удаление сеанса посреди закрытия месяца. Операция откатывается целиком, и её придётся запускать заново.
- ❌ Удаление сеанса фонового задания. Сеансы с приложением «Фоновое задание» запускает сама программа: обмены, загрузка курсов, регламентные операции. Удалите — задание просто перезапустится по расписанию или оборвёт обмен на середине.
- ❌ Попытка «почистить» таблицы базы через SQL. Это не снимает блокировки 1С, а портит данные.
- ❌ Удаление 1Cv8.1CL при работающих пользователях в файловой базе.