К статье
Практический материал

Администрирование · 11 мин

Как снять блокировки в 1С на сервере

Как снять блокировки в 1С на сервере: диагностика сеансов, работа с консолью кластера, принудительное завершение сеансов и профилактика зависших блокировок.

Блокировки в клиент-серверной 1С — штатный механизм защиты данных, но когда сеанс «зависает» или пользователь некорректно завершает работу, блокировка остаётся и мешает остальным: документы не проводятся, базу нельзя перевести в монопольный режим, обновление конфигурации не запускается. Задача администратора — быстро определить, кто или что держит блокировку, и корректно её снять, не потеряв данные.

Способ снятия блокировки зависит от её типа: это может быть зависший сеанс пользователя, фоновое задание, соединение с кластером серверов 1С или блокировка на уровне СУБД (MS SQL, PostgreSQL). Универсального «одного клика» нет — сначала нужно диагностировать источник, а уже потом выбирать инструмент: консоль кластера, оснастку СУБД или настройку регламентных заданий.

Ниже разобраны рабочие сценарии: от простого завершения сеанса через консоль кластера до снятия блокировок на уровне SQL Server, а также меры профилактики, которые снижают частоту таких инцидентов.

Как понять, что база заблокирована и кто виноват

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

Первый шаг — открыть консоль кластера серверов 1С (1CV8 Servers → ваш кластер → информационная база) и посмотреть вкладки «Сеансы» и «Соединения». Здесь видно, какие пользователи подключены, когда начался сеанс, какая активность идёт и спит ли сеанс. Зависший сеанс обычно отличается давним временем начала и нулевой или «подвисшей» активностью.

Сообщение «Конфликт блокировок»Транзакционная блокировка данных

Какой сеанс держит запись и как долго

Нельзя войти в монопольный режимАктивные сеансы или соединения

Вкладки «Сеансы» и «Соединения» в консоли кластера

Все пользователи «висят»Блокировка на уровне СУБД

Активные запросы и блокировки в Management Studio

Блокировка появляется по расписаниюРегламентное задание

Список фоновых и регламентных заданий

Снятие блокировки через консоль кластера серверов

Это основной и самый безопасный способ. Откройте оснастку «Администрирование серверов 1С Предприятия», разверните нужный кластер, выберите информационную базу и перейдите на вкладку «Сеансы». Найдите зависший сеанс по имени пользователя, времени начала или компьютеру, выделите его и нажмите «Удалить» (или клавишу Delete). Сеанс завершится принудительно, а его блокировки будут сняты кластером.

Если блокировку держит не сеанс, а «висящее» соединение (например, после аварийного разрыва сети), перейдите на вкладку «Соединения» и удалите неактивное соединение. Обратите внимание: соединения с признаком активности удалять не стоит — это живые процессы пользователей.

Порядок действий в консоли кластера
  1. 1
    Откройте оснастку «Администрирование серверов 1С Предприятия»
  2. 2
    Разверните кластер и выберите нужную информационную базу
  3. 3
    На вкладке «Сеансы» найдите зависший сеанс по пользователю и времени начала
  4. 4
    Выделите сеанс и нажмите «Удалить», подтвердите действие
  5. 5
    Проверьте вкладку «Соединения» и удалите «мёртвые» соединения без активности
  6. 6
    Попросите пользователя повторить операцию и убедитесь, что блокировка снята

Если сеансов много и нужно завершить всех

При массовом сбое (например, после перезагрузки терминального сервера) можно выделить все сеансы базы и удалить их разом. Перед этим предупредите пользователей: несохранённые данные в открытых формах будут потеряны. Альтернатива — установить для базы блокировку начала сеансов с сообщением пользователям, дождаться выхода активных и только потом удалять остатки.

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

Иногда проблема обратная: базу заблокировал сам администратор (или регламентная операция) через «блокировку начала сеансов», и пользователи не могут войти. Снимается она там же, в консоли кластера: свойства информационной базы → снимите флаг «Блокировка начала сеансов включена» и очистите сообщение блокировки.

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

Зависшие фоновые и регламентные задания

Частый скрытый источник блокировок — фоновое задание, которое зависло или выполняется бесконечно долго (обмен данными, полнотекстовое индексирование, выгрузка отчёта). В консоли кластера такие задания видны на вкладке «Сеансы» как сеансы типа «Фоновое задание» — их можно удалить так же, как пользовательские.

Если блокировки повторяются регулярно в одно и то же время, откройте в режиме Предприятия список регламентных заданий (в типовых конфигурациях: «Администрирование → Регламентные и фоновые задания») и проверьте расписание. Возможно, тяжёлое задание запускается в разгар рабочего дня — перенесите его на нерабочие часы или сократите объём обрабатываемых данных.

Если фоновое задание при удалении сеанса появляется снова, значит, оно перезапускается по расписанию. Сначала отключите соответствующее регламентное задание, иначе блокировка вернётся через несколько минут.
ПЗ
Практическое замечание

Снятие блокировок на уровне СУБД

