Выгнать пользователя из базы 1С: консоль кластера, блокировка сеансов, rac и SQL
Содержание
В клиент-серверной базе 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) есть обработка «Активные пользователи». Её находят в разделе Администрирование (группа «Обслуживание» или «Поддержка и обслуживание» — зависит от конфигурации). Она показывает список сеансов и в клиент-серверном варианте позволяет завершить выбранный, если у вас есть права администратора базы и, при необходимости, кластера.
В Конфигураторе тот же список открывается через Администрирование → Активные пользователи. Завершать сеансы оттуда нельзя, это только просмотр.
Завершение сеанса в консоли кластера
Самый частый сценарий: бухгалтер ушёл домой с открытой базой, а вам нужно обновить конфигурацию .
- Откройте узел
Сеансынужной базы. - Выделите строку пользователя. Можно выделить несколько с Ctrl или Shift.
- Правой кнопкой → «Удалить» (или клавиша Delete).
- Подтвердите.
У пользователя появится сообщение о том, что сеанс завершён администратором, клиент закроется. Лицензия освобождается сразу.
Что делать с «Конфигуратором» и фоновыми заданиями
- 🔹 Конфигуратор удаляется так же, но если в нём шло обновление структуры, база может остаться в промежуточном состоянии. Конфигуратор коллеги сначала выясните, чем он занят.
- 🔹 Фоновое задание (приложение «Фоновое задание») после удаления может стартовать заново по расписанию через минуту. Чтобы этого не было, сначала блокируйте регламентные задания (см. следующий раздел).
- 🔹 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.
Типовой ночной сценарий для планировщика:
infobase update— включить блокировку сеансов и регламентных заданий.session list— получить идентификаторы сеансов базы.- Для каждого —
session terminate. - Выгрузка или обновление базы.
infobase updateс--sessions-deny=offи--scheduled-jobs-deny=off.
Шаг 5 стоит делать в любом случае, даже если шаг 4 упал. Иначе утром пользователи увидят сообщение о блокировке и позвонят вам.
Спящие сеансы и проблемные процессы
Брошенные сеансы — когда пропала сеть или ноутбук ушёл в сон — платформа может закрывать сама. В свойствах информационной базы в консоли есть параметры засыпания пассивного сеанса и завершения спящего сеанса (в секундах). Например, засыпание через 1800 секунд неактивности и завершение спящего ещё через 3600 освобождают лицензии без участия администратора.
В свойствах кластера есть флажок принудительного завершения проблемных процессов и параметры перезапуска рабочих процессов. Перезапуск обрывает сеансы на процессе, поэтому интервал и время выбирайте так, чтобы он приходился на нерабочие часы.
Когда автоматизация вредит
- ⏳ Не ставьте завершение спящих сеансов слишком коротким: люди, ушедшие на обед, будут терять открытые формы.
- ⏳ Не выгоняйте всех по расписанию, если в это время идёт обмен с филиалом или выгрузка в банк: сеанс обмена тоже завершится.
- ⏳ Проверяйте, что скрипт снимает блокировку при любом исходе.