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

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

Захвачено СУБД в консоли кластера 1С: что это и как исправить

Что означает статус «захвачено СУБД» в консоли кластера 1С, почему информационная база блокируется и как снять захват без потери данных.

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

По сути, статус означает, что база данных на SQL-сервере (MS SQL Server, PostgreSQL, Oracle или IBM DB2) удерживается каким-либо процессом: активным соединением, транзакцией, регламентным заданием или операцией обслуживания. Сам по себе захват — не ошибка, а отражение того, что СУБД работает с базой. Проблемой он становится, когда захват «зависает»: соединение не закрывается, транзакция не завершается, а административные операции (удаление базы из кластера, восстановление, перевод в однопользовательский режим) блокируются.

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

Что именно означает статус «захвачено СУБД»

В клиент-серверной архитектуре 1С сервер приложений (агент и рабочие процессы кластера) выступает посредником между пользователями и СУБД. Когда информационная база зарегистрирована в кластере, рабочие процессы открывают соединения с базой данных и поддерживают их постоянно — это нормальный режим работы, обеспечивающий быстрый отклик.

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

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

Типичные причины захвата базы

Чаще всего источником оказывается зависший сеанс пользователя: клиентское приложение закрылось аварийно, но соединение на стороне СУБД осталось открытым. Такие «осиротевшие» соединения продолжают удерживать ресурсы и отображаются как активные процессы.

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

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

В консоли кластера много активных сеансовБаза занята пользователями или заданиями

Список сеансов и их длительность, колонка «Начало сеанса»

Один сеанс висит часами без активностиВероятен зависший сеанс

Текущий вызов СУБД в свойствах сеанса, время бездействия

Сеансов нет, но база захваченаОперация на стороне СУБД

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

Пользователи не могут войти в базуУстановлена блокировка соединений или монопольный режим

Свойства информационной базы: блокировка сеансов, код разрешения

Как найти источник захвата в консоли кластера

Откройте консоль администрирования серверов 1С, разверните нужный кластер и перейдите в ветку «Сеансы». Отсортируйте список по времени начала: сеансы, работающие аномально долго, — первые кандидаты на проверку. Обратите внимание на колонку «Вызов СУБД текущий»: если там постоянно висит один и тот же запрос, сеанс, скорее всего, завис внутри транзакции.

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

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

Порядок действий
  1. 1
    Откройте консоль кластера и зафиксируйте список активных сеансов с временем их начала
  2. 2
    Найдите сеансы с аномально долгой работой и проверьте их текущий вызов СУБД
  3. 3
    Проверьте активные процессы на стороне СУБД штатными средствами (Activity Monitor, pg_stat_activity)
  4. 4
    Убедитесь, что на базе не выполняется восстановление, реиндексация или другое обслуживание
  5. 5
    Завершите проблемный сеанс через консоль кластера или снимите зависший процесс в СУБД
  6. 6
    Проверьте, что захват снят: база доступна, административные операции выполняются

Диагностика на стороне СУБД

Консоль кластера показывает ситуацию глазами сервера 1С, но полную картину даёт сама СУБД. В MS SQL Server откройте Activity Monitor или выполните запрос к системным представлениям, чтобы увидеть активные сессии, их статус и ожидания. Зависшие запросы обычно имеют статус running или suspended с длительным временем выполнения.

В PostgreSQL используйте представление pg_stat_activity: оно показывает все подключения, текущие запросы и их состояние. Запросы в состоянии active дольше разумного времени или зависшие idle in transaction — типичные виновники захвата. Состояние idle in transaction особенно коварно: соединение простаивает, но удерживает блокировки.

sql
SELECT pid, state, query_start, now() - query_start AS duration, left(query, 120) AS query FROM pg_stat_activity WHERE datname = 'my_base' AND state <> 'idle' ORDER BY duration DESC;

Если найден конкретный зависший процесс, его можно завершить штатными средствами СУБД: командой KILL в MS SQL Server или pg_terminate_backend в PostgreSQL. Перед этим убедитесь, что процесс действительно завис, а не выполняет важную длительную операцию — принудительное завершение откатит транзакцию.