Когда консоль кластера показывает, что сеансов нет, а пользователи всё равно получают ошибки блокировок, источник — на стороне СУБД. Для MS SQL Server откройте SQL Server Management Studio и посмотрите активные процессы: Activity Monitor или запрос к sys.dm_tran_locks и sys.dm_exec_sessions. Найдите головной процесс блокировки (head blocker) и завершите его командой KILL с номером сессии.

Для PostgreSQL используйте представление pg_locks в связке с pg_stat_activity: найдите блокирующий pid и завершите его функцией pg_terminate_backend. Действовать на уровне СУБД нужно осторожно: принудительное завершение откатит транзакцию, и если вы «убьёте» не тот процесс, пользователь потеряет несохранённые изменения.

sql
-- MS SQL: найти блокирующие сессии
SELECT blocking_session_id, session_id, wait_type, wait_time
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
-- Завершить блокирующую сессию
KILL <session_id>;

Как проверить, что блокировка снята

После удаления сеанса или завершения процесса проверьте результат сразу, пока ситуация свежая. Попросите пользователя повторить операцию, которая завершалась ошибкой. В консоли кластера убедитесь, что зависший сеанс не появился снова, а на вкладке «Соединения» нет «хвостов» от старых подключений.

Если блокировка возвращается систематически, включите технологический журнал 1С с фильтрами по событиям TLOCK и TDEADLOCK — он покажет, какие именно объекты и транзакции конфликтуют. Это уже признак проблемы в коде или регламенте работы, а не разового сбоя.

Контрольные точки

Как проверить результат

Повторная операция пользователя
Норма

Документ проводится, ошибок нет

Тревожный признак

Снова «Конфликт блокировок»

Вкладка «Сеансы» в консоли
Норма

Зависший сеанс отсутствует

Тревожный признак

Сеанс пересоздаётся с тем же временем

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

Режим устанавливается

Тревожный признак

Сообщение об активных соединениях

Технологический журнал
Норма

Нет повторяющихся TLOCK/TTIMEOUT

Тревожный признак

Регулярные взаимоблокировки TDEADLOCK

Профилактика: как снизить число блокировок

Разовые блокировки неизбежны, но их частоту можно существенно снизить настройками. В свойствах информационной базы в консоли кластера задайте разумные значения «интервала отключения спящих сеансов» и «принудительного завершения сеансов» — тогда «забытые» сеансы будут закрываться автоматически, а не висеть сутками.

На уровне конфигурации убедитесь, что включён режим управляемых блокировок (он стоит по умолчанию в современных типовых) — он резко сокращает область конфликтов по сравнению с автоматическим режимом. Для MS SQL проверьте, что для базы включён READ_COMMITTED_SNAPSHOT: версионность снижает число блокировок чтения-записи.

Типичные ошибки
01
Перезагрузка сервера 1С «вслепую» вместо поиска конкретного сеанса — простой для всех пользователей и риск потери несохранённых данных
02
Удаление активного сеанса вместо зависшего — пользователь теряет результаты работы
03
Игнорирование повторяющихся блокировок — симптом ошибок в коде или расписании заданий остаётся без внимания
04
Завершение процессов в СУБД без проверки, что это не штатная длительная операция
05
Отсутствие резервной копии перед «жёсткими» действиями на уровне СУБД
Маршрут решения

Как выбрать действие

Один пользователь не может провести документ, остальные работаютНайдите и удалите его зависший сеанс в консоли кластера
Никто не может войти, база «висит» целикомПроверьте блокировки на уровне СУБД и при необходимости завершите головной процесс
Блокировка появляется каждый день в одно времяПроверьте расписание регламентных заданий и перенесите тяжёлые на ночь
Не удаётся обновить конфигурациюУстановите блокировку начала сеансов, удалите оставшиеся сеансы и повторите обновление

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

Что будет с данными пользователя, если удалить его сеанс принудительно?

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

Почему удалённый сеанс появляется снова через минуту?

Скорее всего, это фоновое задание, которое перезапускается регламентным заданием по расписанию, либо клиентское приложение с автообновлением. Отключите соответствующее регламентное задание или закройте сеанс вместе с клиентским процессом на компьютере пользователя.

Можно ли снять блокировку без консоли кластера?

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

Чем отличается блокировка сеансов от блокировки данных?

Блокировка начала сеансов — административный запрет на вход в базу, который ставит администратор. Блокировка данных — автоматический механизм СУБД и платформы, защищающий записи от одновременного изменения. Снимаются они разными способами: первая — в свойствах базы, вторая — завершением держащего её сеанса.

Поможет ли перезапуск службы агента сервера 1С?

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

Как узнать, какой объект заблокирован?

Включите технологический журнал с событиями TLOCK и DBMSSQL/DBPOSTGRS — в логах будут видны таблицы, транзакции и контекст. В MS SQL дополнительно используйте sys.dm_tran_locks и отчёты по блокировкам в Management Studio.

Итог

Что важно запомнить

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