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

· 10 мин

Содержание

Закрыть окно 1С на компьютере пользователя недостаточно: сервер ещё какое-то время считает сеанс живым. Именно поэтому база «занята», обновление не стартует, а в списке активных пользователей висит сотрудник, который давно ушёл домой. Чтобы удалить сеанс 1С, откройте консоль администрирования серверов 1С, найдите нужную информационную базу, перейдите в «Сеансы», выделите строку и выберите «Удалить».

Это основной способ для клиент-серверного варианта. Если консоли под рукой нет, есть командная строка (rac), а в крайнем случае — завершение процесса на уровне ОС или СУБД. Ниже все способы идут от безопасного к радикальному, с оговорками, что именно оборвётся у пользователей.

Любое принудительное завершение сеанса теряет несохранённые данные человека, который в нём работал. Если в сеансе шла проводка, загрузка или обмен, их результат под вопросом. Сначала убедитесь, что сеанс действительно завис.

Как понять, что сеанс завис, а не работает

Не каждый «долгий» сеанс подлежит удалению. Прежде чем что-то завершать, посмотрите на три признака.

  • 🕒 Время последней активности. Если сеанс не проявлял активности час и больше, а человек ушёл, это кандидат на удаление. Если время обновляется, сеанс жив.
  • 💻 Тип приложения. Рядом с сеансом указано приложение: тонкий клиент, веб-клиент, фоновое задание, COM-соединение, конфигуратор. Фоновое задание, которое идёт 40 минут, может быть нормальным закрытием месяца.
  • 🔒 Что он держит. В консоли у сеанса есть счётчики: вызовы, объём данных, блокировки СУБД. Рост «в ожидании блокировки» говорит о том, что сеанс кого-то ждёт, а не завис сам.

Позвоните или напишите владельцу сеанса. Две минуты на звонок дешевле, чем потерянный документ на пятьсот строк.

Отдельный случай — фоновые задания. Их сеансы создаёт сам сервер: регламентные задания, обмены, расчёты. Если вы удалите такой сеанс, задание перезапустится или упадёт с ошибкой, а в журнале появится запись об аварийном завершении.

Список сеансов через консоль администрирования

Консоль — это оснастка «Администрирование серверов 1С:Предприятия». Она ставится вместе с платформой на сервере и на рабочем месте администратора. Подключение идёт к агенту сервера: по умолчанию порт 1540, дальше агент сам обращается к менеджеру кластера.

Куда нажимать

  1. Разверните «Центральные серверы 1С:Предприятия» и выберите свой сервер. Если его нет в списке, добавьте через команду создания нового центрального сервера и укажите имя машины.
  2. Раскройте кластер (по умолчанию он называется «Локальный кластер», порт 1541).
  3. Перейдите в «Информационные базы» и откройте нужную базу.
  4. Выберите узел «Сеансы». Справа появится таблица.

В таблице есть пользователь, компьютер, приложение, время начала, время последней активности и счётчики. Отсортируйте по последней активности, чтобы зависшие сеансы оказались вверху.

Узел «Соединения» рядом — это более низкий уровень: сетевые подключения клиентов к рабочим процессам. Один сеанс может использовать несколько соединений. Для обычной задачи «убрать пользователя» достаточно сеансов.

Если консоли нет

Консоль может не открыться по двум причинам. Первая: не зарегистрирована библиотека radmin.dll. Её нужно перерегистрировать командой regsvr32 от имени администратора, указав полный путь к файлу в каталоге bin установленной платформы. Вторая: версия консоли не соответствует версии сервера. Берите консоль той же платформы, что и сервер, или новее.

Как удалить сеанс 1С в консоли

Когда нужный сеанс найден, действуйте так.

  1. Выделите строку сеанса правой кнопкой мыши.
  2. Выберите «Удалить». Подтвердите вопрос.
  3. Обновите список (F5). Сеанс должен исчезнуть.

Можно выделить несколько строк с Ctrl и удалить пачкой. Этим удобно пользоваться после сбоя сети: у пользователей на сервере остаётся десяток «хвостов».

Если сеанс не исчез после обновления, он завис глубже, чем обычный клиентский вызов. Подождите минуту: сервер завершает сеанс не мгновенно, особенно если тот выполняет длинный запрос к СУБД. Если запрос идёт долго, сеанс закроется только после его окончания.

Перед обновлением конфигурации или загрузкой .dt не удаляйте сеансы по одному. Включите запрет на подключение новых пользователей в свойствах информационной базы (в консоли — флажок блокировки начала сеансов) и добавьте текст сообщения для тех, кто пытается войти. Затем удалите оставшиеся сеансы одним действием.

Блокировка начала сеансов

