Зависшая сессия в 1С:Предприятие — одна из самых раздражающих проблем для администраторов и пользователей. Она блокирует доступ к базе, тормозит работу других сотрудников и может привести к потере несохранённых данных. Причины разнообразны: от банального «забыл закрыть программу» до серьёзных сбоев в работе сервера или сетевого оборудования.
В этой статье мы разберём 5 проверенных способов принудительного завершения зависших сессий — от простых (через интерфейс 1С) до продвинутых (команды для кластера серверов и SQL-запросы). Отдельно остановимся на нюансах для файловых и клиент-серверных баз, а также на том, как избежать повторных зависаний. Если вы не администратор, но столкнулись с проблемой — в конце есть FAQ с ответами начные вопросы пользователей.
1. Способ 1: Завершение сессии через «Активные пользователи» в 1С
Самый очевидный и безопасный метод — использовать встроенные инструменты 1С:Предприятие. Он подходит для клиент-серверных баз (в файловом варианте этот раздел недоступен).
Чтобы увидеть список активных сессий:
- Откройте 1С:Предприятие в режиме
Конфигуратор. - Перейдите в меню
Администрирование → Активные пользователи. - В списке найдите зависшую сессию (обратите внимание на столбцы
Время началаиПоследняя активность). - Выделите её и нажмите
Завершить сессию.
Если кнопка Завершить сессию неактивна или сессия не исчезает после нажатия:
- 🔄 Попробуйте обновить список кнопкой
Обновить— иногда сессия уже завершена, но не отображается в интерфейсе. - ⚡ Проверьте права вашего пользователя: для завершения чужих сессий нужны права
АдминистраторилиАдминистрирование сессий. - 🛠️ Если сессия принадлежит пользователю с монопольным доступом, сначала снимите монопольный режим в настройках базы.
⚠️ Внимание: В некоторых версиях 1С 8.3.20+ при завершении сессии через конфигуратор может появляться ошибка Не удалось завершить сессию (Сессия не найдена). Это связано с особенностями работы кластера серверов. В таком случае переходите к способу 3 или 4.
2. Способ 2: Перезапуск агента сервера 1С (для клиент-серверного варианта)
Если сессия зависла на уровне сервера, иногда помогает перезапуск агента сервера 1С (ragent). Этот метод работает для 1С:Предприятие 8.3 в клиент-серверном режиме.
Инструкция для Windows:
1. Откройте «Службы» (нажмите Win + R → введите services.msc → Enter).
2. Найдите службу с названием 1С:Предприятие 8.3. Агент сервера (или подобное, в зависимости от версии).
3. Нажмите правой кнопкой → Перезапустить.
Для Linux (если сервер 1С развёрнут на Ubuntu/Debian):
sudo systemctl restart srv1cv83
Что произойдёт после перезапуска:
- 🔄 Все активные сессии будут разорваны, пользователям придётся заново подключаться к базе.
- ⏳ Время простоя базы составит 10–30 секунд (зависит от нагрузки).
- 📊 Несохранённые данные в зависших сессиях будут утеряны.
⚠️ Внимание: Перезапуск агента сервера не гарантирует очистку блокировок в SQL-базе. Если после перезапуска сессия всё равно висит, используйте способ 4 (запрос к SQL).
3. Способ 3: Утилита rac (для кластера серверов 1С)
Утилита rac (Remote Administration Console) — мощный инструмент для управления кластером серверов 1С. Она позволяет принудительно завершать сессии, даже если они не отображаются в конфигураторе.
Чтобы завершить сессию через rac:
- Откройте командную строку (
cmd) от имени администратора. - Перейдите в папку с утилитой
rac(обычно этоC:\Program Files\1cv8\8.3.x.xxx\bin). - Выполните команду для просмотра списка сессий:
rac session list --cluster=ИмяКластера(если имя кластера не известно, используйте
rac cluster list). - Найдите в списке зависшую сессию и скопируйте её
ID. - Завершите сессию командой:
rac session terminate --cluster=ИмяКластера --session-id=IDСессии
Пример вывода команды rac session list:
| ID сессии | Пользователь | База данных | Время начала | Состояние |
|---|---|---|---|---|
| 12345 | ИвановИИ | MainBase | 10:15:22 | Активна |
| 12346 | ПетровПП | MainBase | 09:45:10 | Зависшая (блокировка) |
| 12347 | СидоровСС | ArchiveBase | 11:30:05 | Активна |
Если команда rac session terminate не срабатывает:
- 🔌 Убедитесь, что служба кластера серверов 1С запущена.
- 🛡️ Проверьте права: утилита
racтребует прав администратора ОС. - 🔄 Попробуйте добавить флаг
--forceдля принудительного завершения.
Сохраните путь к утилите rac в переменную окружения PATH, чтобы не вводить полный путь к файлу при каждом запуске.
4. Способ 4: Запрос к SQL-базе (для клиент-серверных баз на MS SQL)
Если сессия зависла на уровне SQL Server, её можно удалить непосредственно из базы данных. Этот метод требует доступа к Microsoft SQL Server Management Studio (SSMS) или аналогичному инструменту.
Инструкция:
- Подключитесь к серверу SQL с правами
sysadmin. - Выполните запрос для поиска блокирующих сессий:
SELECTs.session_id,
s.login_name,
s.host_name,
s.program_name,
s.login_time,
s.last_request_start_time,
s.status,
t.text AS [Query]
FROM sys.dm_exec_sessions s
CROSS APPLY sys.dm_exec_sql_text(s.most_recent_sql_handle) t
WHERE s.program_name LIKE'%1C:%'
ORDER BY s.last_request_start_time;
- Найдите в результатах зависшую сессию (обычно она имеет статус
suspendedили долгое время вlast_request_start_time). - Завершите её командой:
KILL [session_id];(замените
[session_id]на реальный номер сессии).
Что делать, если запрос KILL не срабатывает:
- 🔄 Попробуйте выполнить
KILL [session_id] WITH STATUSONLY;, чтобы узнать причину блокировки. - 🛠️ Если сессия блокируется другой транзакцией, найдите её по
blocking_session_idв столбцах результата и завершите сначала её. - 📊 Для PostgreSQL используйте команду
SELECT pg_terminate_backend(pid);(найтиpidможно черезSELECT * FROM pg_stat_activity;).
⚠️ Внимание: Не завершайте сессии с program_name, содержащим SQLAgent или BACKUP — это системные процессы, ответственные за резервное копирование.
Сделать бэкап базы|Убедиться в отсутствии критичных транзакций|Предупредить пользователей о возможном разрыве|Проверить права на выполнение KILL|Записать ID сессии перед завершением-->
5. Способ 5: Принудительное отключение пользователя в файловой базе
В файловых базах 1С нет централизованного управления сессиями, поэтому завершить зависшего пользователя сложнее. Здесь помогают два метода: перезапуск сервера или удаление файла блокировки.
Метод 1: Перезапуск сервера (если база на локальном ПК)
- 🖥️ Если база расположена на вашем компьютере, просто перезагрузите его.
- 🔌 Если база на сетевом ресурсе, попробуйте отключить и снова подключить сетевой диск (в
Проводникеправой кнопкой →Отключить).
Метод 2: Удаление файла 1Cv8.lck (для опытных пользователей)
- Закройте все экземпляры 1С на своём компьютере.
- Перейдите в папку с базой (обычно это
C:\Users\Public\Documents\1C\1Cv8или сетевой путь). - Найдите файл с расширением
.lck(например,1Cv8.lckилиИмяБазы.lck). - Удалите этот файл (может потребоваться запуск
Проводникаот администратора). - Перезапустите 1С.
Ограничения метода:
- 🚫 Не работает, если файл
.lckзаблокирован другой сессией (например, на сервере). - 🔄 После удаления
.lckбаза будет доступна для монопольного открытия, но возможны ошибки целостности. - 📊 В сетевых папках права на удаление
.lckмогут быть ограничены.
Что делать, если файл.lck не удаляется?
Если файл 1Cv8.lck заблокирован, попробуйте:
1. Использовать утилиту Unlocker (скачать с официального сайта) для принудительного удаления.
2. Перезагрузить сервер, на котором расположена база.
3. Проверьте, не открыта ли база на другом компьютере в фоновом режиме (иногда 1С остаётся в процессах после закрытия окна).
6. Профилактика зависших сессий: как избежать проблемы в будущем
Лучше предотвратить зависание сессий, чем бороться с последствиями. Вот ключевые меры профилактики:
Для администраторов:
- 🔧 Настройте тайм-ауты неактивности в кластере серверов 1С (параметр
SessionTimeoutв конфигурации ragent). - 📊 Регулярно обновляйте 1С:Предприятие и SQL Server до актуальных версий — в новых релизах часто исправляют баги с блокировками.
- 🛡️ Ограничьте права пользователей на длительные транзакции (например, через настройку ролей в SQL).
Для пользователей:
- 💾 Привыкайте сохранять документы (
Ctrl+S) каждые 5–10 минут работы. - ⚡ Не оставляйте 1С открытой на ночь или во время длительных перерывов.
- 🖥️ Если работаете через RDP, корректно завершайте сессию (не закрывайте окно крестиком!).
Технические решения:
- 🤖 Автоматизируйте мониторинг зависших сессий с помощью скриптов на PowerShell или Python (например, парсинг логов ragent).
- 📡 Для крупных баз рассмотрите переход на клиент-серверную архитектуру — она стабильнее файловой при большом количестве пользователей.
Наиболее частая причина зависших сессий — длительные транзакции (например, формирование сложных отчётов). Ограничьте время их выполнения на уровне SQL Server или через настройки кластера 1С.
FAQ: Частые вопросы о зависших сессиях 1С
Можно ли восстановить данные из зависшей сессии?
Нет, если сессия была принудительно завершена, все несохранённые изменения теряются. Единственный способ избежать потерь — регулярно сохранять документы вручную (Ctrl+S) или настроить автосохранение в конфигурации.
Почему сессия висит, хотя пользователь давно закрыл 1С?
Это может быть связано с:
- Некорректным завершением процесса 1С (например, через
Диспетчер задач). - Сетевыми задержками при работе с удалённой базой.
- Ошибками в работе SQL Server (например, незавершённые транзакции).
Проверьте процессы на сервере через Task Manager или rac.
Как узнать, какая именно сессия блокирует работу?
В клиент-серверном варианте используйте запрос к SQL:
SELECT
t1.resource_type,
t1.resource_database_id,
t1.request_mode,
t1.request_session_id,
t2.blocking_session_id
FROM sys.dm_tran_locks t1
JOIN sys.dm_os_waiting_tasks t2 ON t1.lock_owner_address = t2.resource_address;
Для файловых баз единственный способ — проверка файла 1Cv8.lck.
Что делать, если после сброса сессии база не открывается?
Возможные причины и решения:
- Повреждение данных: Восстановите базу из резервной копии.
- Блокировка на уровне ОС: Перезагрузите сервер или компьютер.
- Ошибка лицензии: Проверьте работу HASP-ключа или программной лицензии.
Можно ли автоматизировать завершение зависших сессий?
Да, для этого подойдут:
- Скрипты на PowerShell с использованием
rac. - Задачи в SQL Server Agent, которые выполняют
KILLдля сессий старше определённого времени. - Специализированные утилиты, например, 1C:Server Administration Tool.
Пример простого скрипта для PowerShell:
$sessions = &"C:\Program Files\1cv8\8.3.x.xxx\bin\rac.exe" session list --cluster=MyCluster
$oldSessions = $sessions | Where-Object { $_ -match"Зависшая" }
foreach ($session in $oldSessions) {
$id = ($session -split'\s+')[0]
&"C:\Program Files\1cv8\8.3.x.xxx\bin\rac.exe" session terminate --cluster=MyCluster --session-id=$id --force
}