Принудительное отключение пользователей от базы 1С 8.3: сервер, файл, rac

· 10 мин

Содержание

Чтобы завершить сеанс другого пользователя в клиент-серверной базе 1С 8.3, откройте консоль администрирования серверов, раскройте Кластеры → ваш кластер → Информационные базы → нужная база → Сеансы, выделите сеанс и выберите в контекстном меню «Удалить». Из командной строки то же делает rac session terminate. В файловой базе сервера нет, поэтому сеанс завершают иначе: блокировкой входа из самой конфигурации или закрытием процесса клиента.

Частое заблуждение — что выгнать пользователя можно из Конфигуратора. Пункт Администрирование → Активные пользователи в Конфигураторе только показывает, кто подключён. Завершить чужой сеанс оттуда нельзя. Принудительное завершение сеансов — работа администратора кластера или того, у кого есть права на файлы базы.

С чего начать: кто сейчас в базе и почему он мешает

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

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

  • 🖥 В Конфигураторе — Администрирование → Активные пользователи. Только просмотр.
  • 📋 В типовой конфигурации (БП 3.0, ЗУП 3.1, УТ 11) — раздел Администрирование → Обслуживание, ссылка «Активные пользователи». Там видно имя, компьютер, приложение и время начала работы.
  • 🧩 В консоли кластера — ветка «Сеансы» у конкретной базы. Это самый полный список: тип приложения, номер сеанса, рабочий процесс, сведения о блокировках и вызовах СУБД.

На что смотреть в списке:

Что видноЧто это значитКак поступить
Приложение «Конфигуратор»Кто-то открыл базу в режиме разработкиСначала позвонить: могут быть несохранённые изменения конфигурации
«Фоновое задание»Регламентное задание или длительная операцияНе удалять вслепую, сначала заблокировать регламентные задания
«COM-соединение»Внешняя программа или обменНайти, какая программа подключается, иначе она переподключится
«Веб-клиент», «Тонкий клиент»Обычный пользовательПредупредить и завершить
Начало работы — вчера или раньшеСеанс «висит» после обрыва сетиМожно завершать

Если в консоли у сеанса растёт время вызова СУБД и есть захваченные блокировки, проблема не в «лишнем пользователе», а в долгой транзакции. Её обрыв откатит все изменения этой транзакции — предупредите человека, что его документ придётся провести заново.

Завершение сеанса в серверной базе через консоль кластера

Это основной способ для клиент-серверного варианта. Нужна оснастка «Администрирование серверов 1С:Предприятия» той же версии платформы, что и сервер.

Шаг 1. Откройте консоль

  1. Запустите оснастку из меню «Пуск» (ярлык «Администрирование серверов 1С Предприятия»).
  2. Если оснастка пустая или выдаёт ошибку при открытии, зарегистрируйте библиотеку от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\radmin.dll"

Вместо 8.3.xx.xxxx подставьте номер установленной платформы. Регистрировать нужно ту же версию, что и у агента сервера, иначе консоль не подключится.

  1. В дереве Central 1C:Enterprise 8.3 servers добавьте центральный сервер по имени компьютера, если его там ещё нет. Порт агента по умолчанию — 1540.

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

  1. Раскройте Кластеры → Локальный кластер (или имя вашего кластера).
  2. Если на кластере заданы администраторы, консоль попросит логин и пароль администратора кластера.
  3. Откройте Информационные базы → имя базы → Сеансы. Если у базы заданы учётные данные, потребуется логин пользователя этой базы с административными правами.

Шаг 3. Удалите сеанс

  1. Выделите строку сеанса. Можно выделить несколько с зажатым Ctrl.
  2. Правая кнопка мыши → «Удалить».
  3. Подтвердите действие.

Пользователь увидит сообщение о разрыве соединения, его клиент закроется или предложит перезапуск. Программная лицензия, которую занимал сеанс, освобождается.

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

Если сеанс сразу появляется снова

Так бывает с COM-соединениями, внешними обработками обмена и фоновыми заданиями: программа переподключается автоматически. Удалять сеанс по кругу бесполезно. Нужно либо остановить источник (службу обмена, задачу в планировщике Windows), либо включить блокировку начала сеансов — о ней ниже.

Завершение сеансов из командной строки: ras и rac

Консоль удобна для разового действия. Для скриптов, Linux-серверов и удалённой работы используют утилиту rac. Она обращается к серверу администрирования ras, а не к агенту напрямую.

Запуск сервера администрирования

На Linux ras запускают так:

/opt/1cv8/x86_64/8.3.xx.xxxx/ras cluster --daemon

