Выгнать пользователя из базы 1С: консоль кластера, блокировка сеансов, rac и SQL

· 10 мин

Содержание

В клиент-серверной базе 1С сеанс пользователя закрывают из консоли администрирования серверов: узел информационной базы → «Сеансы» → правый клик по сеансу → «Удалить». Чтобы пользователь не зашёл обратно через минуту, в свойствах базы включают «Блокировку начала сеансов» с кодом разрешения. В файловой базе консоли нет — там работают механизм блокировки из самой конфигурации, завершение процесса 1cv8.exe и закрытие открытого файла 1Cv8.1CD на сервере.

Методы администрирования идут от мягких, которые дают пользователю сохранить документ, к жёстким, после которых несохранённые данные теряются.

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

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

Начните с диагностики. Сеанс, соединение и рабочий процесс — разные вещи, и от того, что именно «зависло», зависит способ.

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

Консоль ставится вместе с платформой (компонент «Администрирование сервера 1С:Предприятия»). Если при запуске она пустая или ругается на класс, зарегистрируйте библиотеку той же версии, что и сервер, из командной строки от администратора:

regsvr32 "C:\Program Files\1cv8\8.3.24.1586\bin\radmin.dll"

Номер версии в пути подставьте свой. Битность radmin.dll должна совпадать с битностью консоли. После регистрации добавьте центральный сервер (имя или IP, порт агента по умолчанию 1540) и раскройте дерево:

Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы

Что смотреть в списке сеансов

КолонкаЗачем нужна
ПользовательИмя пользователя базы — кого выгонять
КомпьютерС какой машины зашёл (на терминальном сервере — имя сервера)
ПриложениеТонкий клиент, Конфигуратор, фоновое задание, COM-соединение, веб-клиент
Начало работы / Последняя активностьОтличить живой сеанс от брошенного
СпящийСеанс без связи с клиентом, держит лицензию
Блокировки СУБД / Время вызоваПризнак долгого запроса, который мешает остальным

💡 Колонки настраиваются через контекстное меню списка. Добавьте «Время вызова (текущее)» и «Захвачено СУБД (текущее)» — по ним сразу видно, кто прямо сейчас грузит сервер.

Без консоли: из самой базы

В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть обработка «Активные пользователи». Её находят в разделе Администрирование (группа «Обслуживание» или «Поддержка и обслуживание» — зависит от конфигурации). Она показывает список сеансов и в клиент-серверном варианте позволяет завершить выбранный, если у вас есть права администратора базы и, при необходимости, кластера.

В Конфигураторе тот же список открывается через Администрирование → Активные пользователи. Завершать сеансы оттуда нельзя, это только просмотр.

Завершение сеанса в консоли кластера

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

  1. Откройте узел Сеансы нужной базы.
  2. Выделите строку пользователя. Можно выделить несколько с Ctrl или Shift.
  3. Правой кнопкой → «Удалить» (или клавиша Delete).
  4. Подтвердите.

У пользователя появится сообщение о том, что сеанс завершён администратором, клиент закроется. Лицензия освобождается сразу.

Что делать с «Конфигуратором» и фоновыми заданиями

  • 🔹 Конфигуратор удаляется так же, но если в нём шло обновление структуры, база может остаться в промежуточном состоянии. Конфигуратор коллеги сначала выясните, чем он занят.
  • 🔹 Фоновое задание (приложение «Фоновое задание») после удаления может стартовать заново по расписанию через минуту. Чтобы этого не было, сначала блокируйте регламентные задания (см. следующий раздел).
  • 🔹 COM-соединение часто держит внешняя программа: обмен с сайтом, скрипт выгрузки. Удалите сеанс и найдите, кто его открывает, иначе он вернётся.

Если сеанс не удаляется

Бывает, что строка пропадает и через секунду появляется снова, или удаление висит. Обычно сеанс ждёт ответа от СУБД: идёт тяжёлый запрос, и рабочий процесс не может прервать его мгновенно. Подождите одну-две минуты, затем проверьте соединения (узел Соединения) и блокировки базы. Крайняя мера — перезапуск рабочего процесса rphost из узла Рабочие процессы.

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

Блокировка начала сеансов в свойствах базы

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

Настройка в консоли

Правой кнопкой по базе → «Свойства». Нужны поля:

ПолеЧто указать
Блокировка начала сеансов включенаФлажок
Начало / КонецПериод блокировки; пустой конец — до снятия флажка
СообщениеТекст, который увидит пользователь при входе: «Обновление до 20:00»
Код разрешенияЛюбая строка, например upd2210
Блокировка регламентных заданий включенаФлажок, чтобы фоновые задания не стартовали

Окно спросит логин и пароль администратора информационной базы. Если на кластере задан администратор, понадобятся и его учётные данные.

Вход в заблокированную базу по коду разрешения

Администратор заходит, добавив код в параметры запуска:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /UC"upd2210"

Для Конфигуратора — то же с DESIGNER. Код можно вписать и в поле «Дополнительные параметры запуска» в списке баз.

💡 Блокировка не выгоняет тех, кто уже внутри. Порядок такой: включили блокировку → удалили оставшиеся сеансы → сделали работу → сняли флажок.

Блокировка средствами конфигурации

В типовых конфигурациях на БСП есть обработка «Блокировка работы пользователей» (рядом с «Активными пользователями»). Её плюс — пользователи получают предупреждение и несколько минут на сохранение, после чего сеансы закрываются автоматически. И она работает в файловом варианте, где консоли нет.

