Зависший сеанс держит базу и лицензию: как его найти и завершить
Содержание
Зависший сеанс в клиент-серверной 1С удаляют в консоли кластера: Кластеры → <кластер> → Информационные базы → <база> → Сеансы, правый клик по сеансу → Удалить. Без консоли то же делает команда rac session terminate. В файловой базе сеансов на сервере нет: там закрывают процесс 1cv8.exe или 1cv8c.exe на компьютере, где он остался.
Частая ошибка — сразу перезапускать службу сервера 1С. Это обрывает работу всем пользователям ради одного «мёртвого» сеанса. Сначала найдите конкретный зависший сеанс, удалите только его, и лишь если он возвращается или не удаляется — переходите к рабочим процессам и СУБД. Всё ниже относится к платформе 8.3 и одинаково для любых конфигураций: БП, ЗУП, УТ, ERP.
1. Как понять, какой сеанс завис и почему
Зависшим считают сеанс, у которого нет живого пользователя, но который держит ресурсы: лицензию, блокировку данных или монопольный доступ. Типичные причины:
- 🔌 обрыв сети или сон ноутбука — клиент пропал, а сервер ещё ждёт его;
- 💥 аварийное закрытие клиента (снят через диспетчер задач, упал терминальный сервер );
- 🐢 долгий запрос или транзакция, которая ждёт блокировку в СУБД;
- ⚙️ фоновое или регламентное задание, которое ушло в бесконечный цикл;
- 🔗 внешняя программа подключилась через COM-соединение и не закрыла его.
Как это выглядит со стороны пользователей:
| Симптом | Что, скорее всего, держит |
|---|---|
| «Не хватает лицензий», хотя людей меньше, чем ключей | сеансы без клиента |
| Конфигуратор не может установить монопольный режим | любой оставшийся сеанс, включая фоновые |
| Документ не проводится, ошибка про время ожидания блокировки | сеанс в незавершённой транзакции |
| Пользователь не может войти под своим именем | его же старый сеанс при запрете повторного входа |
Перед удалением соберите три факта: кто владелец сеанса (пользователь, компьютер, приложение), когда он последний раз был активен и держит ли он блокировки. Удалять вслепую сеанс бухгалтера, который сейчас проводит закрытие месяца , — верный способ получить откат транзакции и недовольного коллегу.
В самой 1С список подключений открывается через Главное меню → Функции для технического специалиста → Стандартные → Активные пользователи. Пункт «Функции для технического специалиста» включается в Сервис → Параметры. Список показывает пользователей и компьютеры, это удобный первый взгляд перед консолью.
2. Удаление сеанса в консоли администрирования серверов
Консоль — оснастка «Администрирование серверов 1С:Предприятия», ставится вместе с сервером или отдельно компонентом платформы. Если она не открывается или пишет об ошибке оснастки, перерегистрируйте radmin.dll нужной версии платформы командой regsvr32 из-под администратора.
Порядок действий:
- Откройте консоль и разверните
Central 1C:Enterprise 8.3 servers → <имя сервера> → Кластеры → <кластер>. - Перейдите в
Информационные базы → <нужная база> → Сеансы. Здесь только сеансы этой базы. УзелСеансыуровнем выше, прямо в кластере, покажет сеансы всех баз. - Отсортируйте список по колонке времени последней активности. Сеанс, неактивный часами, — первый кандидат.
- Проверьте колонку «Приложение»: тонкий клиент, конфигуратор, фоновое задание, COM-соединение, веб-клиент.
- Выделите сеанс, правый клик →
Удалить. Можно выделить несколько строк сразу. - Обновите список (F5). Если сеанс исчез — задача решена.
Удаление сеанса откатывает его незавершённую транзакцию. Несохранённые данные в открытых формах этого пользователя пропадут. Если владелец на месте — сначала позвоните ему.
Кластер может быть защищён паролем администратора. Консоль спросит его при подключении. Если пароль потерян — не пересоздавайте кластер: обратитесь к администратору сервера или восстановите настройки кластера из резервной копии при остановленной службе.
Сеанс удалился, но через минуту появился снова
Так ведёт себя клиент, который ещё жив: тонкий клиент сам переподключается после разрыва. Удалённый сеанс конфигуратора или пользователя, у которого 1С открыта в терминале, тоже вернётся. Решение — закрыть само приложение на компьютере пользователя или временно запретить новые сеансы (раздел 3).
3. Монопольный режим и запрет новых входов
Монопольный доступ к базе нужен для обновления конфигурации базы данных, загрузки .dt, тестирования и исправления. Пока в базе есть хоть один сеанс — даже фоновый, — Конфигуратор его не получит. Удалять сеансы по одному бесполезно, если пользователи тут же заходят обратно.
Правильная последовательность:
- В консоли откройте свойства информационной базы (правый клик по базе →
Свойства). - Включите флажок «Блокировка начала сеансов включена».
- Задайте сообщение для пользователей и «Код разрешения», например
upd77. - Включите «Блокировка регламентных заданий включена» — иначе фоновые задания будут стартовать снова.
- Сохраните свойства и удалите оставшиеся сеансы в узле
Сеансы. - Запустите Конфигуратор с параметром
/UCи кодом, например:
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /S"srv1c\buh" /UCupd77
После работ снимите оба флажка. Забытая «Блокировка регламентных заданий» — частая причина того, что потом неделями не загружаются банковские выписки и не обновляются курсы валют.
В конфигурациях на БСП то же самое делает сама программа: Администрирование → Обслуживание → Блокировка работы пользователей. Обработка ставит блокировку и сама завершает сеансы. Для клиент-серверной базы она попросит логин и пароль администратора кластера, если он задан.
4. Как завершить зависший сеанс через rac из командной строки
rac — консольная утилита из папки bin платформы. Она работает через сервер администрирования ras, который должен быть запущен (по умолчанию порт 1545). Удобно, когда консоль не открывается, работы ведутся на Linux или нужен скрипт по расписанию.
Запуск ras, если он не установлен службой:
cd "C:\Program Files\1cv8\8.3.24.1548\bin"
ras cluster --daemon
Дальше — по шагам:
rem 1. Узнать идентификатор кластера
rac localhost:1545 cluster list
rem 2. Узнать идентификатор базы
rac localhost:1545 infobase summary list --cluster=<cluster-uuid>
rem 3. Список сеансов этой базы
rac localhost:1545 session list --cluster=<cluster-uuid> --infobase=<infobase-uuid>
rem 4. Завершить конкретный сеанс
rac localhost:1545 session terminate --cluster=<cluster-uuid> --session=<session-uuid>
Если на кластере есть администратор, добавьте к командам --cluster-user=<имя> --cluster-pwd=<пароль>.
В выводе session list ориентируйтесь на поля:
| Поле | Что показывает |
|---|---|
user-name, host | пользователь и компьютер |
app-id | приложение: клиент, конфигуратор, фоновое задание, COM |
started-at, last-active-at | начало сеанса и последняя активность |
blocked-by-dbms, blocked-by-ls | ждёт ли сеанс блокировку СУБД или управляемую блокировку 1С |
Полный список подкоманд и ключей выдаёт rac help и rac help session.
Автоматическая чистка по расписанию
Для терминальных серверов, где пользователи бросают сеансы на ночь, удаление часто вешают на планировщик. Но лучше вообще обойтись без скрипта: в свойствах информационной базы есть параметры «Засыпание пассивного сеанса» и «Завершение спящего сеанса» (в секундах). Пассивный сеанс засыпает, отпускает лицензию, а через заданное время завершается сам. Значения порядка 1200 и 86400 секунд — разумный старт для бухгалтерии.
5. Технологический журнал: почему сеансы виснут снова и снова
Если зависания повторяются, удаление лечит симптом. Причину покажут журнал регистрации и технологический журнал.
Журнал регистрации (Главное меню → Функции для технического специалиста → Стандартные → Журнал регистрации) отберите по номеру сеанса. Последние события перед зависанием подскажут, какой документ или обработка работали.
Технологический журнал включается файлом 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>
<event><eq property="name" value="EXCP"/></event>
<property name="all"/>
</log>
</config>
Что искать в логах:
- 🔒
TTIMEOUT— сеанс не дождался управляемой блокировки. У пользователя это ошибкаПревышено максимальное время ожидания предоставления блокировки. В событии указан сеанс-виновник, который держал данные. - ♻️
TDEADLOCK— взаимоблокировка, у пользователяКонфликт блокировок при выполнении транзакции. - ❗
EXCP— исключения рабочего процесса, в том числе обрывы соединений.
Учётная запись службы сервера 1С (обычно USR1CV8) должна иметь право записи в папку журнала. Включайте сбор на час-два, пока ловите проблему: при <property name="all"/> логи растут на гигабайты. После — удалите или переименуйте logcfg.xml, платформа перечитает настройку сама в течение минуты.
6. Если 1С-сеанс не удаляется: блокировки в MS SQL и PostgreSQL
Бывает, что сеанс в консоли удалён, а запрос в СУБД продолжает выполняться и держит таблицы. Или сеанс не удаляется вовсе, потому что рабочий процесс ждёт ответа от СУБД. Тогда смотрят на стороне базы данных. Номер соединения СУБД у сеанса виден в поле db-proc-info вывода rac session list, если сеанс сейчас выполняет запрос.
Microsoft SQL Server — кто кого блокирует:
SELECT r.session_id, r.blocking_session_id, r.wait_type,
r.wait_time, s.host_name, s.program_name, t.text
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.blocking_session_id <> 0;
Головной блокировщик — тот blocking_session_id, который сам ни от кого не ждёт. Завершить его: KILL <номер>.
PostgreSQL:
SELECT pid, pg_blocking_pids(pid) AS blocked_by, state,
now() - xact_start AS tx_age, left(query, 100) AS query
FROM pg_stat_activity
WHERE datname = 'buh' AND state <> 'idle'
ORDER BY xact_start;
Сначала мягко: SELECT pg_cancel_backend(<pid>); — отменяет текущий запрос. Не помогло — SELECT pg_terminate_backend(<pid>); закрывает соединение.
Убивайте процесс СУБД только после попытки удалить сеанс в консоли 1С. Завершение откатывает транзакцию; откат большой транзакции может идти дольше, чем она выполнялась. Данные остаются целостными, но пользователь потеряет результат проведения.
7. Крайние меры: рабочий процесс и служба сервера
Если сеансы не удаляются ни консолью, ни через СУБД, проблема в самом рабочем процессе rphost. Действуйте по нарастающей:
| Мера | Когда | Чем рискуете |
|---|---|---|
Удаление сеанса в консоли или rac | всегда первым шагом | данные в открытых формах одного пользователя |
| Отмена запроса в СУБД | сеанс ждёт ответа базы | результат текущей операции |
Завершение процесса rphost | все проблемные сеансы сидят в одном процессе | обрыв всех сеансов этого процесса |
| Перезапуск службы «Агент сервера 1С:Предприятия 8.3» | процессы не реагируют вообще | обрыв всех сеансов всех баз на сервере |
| Очистка кэша сервера | после перезапуска сеансы «воскресают» | то же, плюс время на перестроение кэша |
Список процессов — узел Рабочие процессы в консоли или rac process list --cluster=<cluster-uuid>. Там видно, сколько памяти занимает процесс и сколько у него соединений.
Очистка кэша — известный приём администраторов. Делайте его вечером или в выходной, предупредив всех пользователей: оборвутся все сеансы на сервере.
- Остановите службу агента сервера 1С.
- Убедитесь в диспетчере задач, что процессов
ragent,rmngr,rphostне осталось. - В каталоге
srvinfo\reg_1541удалите папкиsnccntx*— это кэш сеансовых данных. Файлы реестра кластера (1CV8Clst.lst) не трогайте. - Запустите службу и проверьте узел
Сеансы.
После очистки первые запуски баз будут медленнее — платформа заново строит кэш.
Частые вопросы
Освобождается ли лицензия сразу после удаления сеанса?
Можно ли удалить сеанс самого себя?
Чем сеанс отличается от соединения в консоли?
Опасно ли удалять фоновое задание?
Почему в файловой базе нет консоли кластера?
1cv8.exe.