Зависла блокировка в 1С 8.3: находим виновный сеанс и освобождаем базу

· 10 мин

Содержание

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

Блокировка «висит», когда пользователь давно ушёл, а запись или вся база по-прежнему заняты: документ не проводится, обновление не стартует, в окне видно Конфликт блокировок при выполнении транзакции или Установлена блокировка соединений с информационной базой.

Инструкция общая для платформы 8.3 и не зависит от конфигурации: Бухгалтерия, ЗУП, УТ ведут себя одинаково.

Откуда берутся зависшие блокировки: диагностика по тексту ошибки

Сначала определите, что именно заблокировано. Под словом «блокировка» в 1С прячутся четыре разных механизма, и снимаются они по-разному.

Что видит пользовательЧто заблокированоГде снимать
Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировкиДанные: запись регистра, документ, остаткиСеанс-владелец в консоли кластера или в списке активных пользователей
Установлена блокировка соединений с информационной базойВход в базу целиком (блокировка начала сеансов)Свойства базы в консоли, файл 1Cv8.cdn, параметр /UC
Конфигуратор пишет, что база используется, монопольный режим недоступенФайл базы занят живыми или «мёртвыми» сеансамиЗавершение процессов, сеансов в кластере
Lock request time out period exceeded или ожидание без ответа на стороне SQLБлокировка в самой СУБДСредства MS SQL или PostgreSQL

Типичные причины, по которым блокировка остаётся после ухода пользователя:

  • 🔌 обрыв сети или сон ноутбука во время проведения документа: сервер ещё считает сеанс живым;
  • 💥 аварийное закрытие клиента, когда процесс 1cv8.exe остался висеть в памяти;
  • 🔄 прерванное обновление конфигурации : блокировку входа поставили, а снять не успели;
  • 🐢 долгая транзакция — групповое перепроведение, закрытие месяца , обработка без порций;
  • 🖥 зависший рабочий процесс rphost на сервере, который держит десятки сеансов сразу.

Прежде чем что-то удалять, спросите коллег, не запущено ли у кого закрытие месяца или перепроведение. Долгая операция выглядит как зависшая, но завершать её посередине — значит откатить часы работы.

Снимаем блокировку в файловой базе 1С

Файловая база хранит данные в одном файле 1Cv8.1CD. Рядом с ним платформа создаёт служебные файлы. Для этой темы важны два:

  • 1Cv8.1CL — файл блокировок, через него сеансы договариваются о доступе к данным;
  • 1Cv8.cdn — появляется, когда установлена блокировка начала сеансов (например, перед обновлением).

Шаг 1. Найдите, кто ещё в базе

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

В списке видно имя пользователя, компьютер и время начала сеанса. Сеанс, начатый вчера вечером, — первый кандидат.

Шаг 2. Закройте процессы 1С на компьютерах пользователей

Позвоните человеку и попросите выйти из программы. Если окно не отвечает или компьютер недоступен:

  1. На компьютере пользователя откройте диспетчер задач (Ctrl+Shift+Esc).
  2. На вкладке «Подробности» найдите 1cv8.exe (толстый клиент) или 1cv8c.exe (тонкий клиент).
  3. Завершите процесс.
  4. Если база лежит на терминальном сервере, сделайте то же в сеансе этого пользователя или завершите его сеанс Windows.

Несохранённый документ у этого пользователя пропадёт. Предупредите его заранее.

Шаг 3. Проверьте, кто держит файл базы по сети

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

Шаг 4. Удалите служебные файлы — только когда в базе никого нет

Если после закрытия всех сеансов база всё равно не даёт монопольный доступ, можно удалить файл 1Cv8.1CL из каталога базы. Платформа создаст его заново при следующем входе.

Удаляйте 1Cv8.1CL только когда ни один сеанс не открыт. Если кто-то ещё работает, его транзакция может записать данные без согласования с другими, и база получит повреждения. Делайте это вечером или после звонка всем пользователям.

Файл 1Cv8.cdn удаляют, когда база не пускает пользователей после неудачного обновления. Правильнее снять блокировку штатно — см. раздел про блокировку входа ниже. Удаление файла — запасной путь, если войти не получается даже администратору.