Файловая база: процесс и открытый файл

В файловом режиме сервера 1С нет, каждый клиент сам открывает 1Cv8.1CD. Выгнать пользователя можно тремя способами.

Способ 1. Блокировка из конфигурации

Описанная выше обработка «Блокировка работы пользователей». Самый безопасный вариант: данные сохраняются, база не повреждается.

Способ 2. Завершить процесс на терминальном сервере

Если пользователи работают через RDP, процесс клиента виден на сервере. В диспетчере задач на вкладке «Пользователи» найдите нужного человека и завершите процесс 1cv8.exe (толстый клиент) или 1cv8c.exe (тонкий). Из командной строки:

taskkill /S TS01 /FI "USERNAME eq ivanova" /IM 1cv8c.exe /F

Ключ /F завершает процесс без вопросов. Без него программа получит запрос на закрытие и может показать диалог «Сохранить изменения?», который никто не нажмёт.

Способ 3. Закрыть файл базы в общей папке

Если база лежит в сетевой папке, а пользователь работает со своего ПК, откройте на файловом сервере compmgmt.msc → «Общие папки» → «Открытые файлы». Найдите 1Cv8.1CD у нужного пользователя, правой кнопкой → «Закрыть открытый файл».

Закрытие файла в момент записи может повредить базу. Перед этим убедитесь, что есть свежая копия, а после — проверьте базу, если пользователь в тот момент проводил документы.

Файл 1Cv8.1CL рядом с базой — файл блокировок. Удалять его при работающих пользователях нельзя. Если все вышли, а база пишет, что занята, проверьте открытые файлы и процессы ещё раз.

Завершение соединения на уровне СУБД

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

Это последнее средство. Рабочий процесс 1С получит ошибку связи с СУБД, транзакция откатится, пользователь увидит ошибку. Делайте это только с правами администратора СУБД и пониманием, какое именно соединение вы рвёте.

Microsoft SQL Server

Найти соединения конкретной базы:

SELECT session_id, login_name, host_name, program_name, status, last_request_start_time
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('buh');

Кто кого блокирует:

SELECT session_id, blocking_session_id, wait_type, wait_time, command
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;

Оборвать соединение:

KILL 87;

Все соединения 1С идут от учётной записи сервера 1С и с хоста сервера 1С, поэтому имя пользователя базы в SQL не видно. Сопоставляйте по номеру соединения СУБД, который показан в консоли кластера в сеансе.

PostgreSQL

SELECT pid, usename, client_addr, state, query_start, left(query, 80)
FROM pg_stat_activity
WHERE datname = 'buh';

SELECT pg_cancel_backend(12345);     -- отменить текущий запрос
SELECT pg_terminate_backend(12345);  -- оборвать соединение

💡 Сначала пробуйте pg_cancel_backend: он отменяет только запрос, соединение живёт. pg_terminate_backend — уже обрыв.

Блокировки и взаимоблокировки: кто кому мешает

Частая причина, по которой администратора просят «выкинуть» человека, — у остальных ошибка:

Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки

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

Где смотреть

  • 🔍 Консоль кластера, узел Блокировки у базы. Видно, какой сеанс держит блокировку и на каком объекте.
  • 🔍 Колонки сеансов «Блокировки СУБД» и «Время вызова»: долгий вызов с захваченными ресурсами — вероятный виновник.
  • 🔍 СУБД: в MS SQL запрос к sys.dm_exec_requests выше покажет цепочку blocking_session_id; в PostgreSQL помогает функция pg_blocking_pids(pid).
  • 🔍 Технологический журнал с событиями TLOCK, TTIMEOUT, TDEADLOCK — если ситуация повторяется и нужно понять причину, а не только снять симптом.

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

Диагностика: выберите симптом

Автоматизация: rac, спящие сеансы и ночные задачи

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

Утилита rac

rac общается с сервером администрирования ras. Его нужно запустить на сервере 1С (порт по умолчанию 1545), например службой или командой ras cluster --daemon в Linux. Базовые команды:

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. Включить блокировку начала сеансов можно командой infobase update с параметрами --sessions-deny=on, --denied-message, --permission-code и --scheduled-jobs-deny=on; для неё нужны логин и пароль администратора базы (--infobase-user, --infobase-pwd). Полный список параметров для вашей версии — в rac help infobase и rac help session.

Типовой ночной сценарий для планировщика:

  1. infobase update — включить блокировку сеансов и регламентных заданий.
  2. session list — получить идентификаторы сеансов базы.
  3. Для каждого — session terminate.
  4. Выгрузка или обновление базы.
  5. infobase update с --sessions-deny=off и --scheduled-jobs-deny=off.

Шаг 5 стоит делать в любом случае, даже если шаг 4 упал. Иначе утром пользователи увидят сообщение о блокировке и позвонят вам.

Спящие сеансы и проблемные процессы

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

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

Когда автоматизация вредит

  • ⏳ Не ставьте завершение спящих сеансов слишком коротким: люди, ушедшие на обед, будут терять открытые формы.
  • ⏳ Не выгоняйте всех по расписанию, если в это время идёт обмен с филиалом или выгрузка в банк: сеанс обмена тоже завершится.
  • ⏳ Проверяйте, что скрипт снимает блокировку при любом исходе.

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

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