На Windows его обычно регистрируют службой. По умолчанию ras слушает порт 1545, и rac без указания адреса идёт на localhost:1545.

Команды по шагам

rem 1. Узнать идентификатор кластера
rac cluster list

rem 2. Узнать идентификатор базы
rac infobase summary list --cluster=<uuid-кластера>

rem 3. Посмотреть сеансы этой базы
rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>

rem 4. Завершить конкретный сеанс
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Если на кластере заданы администраторы, к командам добавьте --cluster-user=<логин> --cluster-pwd=<пароль>. В выводе session list смотрите поля user-name, host и app-id: по ним понятно, чей это сеанс и из какого приложения.

Для проверки лицензий пригодится rac session list --cluster=<uuid> --licenses — покажет, какой сеанс какую лицензию держит. Остальные параметры смотрите во встроенной справке rac help session.

Как отключить пользователя от файловой базы

В файловом варианте нет кластера и списка сеансов на сервере. Каждый клиент работает с файлом 1Cv8.1CD напрямую, поэтому и способы другие. Ниже — от мягкого к жёсткому.

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

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

  1. Укажите сообщение для пользователей и время начала блокировки.
  2. Включите блокировку.
  3. Работающие пользователи получат предупреждение, а через несколько минут их сеансы завершатся сами.

Механизм работает через клиентское приложение. Если у пользователя «намертво» завис клиент, он сообщение не обработает — тогда переходите к способам 2 и 3.

Способ 2. Закрыть процесс на компьютере пользователя

Если база открыта на терминальном сервере, администратор видит все процессы в «Диспетчере задач» на вкладке «Пользователи». Найдите процесс 1cv8c.exe (тонкий клиент) или 1cv8.exe (толстый клиент и Конфигуратор) у нужного пользователя и завершите его.

Из командной строки по номеру сеанса Windows:

query process 1cv8c.exe
taskkill /PID <номер процесса> /F

Не запускайте taskkill /IM 1cv8c.exe /F без фильтра на терминальном сервере — закроются клиенты всех пользователей сразу.

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

Если база лежит в общей папке, на сервере с этой папкой откройте fsmgmt.msc («Общие папки») → «Открытые файлы». Найдите 1Cv8.1CD нужной базы, посмотрите, чьё имя в столбце пользователя, и выберите «Закрыть открытый файл».

Клиент у пользователя после этого выдаст ошибку и закроется. Делайте это только если пользователь точно не проводит документы в эту минуту — обрыв записи в файловую базу иногда приводит к повреждению, и потом её приходится проверять через «Тестирование и исправление».

Как выбрать способ

Какой у вас вариант базы и что происходит?

Сеансы на стороне СУБД: что можно смотреть в SQL

Для клиент-серверной базы на MS SQL Server соблазнительно убить соединение прямо в СУБД командой KILL. Так делать не стоит. Рабочий процесс 1С держит пул соединений, и одно соединение СУБД не равно одному пользователю 1С. Обрыв на стороне SQL рвёт работу случайного набора сеансов и оставляет в кластере «мёртвые» записи.

Зато SQL полезен для диагностики: кто кого блокирует.

-- Кто кого ждёт прямо сейчас
SELECT session_id, blocking_session_id, wait_type, wait_time, database_id
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;

-- Соединения с базой 1С
SELECT session_id, host_name, program_name, login_name, status
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('имя_базы_SQL');

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

Технологический журнал: почему сеансы виснут

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

Журнал включают файлом logcfg.xml в каталоге conf платформы (например, C:\Program Files\1cv8\conf\). Пример настройки для разбора проблем с сеансами и блокировками:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\techlog" history="24">
    <event><eq property="name" value="EXCP"/></event>
    <event><eq property="name" value="SESN"/></event>
    <event><eq property="name" value="TLOCK"/></event>
    <event><eq property="name" value="TTIMEOUT"/></event>
    <event><eq property="name" value="TDEADLOCK"/></event>
    <property name="all"/>
  </log>
</config>

Что означают события:

  • 🔴 EXCP — исключительные ситуации, в том числе аварийные разрывы клиента.
  • 🟢 SESN — начало и окончание сеансов. Видно, когда сеанс завершился и почему.
  • 🔒 TLOCK — управляемые блокировки 1С.
  • ⏳ TTIMEOUT — превышение времени ожидания блокировки. Пользователь видел ошибку блокировки.
  • 💥 TDEADLOCK — взаимоблокировки.

Параметр history="24" хранит журнал 24 часа. Платформа подхватывает изменения logcfg.xml без перезапуска сервера, обычно в течение минуты.

