Зависший сеанс держит базу 1С: как его найти и завершить без перезагрузки сервера
Содержание
Зависшее соединение в клиент-серверной 1С 8.3 удаляют в консоли администрирования серверов: Кластеры → ваш кластер → Информационные базы → база → Сеансы, правой кнопкой по сеансу → Удалить. Без консоли то же делает утилита rac: rac session terminate. В файловой базе кластера нет, там завершают процесс 1cv8.exe или закрывают открытый файл 1Cv8.1CD на сервере, где лежит база.
Сеанс удаляют не ради порядка в списке. Висящий сеанс занимает лицензию, держит блокировки данных и не даёт установить монопольный режим для обновления. Пользователь, который «уже вышел», для 1С может всё ещё работать.
Где видно, какой сеанс завис
Консоль администрирования ставится вместе с сервером 1С. Если в меню «Пуск» её ярлык не открывается или выдаёт ошибку создания объекта, зарегистрируйте библиотеку консоли от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\radmin.dll"
Номер версии подставьте свой: он должен совпадать с версией сервера, к которому подключаетесь. После регистрации добавьте центральный сервер (имя или IP, порт агента 1540) и раскройте дерево.
У информационной базы в консоли три полезных узла:
- 👤 Сеансы — кто работает: пользователь, компьютер, приложение, время начала и последней активности.
- 🔌 Соединения — физические подключения клиентов к рабочему процессу.
- 🔒 Блокировки — какие объекты и таблицы держит каждый сеанс.
Признаки зависшего сеанса
| Признак в консоли | Что это обычно значит |
|---|---|
| «Спящий» = Да | Клиент потерял связь с сервером, сеанс ждёт его возвращения |
| Последняя активность час назад и больше, а пользователь говорит, что вышел | Клиент закрылся аварийно, сеанс остался |
| Приложение «Конфигуратор» у человека, который его не открывал | Конфигуратор упал или свёрнут на чужом компьютере |
| Сеанс «Фоновое задание» висит часами | Задание зациклилось или ждёт блокировку |
| Много записей в узле «Блокировки» у одного сеанса | Он держит данные, другие пользователи ждут |
Отсортируйте сеансы по колонке времени последней активности. Самые старые — первые кандидаты. Прежде чем удалять, позвоните пользователю: если он проводит закрытие месяца , удаление оборвёт операцию.
Завершаем сеанс средствами самой 1С
Консоль администрирования
- Откройте
Информационные базы → нужная база → Сеансы. - Выделите сеанс. Можно несколько через
Ctrl. - Правая кнопка →
Удалить. - Если кластер защищён паролем администратора, консоль его спросит.
После удаления клиент получит сообщение о том, что сеанс завершён администратором. Несохранённые данные в открытых формах пропадут, незавершённая транзакция откатится.
Сеанс удалили, а в узле «Соединения» запись осталась? Откройте Рабочие процессы → процесс → Соединения и удалите соединение там. Обычно оно исчезает само в течение минуты, но при сетевых сбоях может задержаться.
Утилита rac из командной строки
Консоль нужна не всегда: на сервере без графической оболочки или в скрипте удобнее rac. Она работает через службу RAS, которую надо запустить один раз:
ras cluster --daemon
По умолчанию RAS слушает порт 1545 и сам подключается к агенту на этом же компьютере. Дальше порядок такой:
rac cluster list
rac infobase summary list --cluster=<uuid-кластера>
rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
Если у кластера задан администратор, добавьте к командам --cluster-user и --cluster-pwd. В выводе session list смотрите поля user-name, host, app-id, hibernate и last-active-at. Полный список параметров для вашей версии покажет rac help session.
Для соединений есть свой набор команд: rac connection list и rac connection disconnect. Они требуют идентификатор рабочего процесса, который берут из rac process list.
Список активных пользователей в программе
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть форма «Активные пользователи». Найти её проще всего поиском по меню. Из неё можно завершить чужой сеанс, но в клиент-серверном варианте программа попросит параметры администрирования кластера. Без пароля администратора кластера через эту форму ничего не удалится.
Монопольный режим и блокировки данных
Чаще всего зависший сеанс ищут, когда нужно обновить конфигурацию , а 1С отвечает, что монопольный режим установить нельзя. Удалять сеансы по одному здесь бесполезно: пользователи заходят снова. Сначала запретите вход, потом чистите.
Запрет новых сеансов
Вариант 1. В консоли кластера. Откройте свойства базы и заполните:
- ✅ «Блокировка начала сеансов включена»;
- 🕐 начало и конец блокировки;
- 💬 сообщение, которое увидят пользователи;
- 🔑 код разрешения.
С кодом разрешения в базу пускают только вас: запускайте 1С с параметром /UC<код>, например /UCservice. Без кода вход закрыт.
Вариант 2. В самой конфигурации. В типовых на БСП это форма «Блокировка работы пользователей» в разделе Администрирование → Обслуживание. Она тоже ставит запрет на вход и мягко завершает активные сеансы: сначала предупреждает пользователей, затем закрывает их сеансы.
Не забудьте снять блокировку после работ. Иначе утром ни один бухгалтер не войдёт, а сообщение об ошибке будет выглядеть как поломка базы.
Сеанс держит блокировку, другие ждут
Если пользователи жалуются, что документ не проводится и программа долго думает, загляните в узел «Блокировки». Там видно, какой сеанс держит таблицу или запись. Отдельно снять одну блокировку из консоли нельзя: удаляется сеанс-владелец, и его блокировки освобождаются вместе с откатом транзакции.
| Ситуация | Что сделать |
|---|---|
| Нужно обновить конфигурацию | Запрет входа → удаление всех сеансов → работа с кодом /UC |
| Один сеанс держит блокировку | Удалить только этот сеанс |
| Завис Конфигуратор, конфигурация захвачена | Удалить сеанс с приложением «Конфигуратор» |
| Фоновое задание висит | Удалить сеанс задания, затем проверить его расписание |
Файловая база: кластера нет, а соединение висит
В файловом варианте консоль не поможет. Каждое подключение — это процесс 1cv8.exe или 1cv8c.exe на компьютере пользователя, который открыл файл 1Cv8.1CD.
- Попросите всех закрыть 1С.
- На компьютере, где осталась программа, завершите её процесс в диспетчере задач.
- Если компьютер недоступен, зайдите на сервер, где лежит папка с базой:
Управление компьютером → Общие папки → Открытые файлы. - Найдите
1Cv8.1CDи закройте его у нужного пользователя.
После этого исчезнет и файл блокировки 1Cv8.1CL в каталоге базы. Удалять его вручную, пока процесс жив, не нужно.
Закрытие файла на сервере обрывает работу пользователя без сохранения. Если в этот момент шла запись, файловая база может потребовать проверки через «Тестирование и исправление». Делайте это, когда человек точно не работает, и при наличии свежей копии.
Когда приходится идти в СУБД: MS SQL и PostgreSQL
Это крайняя мера. Сервер 1С держит к СУБД собственные подключения от рабочих процессов, и они не совпадают один к одному с сеансами пользователей. Убить соединение в СУБД имеет смысл в двух случаях:
- сеанс в 1С уже удалён, а запрос в базе данных продолжает выполняться и держит блокировку;
- в СУБД видны подключения к базе от посторонних программ: отчётных систем, скриптов выгрузки.
MS SQL Server
Найти подключения к базе и тех, кто кого блокирует:
SELECT s.session_id, s.login_name, s.host_name, s.program_name,
r.status, r.blocking_session_id, r.wait_type, r.start_time
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');
Ненулевой blocking_session_id показывает виновника. Завершить подключение:
KILL 87;
Здесь 87 — номер из колонки session_id. Откат большой транзакции после KILL может идти долго. Его прогресс покажет KILL 87 WITH STATUSONLY;.
PostgreSQL
SELECT pid, usename, application_name, client_addr, state,
query_start, wait_event_type, left(query, 80) AS query
FROM pg_stat_activity
WHERE datname = 'buh_base'
ORDER BY query_start;
Сначала попробуйте отменить только текущий запрос, а не всё подключение:
SELECT pg_cancel_backend(12345);
Не помогло — завершите подключение целиком:
SELECT pg_terminate_backend(12345);
Кто кого блокирует, покажет функция pg_blocking_pids(pid): добавьте её в запрос к pg_stat_activity.
Не завершайте подключения в СУБД массово. Рабочий процесс 1С, у которого оборвали соединение, вернёт ошибку всем сеансам, которые через него работали. Пострадают люди, к зависанию не причастные. Завершайте только конкретный session_id или pid и только в нерабочее время, если это возможно.
Скрипт, который чистит спящие сеансы сам
Если зависшие сеансы появляются регулярно, ручную чистку можно поручить планировщику Windows. Пример на PowerShell: он находит кластер, проходит по всем сеансам и завершает те, у которых hibernate равно yes.
$rac = 'C:\Program Files\1cv8\8.3.xx.xxxx\bin\rac.exe'
$cluster = ((& $rac cluster list | Select-String '^cluster\s*:' |
Select-Object -First 1).ToString() -split ':', 2)[1].Trim()
$raw = (& $rac session list --cluster=$cluster) -join "`n"
$blocks = $raw -split "`n\s*`n"
foreach ($block in $blocks) {
$s = @{}
foreach ($line in $block -split "`n") {
if ($line -match '^\s*([\w-]+)\s*:\s*(.*)$') {
$s[$matches[1]] = $matches[2].Trim()
}
}
if ($s['hibernate'] -eq 'yes') {
"{0} {1} {2}" -f (Get-Date), $s['user-name'], $s['host'] |
Add-Content 'C:\Scripts\killed_sessions.log'
& $rac session terminate --cluster=$cluster --session=$($s['session'])
}
}
Что важно при внедрении:
- Запускайте скрипт на сервере, где работает RAS.
- Добавьте
--cluster-userи--cluster-pwd, если у кластера есть администратор. Пароль храните не в тексте скрипта, а в защищённом хранилище учётных данных. - Сначала прогоните скрипт неделю без строки
terminate, только с записью в журнал. Так станет видно, кого он затронет. - Ставьте запуск на ночь или на обед, а не каждые 5 минут в рабочее время.
Условие легко поменять: например, завершать сеансы с приложением «Конфигуратор» старше 12 часов или сеансы конкретного компьютера.
Как сделать, чтобы сеансы не зависали
Удаление снимает симптом. Чтобы зависших сеансов стало меньше, настройте сервер.
Таймауты спящих сеансов
В свойствах информационной базы в консоли кластера есть два параметра:
- ⏳ Засыпание пассивного сеанса — через сколько секунд неактивный сеанс без связи с клиентом становится спящим;
- 🛑 Завершение спящего сеанса — через сколько секунд спящий сеанс удаляется автоматически.
По умолчанию сеанс может спать долго. Для офиса, где люди уходят домой и выключают компьютеры, разумно завершать спящий сеанс примерно через 1–2 часа, то есть 3600–7200 секунд. Сеанс, проспавший столько, к пользователю уже не вернётся.
Перезапуск рабочих процессов
В свойствах кластера задаются интервал перезапуска рабочих процессов и допустимый объём памяти. Процесс, перешедший порог памяти, сервер перезапустит, а сеансы перенесёт на новый процесс. Это лечит утечки, из-за которых сеансы со временем начинают «залипать».
Слишком маленький интервал перезапуска или порог памяти даст обратный эффект: процессы будут перезапускаться посреди рабочего дня, а пользователи — получать ошибки соединения. Меняйте эти значения постепенно и смотрите на поведение сервера несколько дней.
Что ещё уменьшает число зависаний
- 🌐 Стабильная сеть до сервера 1С. Пользователи через VPN или мобильный интернет дают больше всего спящих сеансов.
- 🖥 Терминальный сервер вместо подключения издалека по медленному каналу.
- 📦 Одинаковая версия клиента и сервера 1С. Расхождение версий порождает ошибки подключения.
- ⏱ Регламентные задания по расписанию в нерабочее время, а не одновременно с людьми.
- 🔄 Обновление платформы : в новых сборках исправляют ошибки, из-за которых процессы зависают.
Если зависания идут от одного компьютера или одного пользователя, проблема почти всегда локальная: сеть, антивирус, сон ноутбука. Тогда сначала разберитесь с этим рабочим местом.
Частые вопросы
Освободится ли лицензия после удаления зависшего сеанса?
rac session list --licenses.Чем сеанс отличается от соединения?
Можно ли удалить свой собственный сеанс из консоли?
Почему удалённый сеанс через минуту появляется снова?
Нужен ли пароль администратора кластера для удаления сеансов?
rac, и в форме «Активные пользователи». Если пароль потерян, его не сбрасывают удалением настроек: файлы кластера восстанавливают из резервной копии при остановленной службе либо обращаются к тому, кто настраивал сервер.