Без блокировки есть риск, что пользователь сразу переподключится. Пока флажок включён, новые сеансы не создаются. Параметр лежит в свойствах информационной базы в консоли. Можно задать период действия блокировки, сообщение и код разрешения для входа. С кодом разрешения вы сами зайдёте в базу, когда остальные заблокированы: ключ /UC в строке запуска.

Не забудьте снять блокировку после работ. Типичная жалоба «все вылетели и никто не может войти» после ночного обновления — это забытый флажок.

Утилита rac: удаление из командной строки

Для серверов без графической оболочки и для автоматизации служит утилита rac. Она лежит в каталоге bin платформы рядом с ras — сервером администрирования. Путь вида C:\Program Files\1cv8\<версия>\bin\.

Утилиты с названием rmninfobase в поставке платформы нет. Если вам встретилось такое имя в чужой инструкции, работайте с rac: с ним те же операции делаются штатно.

Шаг 1. Запустите сервер администрирования

rac общается не с кластером напрямую, а через сервер администрирования ras. Его запускают на машине, где работает сервер 1С:

ras cluster --port=1545 localhost:1540

Окно с запущенной командой оставьте открытым либо оформите ras службой. Порт 1545 — стандартный для ras, 1540 — порт агента сервера.

Шаг 2. Найдите кластер и сеанс

rac localhost:1545 cluster list
rac localhost:1545 session list --cluster=<идентификатор_кластера>

Первая команда выведет идентификатор (длинный UUID) кластера. Вторая покажет сеансы блоками: идентификатор сеанса, имя пользователя, компьютер, время начала, время последней активности. Чтобы увидеть лицензии, которые заняты сеансом, добавьте ключ --licenses: rac session list --licenses.

Идентификатор информационной базы выводится в том же блоке. Список баз показывает rac infobase summary list. Если не уверены в параметрах какой-то команды, смотрите встроенную справку: rac help и rac help session.

Шаг 3. Завершите сеанс

rac localhost:1545 session terminate --cluster=<кластер> --session=<сеанс>

После выполнения повторите session list. Команда отрабатывает без подтверждения, поэтому проверьте UUID дважды: перепутанный символ не страшен, а вот удалённый не тот сеанс сотрудника — неприятен.

Таблица: консоль или rac

СпособКогда использоватьРиски
Консоль администрированияРазовая чистка, есть графическая средаСлучайно выделить не ту строку
rac вручнуюСервер без GUI, удалённый доступ по SSH или RDPОшибка в идентификаторе
rac по расписаниюРегулярные «хвосты» после обрывовУдалит живой сеанс, если фильтр слишком широкий
Завершение процесса rphostСеанс не удаляется ни одним способомОбрываются все сеансы этого процесса
Завершение сессии в СУБДЗапрос завис в СУБДОткат транзакции, возможна рассинхронизация

Что пишет журнал регистрации и зачем его смотреть

Удалили сеанс — хорошо. Но если он зависает раз в неделю, проблему надо искать. Для этого есть журнал регистрации: в клиенте — «Администрирование → Журнал регистрации» (в разделе поддержки и обслуживания), в Конфигураторе — «Администрирование → Журнал регистрации».

Что смотреть:

  • 📌 В отборе укажите период вокруг времени зависания и конкретного пользователя.
  • 📌 События группы «Сеанс»: начало, завершение, аутентификация. По ним видно, когда человек зашёл и был ли он отключён принудительно.
  • 📌 Уровни «Ошибка» и «Предупреждение» за те же минуты. Часто перед зависанием стоит ошибка проведения документа или «Превышено время ожидания блокировки».
  • 📌 Записи фоновых заданий. Если сеанс — это регламентное задание, в журнале видно, что оно делало последним.

Журнал регистрации показывает уровень приложения. Когда проблема глубже — зависший запрос, нехватка памяти у рабочего процесса — понадобится технологический журнал или данные СУБД. Но в половине обычных случаев причина находится в первом же сообщении об ошибке перед зависанием.

Типичные причины зависших сеансов

  • Обрыв сети или Wi-Fi у клиента во время длительной операции.
  • Пользователь выключил компьютер кнопкой, не закрыв 1С.
  • Внешняя обработка или COM-соединение, которое не освободило объект.
  • Долгий запрос или обход справочника в цикле на сервере.
  • Ожидание блокировки, которую удерживает другой сеанс.

Если обрывы сети повторяются, настройте время ожидания клиента и проверьте, не рвёт ли соединение файрвол или VPN. Удалять сеансы вручную каждую неделю — это лечение симптома.

Когда удаление через консоль не помогает: блокировки на уровне СУБД

Бывает так: сеанс в консоли удалён, а база всё равно «тормозит» или не отдаёт блокировку. Значит, транзакция в СУБД ещё не закрыта.