Завершаем зависшие сеансы в клиент-серверном варианте 1С

В клиент-серверной базе блокировками управляет менеджер кластера (процесс rmngr), а сеансы живут в рабочих процессах rphost. Поэтому файлы искать не нужно — всё делается через консоль или утилиту rac.

Через консоль администрирования серверов

  1. Запустите «Администрирование серверов 1С Предприятия». Если консоль не открывается, перерегистрируйте radmin.dll из каталога bin нужной версии платформы командой regsvr32 radmin.dll от имени администратора.
  2. Раскройте Центральные серверы 1С:Предприятия → имя сервера → Кластеры → Локальный кластер → Информационные базы → ваша база → Сеансы.
  3. Отсортируйте по колонке «Начало работы» или «Пользователь». Ищите сеанс, который давно не активен, но открыт.
  4. Правый клик → «Удалить». Консоль попросит подтвердить.

После удаления сеанса сервер откатит его незавершённую транзакцию и освободит все блокировки, которые этот сеанс держал.

Через утилиту rac

Для удалённой работы или скрипта подойдёт rac. Она обращается к серверу администрирования ras, который должен быть запущен (по умолчанию порт 1545).

rem список кластеров — нужен UUID кластера
rac cluster list

rem сеансы кластера с лицензиями
rac session list --cluster=<uuid-кластера> --licenses

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

Если на кластере задан администратор, добавьте --cluster-user и --cluster-pwd. Остальные параметры смотрите в справке rac help session.

Когда завис весь рабочий процесс

Бывает, что зависших сеансов много, и все в одном rphost. В консоли откройте узел «Рабочие процессы», посмотрите, у какого процесса аномальная память или «Доступен = нет».

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

Перезапуск службы «Агент сервера 1С:Предприятия» — крайняя мера: он отключит всех пользователей всех баз на этом сервере.

Ищем виновника через список блокировок кластера

Удалять сеансы наугад неправильно. В консоли кластера есть список управляемых блокировок — по нему видно, кто именно держит данные.

Где смотреть

В дереве консоли у кластера и у каждой информационной базы есть узел «Блокировки». В нём перечислены:

  • Описание — какой объект заблокирован: регистр, документ, значения измерений;
  • Сеанс и Соединение — кто держит блокировку;
  • Время — когда она установлена.

Блокировка, которой полчаса и больше, при обычной работе почти всегда указывает на зависший сеанс или на долгую обработку. Номер сеанса из этого списка ищите в узле «Сеансы» и уже его завершайте.

Та же информация доступна из командной строки:

rac lock list --cluster=<uuid-кластера> --infobase=<uuid-базы>

Технологический журнал для повторяющихся конфликтов

Если конфликты возникают каждый день, разовым удалением сеанса не обойтись. Включите технологический журнал с событиями блокировок: TLOCK (установка управляемой блокировки), TTIMEOUT (превышено время ожидания) и TDEADLOCK (взаимоблокировка). Настройка делается файлом logcfg.xml в каталоге conf платформы.

<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="C:\1C_TechLog\locks" history="24">
    <event><eq property="name" value="TTIMEOUT"/></event>
    <event><eq property="name" value="TDEADLOCK"/></event>
    <event><eq property="name" value="TLOCK"/></event>
    <property name="all"/>
  </log>
</config>

В записях TTIMEOUT есть номер сеанса, который ждал, и сеанса, который мешал. Так находится конкретная обработка или документ — его код потом правит программист.

События TLOCK пишутся очень часто. Держите журнал включённым день-два и следите за местом на диске, затем удалите logcfg.xml.

Блокировки на уровне СУБД: MS SQL и PostgreSQL

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

Microsoft SQL Server

В SQL Server Management Studio выполните:

-- кто кого блокирует
SELECT session_id, blocking_session_id, wait_type, wait_time, status
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;

В колонке blocking_session_id — номер процесса-виновника. Посмотреть подробнее можно через EXEC sp_who2. Завершить процесс — командой KILL <номер>.

PostgreSQL

-- ожидающие и блокирующие процессы
SELECT pid, pg_blocking_pids(pid) AS blocked_by, state, query_start, query
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;

-- завершить процесс-виновник
SELECT pg_terminate_backend(<pid>);

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