Как безопасно снять захват

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

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

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

Маршрут решения

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

Завис один пользовательский сеансУдалите сеанс через консоль кластера
Зависло фоновое заданиеОтмените задание в консоли, при необходимости завершите процесс в СУБД
Соединение в состоянии idle in transactionЗавершите его средствами СУБД (pg_terminate_backend или KILL)
Идёт восстановление или обслуживание базыНе вмешивайтесь, дождитесь завершения операции
Точечные методы не помогли, захват массовыйПредупредите пользователей и перезапустите рабочие процессы кластера

Профилактика повторных захватов

Большинство повторяющихся захватов — следствие настройки, а не случайность. Настройте в кластере параметры завершения неактивных сеансов: тайм-аут разрыва соединений и завершения спящих сеансов. Тогда «осиротевшие» соединения будут закрываться автоматически.

Следите за регламентными заданиями: длительные обработки стоит запускать в нерабочее время, а взаимоблокировки — разбирать по журналу регистрации и технологическому журналу. Если тяжёлые отчёты регулярно удерживают базу, рассмотрите их оптимизацию или вынос на копию базы.

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

Типичные ошибки
01
Перезагрузка сервера без диагностики — захват может вернуться, а причина останется ненайденной
02
Завершение процесса, который выполнял обновление конфигурации — риск рассинхронизации и повреждения данных
03
Игнорирование состояния idle in transaction в PostgreSQL — блокировки копятся и парализуют работу
04
Отсутствие тайм-аутов неактивных сеансов — зависшие соединения накапливаются снова и снова
Полезно вести историю инцидентов: фиксируйте, какой сеанс или задание вызвало захват и чем закончилось. Через несколько случаев обычно вырисовывается повторяющийся виновник — конкретный отчёт, обмен или интеграция — и проблема решается на уровне кода или расписания, а не постоянным ручным снятием захватов.
ПЗ
Практическое замечание

Проверка результата после снятия захвата

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

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

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

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

Список сеансов в консоли кластера
Норма

Только актуальные сеансы пользователей и заданий

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

Долгоживущие сеансы с зависшим вызовом СУБД

Активность на стороне СУБД
Норма

Нет запросов, выполняющихся аномально долго

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

Процессы в running или idle in transaction часами

Вход пользователей в базу
Норма

Вход и работа проходят без ошибок

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

Ошибки блокировок или отказ в соединении

Административные операции
Норма

Свойства базы изменяются, операции доступны

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

Ошибки занятости базы при любых действиях

Итог

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

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

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

Опасен ли статус «захвачено СУБД» для данных?

Сам по себе статус данных не портит — он лишь отражает занятость базы. Риск возникает при неправильном вмешательстве: принудительном прерывании обновления конфигурации, восстановления или реструктуризации. Поэтому перед любыми действиями проверьте, какая операция выполняется на базе.

Почему захват появляется, когда никто не работает?

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

Можно ли просто перезагрузить сервер 1С?

Технически можно, и захват снимется, но это крайняя мера: разорвутся все сеансы, пользователи потеряют несохранённую работу, а причина проблемы останется неизвестной и повторится. Сначала попробуйте точечно завершить зависший сеанс или процесс.

Что такое idle in transaction и почему это опасно?

Это состояние соединения в PostgreSQL, при котором транзакция открыта, но ничего не выполняет. Такое соединение удерживает блокировки и мешает обслуживанию таблиц. Возникает обычно из-за ошибок в коде, где транзакция не завершается. Лечится завершением backend-процесса и исправлением кода.

Как отличить захват от установленной блокировки сеансов?

Блокировка сеансов — это настройка, которую администратор включает вручную в свойствах информационной базы (например, для обновления); она сопровождается сообщением и кодом разрешения. Захват — объективное состояние занятости базы процессом. Проверьте свойства базы в консоли: если блокировка установлена, её достаточно снять.

Захват появляется регулярно в одно и то же время — что делать?

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