Порядок действий:

  1. Посмотрите в консоли на счётчики блокировок и убедитесь, что сеанс действительно исчез.
  2. Подождите. Откат большой транзакции занимает время, и сервер СУБД ничего не «завершает» мгновенно.
  3. Если ожидание затянулось, найдите зависшую сессию средствами самой СУБД и завершите её.

Для PostgreSQL список активных запросов даёт представление pg_stat_activity, а завершить серверный процесс можно функцией pg_terminate_backend(pid). В Microsoft SQL Server смотрят sp_who2 или динамические представления, а завершают командой KILL. Подключайтесь к СУБД под учётной записью администратора и работайте только с сессиями базы 1С.

Завершение сессии в СУБД откатывает текущую транзакцию. Если пользователь успел записать часть данных, они не сохранятся. Завершайте только ту сессию, в которой точно уверены, и не трогайте служебные процессы СУБД.

Остановку рабочего процесса rphost оставьте на самый крайний случай. Он обслуживает сразу несколько сеансов, и их все сервер оборвёт. Делайте это вне рабочего времени либо предупредив всех, кто в базе.

Что делать, если сеанс не удаляется?

Автоматизация: мониторинг и очистка сеансов

Если «хвосты» появляются каждый день, их можно чистить скриптом. Идея простая: получить список сеансов, отобрать подходящие по пользователю или давности и завершить.

Пример на PowerShell, который завершает все сеансы заданного пользователя. Путь к rac и имя пользователя подставьте свои:

$rac = "C:\Program Files\1cv8\<версия>\bin\rac.exe"
$srv = "localhost:1545"
$user = "Иванов"

$cl = ((& $rac $srv cluster list) | Select-String '^cluster\s*:\s*(\S+)').Matches[0].Groups[1].Value
$text = (& $rac $srv session list --cluster=$cl) -join "`n"
$blocks = $text -split "`n\s*`n"

foreach ($b in $blocks) {
    if ($b -match "(?m)^user-name\s*:\s*$user" -and $b -match "(?m)^session\s*:\s*(\S+)") {
        & $rac $srv session terminate --cluster=$cl --session=$Matches[1]
    }
}

Скрипт предполагает один кластер на сервере. Русские имена пользователей в консольном выводе иногда приходят в другой кодировке — проверьте на тестовой базе, прежде чем запускать по расписанию.

Что стоит добавить в рабочую версию:

  • ✅ Отбор по давности: завершать только сеансы, у которых время последней активности старше заданного порога.
  • ✅ Исключение фоновых заданий и служебных пользователей (обмены, роботы).
  • ✅ Запись в лог: кого и когда завершили. Без лога разбор жалоб превращается в гадание.
  • ✅ Запуск через планировщик заданий Windows или cron ночью, а не в рабочие часы.

Для мониторинга хватает простого варианта: раз в 5-10 минут сохранять число сеансов и сравнивать с числом лицензий. Резкий рост при той же численности работающих сотрудников — признак накопившихся «хвостов».

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

Как не доводить до зависших сеансов

Часть причин лечится настройкой, а не удалением.

  • 🔧 Держите платформу и конфигурацию в актуальных релизах: многие зависания — это исправленные ошибки.
  • 🔧 Выносите тяжёлые отчёты и закрытие периода на ночь, а не в разгар работы.
  • 🔧 Не допускайте, чтобы сотрудники оставляли открытые сеансы на ночь: настройте завершение неактивных сеансов по таймауту там, где это допустимо политикой компании.
  • 🔧 Контролируйте качество сети между клиентом и сервером. Частые микрообрывы даёт плохой Wi-Fi или нагруженный VPN.
  • 🔧 Проверяйте внешние обработки и COM-подключения: они чаще всего оставляют висящие соединения.

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

Можно ли удалить сеанс в файловой базе?
Консоли администрирования у файловой базы нет, сервер кластера не участвует. Попросите владельца закрыть 1С. Если сеанс не закрывается, завершите процесс 1cv8 на его компьютере через диспетчер задач.
Потеряет ли пользователь данные при удалении сеанса?
Несохранённые данные из открытых форм потеряются. Уже записанные в базу документы и справочники останутся, но проведение, которое шло в момент удаления, откатится.
Чем сеанс отличается от соединения?
Сеанс — это работа пользователя в информационной базе. Соединение — сетевое подключение клиента к процессу сервера. У одного сеанса может быть несколько соединений.
Почему удалённый сеанс возвращается?
Клиент автоматически переподключился, либо его создаёт регламентное задание. Включите блокировку начала сеансов и проверьте, кто запускает задание.
Нужны ли права, чтобы удалять сеансы?
Да. В консоли нужно быть администратором кластера или иметь доступ к информационной базе с правами администрирования. При ошибке доступа укажите учётные данные администратора кластера.