Как снять блокировку входа, если база не пускает пользователей

После неудачного обновления база может остаться в режиме «вход запрещён». Пользователи видят Установлена блокировка соединений с информационной базой, хотя никто ничего не обновляет.

В клиент-серверной базе

  1. В консоли откройте свойства информационной базы.
  2. Снимите флажок «Блокировка начала сеансов включена».
  3. Если там же включена «Блокировка регламентных заданий» и вы её не ставили намеренно, снимите и её.
  4. Нажмите «ОК».

Через rac то же самое делается командой rac infobase update с параметром --sessions-deny=off. Потребуются UUID кластера, UUID базы и логин администратора базы.

В файловой базе

Запустите 1С с кодом разрешения, если он был задан при установке блокировки:

"C:\Program Files\1cv8\<версия>\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Buh" /UC<КодРазрешения>

Конфигурации на БСП дополнительно понимают параметр запуска /CРазрешитьРаботуПользователей: он снимает блокировку, поставленную через «Блокировку работы пользователей». После входа проверьте раздел Администрирование → Обслуживание → Блокировка работы пользователей и снимите флажок, если он остался.

Если войти нельзя вовсе, а код разрешения неизвестен, закройте все сеансы и удалите файл 1Cv8.cdn из каталога базы.

Проверка файловой базы утилитой chdbfl после аварийного сбоя

Зависание с последующим снятием задачи в диспетчере или выключением питания часто оставляет следы в 1Cv8.1CD. Симптомы — база открывается через раз, документы не записываются, повторяются странные ошибки чтения. Для таких случаев в каталоге bin платформы есть утилита chdbfl.exe — «Тестирование и исправление файловой базы».

  1. Сделайте копию всей папки базы. Не выгрузку .dt, а именно копию файлов.
  2. Убедитесь, что в базе никого нет: chdbfl работает только с монопольным доступом.
  3. Запустите C:\Program Files\1cv8\<версия>\bin\chdbfl.exe.
  4. Укажите путь к 1Cv8.1CD.
  5. Сначала запустите проверку без флажка «Исправлять обнаруженные ошибки». Посмотрите отчёт.
  6. Если ошибки есть, запустите повторно уже с исправлением.

Исправление может удалить повреждённые записи. Именно поэтому копия папки делается до запуска, а не после.

Для более глубокой проверки (ссылочная целостность, пересчёт итогов) есть режим Конфигуратора Администрирование → Тестирование и исправление. Он тоже требует монопольного режима и работает и с файловыми, и с серверными базами. chdbfl — только для файловых.

Профилактика: таймауты и настройки, которые не дают блокировкам зависать

Зависшую блокировку проще предупредить, чем снимать. Что настроить:

На стороне кластера

  • ⏱ Принудительно завершать проблемные процессы. Флажок в свойствах кластера. Вместе с ним задаётся допустимый объём памяти рабочих процессов: процесс, вышедший за порог, будет перезапущен.
  • 🔁 Интервал перезапуска рабочих процессов в свойствах кластера. Плановый перезапуск, например раз в сутки, снимает накопившиеся утечки памяти. При перезапуске сеансы переносятся в новый процесс, но долгие операции лучше не запускать в это время.
  • 🛑 Время ожидания управляемой блокировки — около 20 секунд, это поведение платформы, а не флажок кластера. Если пользователи постоянно упираются в Превышено максимальное время ожидания, увеличивать таймаут бесполезно — ищите долгую транзакцию через технологический журнал.

На стороне пользователей и регламента

  • 💻 Отключите на рабочих ПК переход в сон при открытой 1С или хотя бы сохраняйте документы перед уходом.
  • 🌐 Для удалённых сотрудников используйте терминальный доступ или веб-клиент: обрыв VPN во время проведения документа — частый источник «повисших» сеансов.
  • 📅 Перепроведение, закрытие месяца и групповые обработки запускайте вечером или порциями.
  • 🔐 Обновление конфигурации выполняйте по регламенту: блокировка входа → обновление → проверка → снятие блокировки. Без последнего шага база останется закрытой.
Перед удалением зависшей блокировки
Выполнено: 0 / 6

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

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