Зависший сеанс держит базу 1С: как его найти и завершить без перезагрузки сервера

· 9 мин

Содержание

Зависшее соединение в клиент-серверной 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С

Консоль администрирования

  1. Откройте Информационные базы → нужная база → Сеансы.
  2. Выделите сеанс. Можно несколько через Ctrl.
  3. Правая кнопка → Удалить.
  4. Если кластер защищён паролем администратора, консоль его спросит.

После удаления клиент получит сообщение о том, что сеанс завершён администратором. Несохранённые данные в открытых формах пропадут, незавершённая транзакция откатится.

Сеанс удалили, а в узле «Соединения» запись осталась? Откройте Рабочие процессы → процесс → Соединения и удалите соединение там. Обычно оно исчезает само в течение минуты, но при сетевых сбоях может задержаться.

Утилита 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. Попросите всех закрыть 1С.
  2. На компьютере, где осталась программа, завершите её процесс в диспетчере задач.
  3. Если компьютер недоступен, зайдите на сервер, где лежит папка с базой: Управление компьютером → Общие папки → Открытые файлы.
  4. Найдите 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'])
    }
}

Что важно при внедрении:

  1. Запускайте скрипт на сервере, где работает RAS.
  2. Добавьте --cluster-user и --cluster-pwd, если у кластера есть администратор. Пароль храните не в тексте скрипта, а в защищённом хранилище учётных данных.
  3. Сначала прогоните скрипт неделю без строки terminate, только с записью в журнал. Так станет видно, кого он затронет.
  4. Ставьте запуск на ночь или на обед, а не каждые 5 минут в рабочее время.

Условие легко поменять: например, завершать сеансы с приложением «Конфигуратор» старше 12 часов или сеансы конкретного компьютера.

Перед удалением чужого сеанса
Выполнено: 0 / 5

Как сделать, чтобы сеансы не зависали

Удаление снимает симптом. Чтобы зависших сеансов стало меньше, настройте сервер.

Таймауты спящих сеансов

В свойствах информационной базы в консоли кластера есть два параметра:

  • ⏳ Засыпание пассивного сеанса — через сколько секунд неактивный сеанс без связи с клиентом становится спящим;
  • 🛑 Завершение спящего сеанса — через сколько секунд спящий сеанс удаляется автоматически.

По умолчанию сеанс может спать долго. Для офиса, где люди уходят домой и выключают компьютеры, разумно завершать спящий сеанс примерно через 1–2 часа, то есть 3600–7200 секунд. Сеанс, проспавший столько, к пользователю уже не вернётся.

Перезапуск рабочих процессов

В свойствах кластера задаются интервал перезапуска рабочих процессов и допустимый объём памяти. Процесс, перешедший порог памяти, сервер перезапустит, а сеансы перенесёт на новый процесс. Это лечит утечки, из-за которых сеансы со временем начинают «залипать».

Слишком маленький интервал перезапуска или порог памяти даст обратный эффект: процессы будут перезапускаться посреди рабочего дня, а пользователи — получать ошибки соединения. Меняйте эти значения постепенно и смотрите на поведение сервера несколько дней.

Что ещё уменьшает число зависаний

  • 🌐 Стабильная сеть до сервера 1С. Пользователи через VPN или мобильный интернет дают больше всего спящих сеансов.
  • 🖥 Терминальный сервер вместо подключения издалека по медленному каналу.
  • 📦 Одинаковая версия клиента и сервера 1С. Расхождение версий порождает ошибки подключения.
  • ⏱ Регламентные задания по расписанию в нерабочее время, а не одновременно с людьми.
  • 🔄 Обновление платформы : в новых сборках исправляют ошибки, из-за которых процессы зависают.

Если зависания идут от одного компьютера или одного пользователя, проблема почти всегда локальная: сеть, антивирус, сон ноутбука. Тогда сначала разберитесь с этим рабочим местом.

Частые вопросы

Освободится ли лицензия после удаления зависшего сеанса?
Да. Лицензию занимает сеанс, и после его завершения она возвращается в пул. Проверить, кто занимает лицензии, можно командой rac session list --licenses.
Чем сеанс отличается от соединения?
Сеанс — это работа пользователя с базой: его права, открытые формы, блокировки. Соединение — канал связи клиента с рабочим процессом. Сеанс может временно жить без соединения: так и появляются спящие сеансы.
Можно ли удалить свой собственный сеанс из консоли?
Можно, но консоль не связана с сеансом 1С, из которого вы работаете в базе. Удалив его, вы просто выбросите себя из программы и потеряете несохранённые данные.
Почему удалённый сеанс через минуту появляется снова?
Пользователь или служба переподключается автоматически: это может быть открытая у человека программа, фоновое задание по расписанию или внешняя система через COM или веб-сервис. Запретите вход на время работ и проверьте расписание регламентных заданий.
Нужен ли пароль администратора кластера для удаления сеансов?
Если администратор кластера задан — да, и в консоли, и в rac, и в форме «Активные пользователи». Если пароль потерян, его не сбрасывают удалением настроек: файлы кластера восстанавливают из резервной копии при остановленной службе либо обращаются к тому, кто настраивал сервер.