Журнал без фильтров быстро забивает диск: на нагруженном сервере это гигабайты за час. Включайте его на время разбора, кладите на отдельный диск и выключайте, удалив logcfg.xml или переименовав его.

Блокировка входа и монопольный режим

Завершить сеансы — полдела. Если сразу после этого пользователи зайдут обратно, обновление или загрузку .dt всё равно не запустить. Монопольный доступ нужен для обновления структуры базы, загрузки из .dt и тестирования с исправлением. Для таких работ вход сначала блокируют, потом выгоняют оставшихся.

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

  1. Откройте свойства информационной базы в консоли.
  2. Отметьте «Блокировка начала сеансов включена».
  3. Задайте время начала и окончания, текст сообщения и «Код разрешения» — любое слово, например obnovlenie.
  4. При необходимости отметьте «Блокировка регламентных заданий включена», чтобы фоновые задания не стартовали.

То же из командной строки:

rac infobase update --cluster=<uuid> --infobase=<uuid> --infobase-user=<логин> --infobase-pwd=<пароль> --sessions-deny=on --scheduled-jobs-deny=on --denied-message="Обновление базы" --permission-code=obnovlenie

Вход в заблокированную базу

Администратор заходит с ключом /UC и кодом разрешения:

"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S"srv1c\buh" /UCobnovlenie

Тот же код можно дописать в поле «Дополнительные параметры запуска» в свойствах базы в окне запуска. После работ не забудьте снять блокировку — иначе утром в базу не войдёт никто.

Автоматизация и профилактика зависших сеансов

Скрипт ночного отключения

Перед регламентным обновлением удобно выгонять всех автоматически. Пример на PowerShell для одной базы:

$rac = "C:\Program Files\1cv8\8.3.xx.xxxx\bin\rac.exe"
$ib  = "<uuid-базы>"

$cluster = ((& $rac cluster list | Select-String '^cluster\s+:') -split ':\s*')[1].Trim()

$sessions = & $rac session list --cluster=$cluster --infobase=$ib |
    Select-String '^session\s+:' |
    ForEach-Object { ($_ -split ':\s*')[1].Trim() }

foreach ($s in $sessions) {
    & $rac session terminate --cluster=$cluster --session=$s
}

Скрипт берёт первый кластер из списка. Если кластеров несколько, впишите его идентификатор вручную. При заданном администраторе кластера добавьте --cluster-user и --cluster-pwd в каждую команду. Запускайте из «Планировщика заданий» Windows ночью, когда в базе гарантированно никого нет, и в паре с блокировкой начала сеансов.

Настройки, которые убирают «висящие» сеансы

  • ⏱ Засыпание и завершение пассивных сеансов. В свойствах информационной базы в консоли есть параметры «Засыпание пассивного сеанса» и «Завершение спящего сеанса» (в секундах). Сеанс с оборванной связью сначала засыпает и освобождает лицензию, а затем удаляется.
  • 🔁 Перезапуск рабочих процессов в свойствах рабочего сервера: интервал перезапуска и допустимый объём памяти. Перезапуск выполняется мягко, с переводом сеансов на новый процесс.
  • 🌐 Стабильная сеть до сервера. Обрыв VPN на ноутбуке у бухгалтера — частый источник «зависших» записей в списке сеансов.
  • 🧾 Регламентные задания с большим объёмом работы переносите на ночь, чтобы они не держали блокировки днём.
Перед монопольной операцией
Выполнено: 0 / 6

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

Можно ли завершить чужой сеанс без прав администратора?
Нет. В серверной базе нужны права администратора кластера (если он задан) и административные права в самой базе. В файловой — права на процессы или файлы на компьютере, где лежит база.
Пользователь не видит предупреждения о блокировке. Почему?
Предупреждение показывает клиентское приложение. Если клиент завис или открыт модальный диалог, сообщение не обработается, и сеанс придётся завершить через консоль или процесс.
Почему после удаления сеанса лицензия всё ещё занята?
Обычно это другой сеанс того же пользователя, например фоновое задание или второе окно. Проверьте rac session list с ключом --licenses и посмотрите, кто держит лицензию.
Удаление сеанса может повредить серверную базу?
Нет: незавершённая транзакция откатывается средствами СУБД. Потеряются только несохранённые изменения этого пользователя. Для файловой базы риск выше, поэтому там сначала используйте блокировку.
Как завершить свой собственный зависший сеанс?
Тем же способом, что и чужой: найдите его в консоли кластера по имени и компьютеру и удалите. Если зависло только окно, хватит закрыть процесс клиента на своём компьютере.