Принудительное отключение пользователей от базы 1С 8.3: сервер, файл, rac
Содержание
Чтобы завершить сеанс другого пользователя
в клиент-серверной базе 1С 8.3, откройте консоль администрирования серверов, раскройте Кластеры → ваш кластер → Информационные базы → нужная база → Сеансы, выделите сеанс и выберите в контекстном меню «Удалить». Из командной строки то же делает rac session terminate. В файловой базе сервера нет, поэтому сеанс завершают иначе: блокировкой входа из самой конфигурации или закрытием процесса клиента.
Частое заблуждение — что выгнать пользователя можно из Конфигуратора. Пункт Администрирование → Активные пользователи в Конфигураторе только показывает, кто подключён. Завершить чужой сеанс оттуда нельзя. Принудительное завершение сеансов — работа администратора кластера или того, у кого есть права на файлы базы.
С чего начать: кто сейчас в базе и почему он мешает
Прежде чем что-то обрывать, посмотрите список подключений. Часто «зависший» пользователь — это фоновое задание или забытый Конфигуратор у программиста, и обрывать его нужно иначе.
Где посмотреть активных пользователей :
- 🖥 В Конфигураторе —
Администрирование → Активные пользователи. Только просмотр. - 📋 В типовой конфигурации (БП 3.0, ЗУП 3.1, УТ 11) — раздел
Администрирование → Обслуживание, ссылка «Активные пользователи». Там видно имя, компьютер, приложение и время начала работы. - 🧩 В консоли кластера — ветка «Сеансы» у конкретной базы. Это самый полный список: тип приложения, номер сеанса, рабочий процесс, сведения о блокировках и вызовах СУБД.
На что смотреть в списке:
| Что видно | Что это значит | Как поступить |
|---|---|---|
| Приложение «Конфигуратор» | Кто-то открыл базу в режиме разработки | Сначала позвонить: могут быть несохранённые изменения конфигурации |
| «Фоновое задание» | Регламентное задание или длительная операция | Не удалять вслепую, сначала заблокировать регламентные задания |
| «COM-соединение» | Внешняя программа или обмен | Найти, какая программа подключается, иначе она переподключится |
| «Веб-клиент», «Тонкий клиент» | Обычный пользователь | Предупредить и завершить |
| Начало работы — вчера или раньше | Сеанс «висит» после обрыва сети | Можно завершать |
Если в консоли у сеанса растёт время вызова СУБД и есть захваченные блокировки, проблема не в «лишнем пользователе», а в долгой транзакции. Её обрыв откатит все изменения этой транзакции — предупредите человека, что его документ придётся провести заново.
Завершение сеанса в серверной базе через консоль кластера
Это основной способ для клиент-серверного варианта. Нужна оснастка «Администрирование серверов 1С:Предприятия» той же версии платформы, что и сервер.
Шаг 1. Откройте консоль
- Запустите оснастку из меню «Пуск» (ярлык «Администрирование серверов 1С Предприятия»).
- Если оснастка пустая или выдаёт ошибку при открытии, зарегистрируйте библиотеку от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\radmin.dll"
Вместо 8.3.xx.xxxx подставьте номер установленной платформы. Регистрировать нужно ту же версию, что и у агента сервера, иначе консоль не подключится.
- В дереве
Central 1C:Enterprise 8.3 serversдобавьте центральный сервер по имени компьютера, если его там ещё нет. Порт агента по умолчанию — 1540.
Шаг 2. Найдите сеанс
- Раскройте
Кластеры → Локальный кластер(или имя вашего кластера). - Если на кластере заданы администраторы, консоль попросит логин и пароль администратора кластера.
- Откройте
Информационные базы → имя базы → Сеансы. Если у базы заданы учётные данные, потребуется логин пользователя этой базы с административными правами.
Шаг 3. Удалите сеанс
- Выделите строку сеанса. Можно выделить несколько с зажатым Ctrl.
- Правая кнопка мыши → «Удалить».
- Подтвердите действие.
Пользователь увидит сообщение о разрыве соединения, его клиент закроется или предложит перезапуск. Программная лицензия, которую занимал сеанс, освобождается.
Несохранённые данные в открытой форме пропадут. Незавершённая транзакция откатится. Перед удалением сеанса предупредите пользователя, если есть такая возможность.
Если сеанс сразу появляется снова
Так бывает с 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 и другие) есть обработка блокировки. Откройте Администрирование → Обслуживание и найдите ссылку «Блокировка работы пользователей».
- Укажите сообщение для пользователей и время начала блокировки.
- Включите блокировку.
- Работающие пользователи получат предупреждение, а через несколько минут их сеансы завершатся сами.
Механизм работает через клиентское приложение. Если у пользователя «намертво» завис клиент, он сообщение не обработает — тогда переходите к способам 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 и тестирования с исправлением. Для таких работ вход сначала блокируют, потом выгоняют оставшихся.
Блокировка в консоли кластера
- Откройте свойства информационной базы в консоли.
- Отметьте «Блокировка начала сеансов включена».
- Задайте время начала и окончания, текст сообщения и «Код разрешения» — любое слово, например
obnovlenie. - При необходимости отметьте «Блокировка регламентных заданий включена», чтобы фоновые задания не стартовали.
То же из командной строки:
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 на ноутбуке у бухгалтера — частый источник «зависших» записей в списке сеансов.
- 🧾 Регламентные задания с большим объёмом работы переносите на ночь, чтобы они не держали блокировки днём.
Частые вопросы
Можно ли завершить чужой сеанс без прав администратора?
Пользователь не видит предупреждения о блокировке. Почему?
Почему после удаления сеанса лицензия всё ещё занята?
rac session list с ключом --licenses и посмотрите, кто держит лицензию.