Блокировка информационной базы 1С в клиент-серверном режиме: найти причину и снять
Содержание
Если пользователи не могут войти в базу, начните с консоли администрирования серверов 1С: откройте свойства информационной базы и снимите флажок Блокировка начала сеансов включена. Это решает больше половины случаев. Если флажок уже снят, а база всё равно «висит», причина глубже: зависший сеанс, незавершённая транзакция или блокировка на стороне СУБД.
Слово «блокировка» в 1С значит четыре разных вещи. Запрет входа, поставленный администратором или обновлением. Запрет регламентных заданий. Управляемая блокировка данных, которую держит чужой сеанс. И блокировка строк или таблиц в самой СУБД. Лечатся они по-разному, поэтому сначала определите, какая у вас.
Определите, какая блокировка у вас
Посмотрите на симптом: от него зависит, куда идти дальше.
rac: нужно снять флажок блокировки в свойствах базы.Прежде чем что-то снимать, узнайте, кто и зачем её поставил. Во время обновления конфигурации, загрузки .dt или реструктуризации базу блокируют намеренно. Снять запрет посреди такой операции значит рискнуть данными.
Если в базе идёт обновление или реструктуризация, подождите. Лучше потерять час, чем получить повреждённую информационную базу. Перед любыми действиями с рабочей базой делайте резервную копию и согласуйте работы с регламентом организации.
Быстрая проверка перед началом
- 🔍 Узнайте у коллег, не запущено ли обновление, выгрузка в файл или тестирование и исправление.
- 🔍 Проверьте, что вы подключаетесь к нужному кластеру и нужной базе: тестовая и рабочая часто называются похоже.
- 🔍 Убедитесь, что у вас есть права администратора кластера. Без них свойства базы откроются, но сохранить изменения не получится.
Снятие запрета входа через консоль администрирования серверов
Консоль администрирования серверов 1С входит в состав платформы. Запускается как оснастка и подключается к центральному серверу, обычно по порту 1545.
- Откройте консоль и разверните
Центральные серверы 1С:Предприятия 8.3. Если вашего сервера нет, добавьте его: имя и порт менеджера кластера. - Разверните нужный кластер. При запросе введите имя и пароль администратора кластера, если они заданы.
- Перейдите в
Информационные базыи откройте свойства своей базы двойным щелчком. - Найдите флажок
Блокировка начала сеансов включенаи снимите его. - Проверьте соседние поля: время начала и конца блокировки, сообщение и код разрешения. Если время окончания уже прошло, а флажок остался, чистите и его.
- Если нужен флажок
Блокировка регламентных заданий включена, снимите и его: без этого обмены и фоновые процессы не стартуют. - Нажмите
ОКи попробуйте войти в базу.
Если вы сами поставили блокировку для технических работ, задайте время окончания. Тогда запрет снимется по расписанию, и вы не забудете про него в пятницу вечером.
Вход под блокировкой: код разрешения
Администратору иногда нужно зайти, пока остальные заблокированы. Для этого в свойствах базы задают Код разрешения, а при запуске клиента передают его параметром /UC:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S "сервер\база" /N "Админ" /UCмойкод
Путь к программе запуска зависит от установки, подставьте свой. Так вы проверите базу изнутри, не открывая вход остальным.
Если в вашей конфигурации есть форма Активные пользователи, в ней обычно можно включить и отключить блокировку работы пользователей из самой программы, без консоли кластера. Откройте раздел Администрирование и найдите пункт про поддержку и обслуживание.
Сеансы и соединения: кто держит базу
Если флажок снят, а проблема осталась, смотрите, кто сейчас подключён. В консоли это узлы под выбранной базой.
- 👥
Сеансы— все пользовательские и фоновые сеансы: пользователь, приложение, время начала, последняя активность. - 🔌
Соединения— технические подключения к рабочим процессам. - 🔒
Блокировки— какие блокировки держатся и какой сеанс их держит.
Зависший сеанс выглядит так: пользователь давно закрыл программу или потерял связь, а запись в списке осталась, и время последней активности не меняется. Часто такой сеанс держит управляемую блокировку и мешает остальным.
Чтобы завершить сеанс, щёлкните его правой кнопкой и выберите Удалить. Если сеанс не уходит, сначала завершите связанное соединение.
Завершение сеанса обрывает работу человека: несохранённые данные пропадут. Предупредите пользователя или убедитесь, что сеанс действительно брошенный. Если сеанс выполняет длинный фоновый процесс (закрытие месяца, проведение пачки документов), не трогайте его, пока процесс не закончится или вы не уверены, что он завис.
Как отличить зависший сеанс от занятого? Посмотрите на столбцы со временем процессора и вызовами. Если за несколько минут они растут, сеанс работает. Если стоят на месте, а в «блокировках» он числится держателем, это кандидат на завершение.
Управление блокировками через утилиту rac
Когда консоли под рукой нет, работает командная строка. Утилита rac ставится вместе с сервером 1С. Ей нужен запущенный сервис администрирования ras, к которому она подключается. Если rac не отвечает, сначала проверьте, что ras запущен и слушает свой порт.
Идентификаторы в rac — это длинные GUID. Сначала узнаёте их, потом подставляете в команды:
rac cluster list
rac infobase summary list --cluster=<идентификатор_кластера>
Затем смотрите состояние базы и список сеансов:
rac infobase info --cluster=<кластер> --infobase=<база>
rac session list --cluster=<кластер> --infobase=<база>
rac lock list --cluster=<кластер> --infobase=<база>
В выводе infobase info есть поля запрета сеансов и запрета регламентных заданий. Снять запрет можно командой rac infobase update с параметрами --sessions-deny=off и --scheduled-jobs-deny=off. Если у базы заданы имя и пароль администратора, добавьте параметры авторизации. Точный набор параметров зависит от версии платформы, поэтому сверяйтесь с rac help infobase.
Завершить зависший сеанс по идентификатору:
rac session terminate --cluster=<кластер> --session=<сеанс>
Как и в консоли, это сразу прервёт работу пользователя.
| Способ | Когда использовать | Риск |
|---|---|---|
| Консоль кластера | Есть доступ к серверу или удалённой консоли, нужна наглядность | Низкий, видно, что именно вы меняете |
rac | Нужна автоматизация, консоли нет, доступ только по ssh | Средний: легко перепутать GUID базы |
| Из программы | Блокировку ставил администратор через пользовательский интерфейс | Низкий |
| Завершение процессов на ОС | Консоль не отвечает, сеансы не удаляются | Высокий: обрывает всех |
Когда виноват сервер: процессы и файлы
Если консоль не удаляет сеанс, а рабочий процесс не реагирует, проблема на уровне операционной системы. Посмотрите три вещи.
Рабочие процессы
За работу пользователей отвечают процессы rphost, за менеджер кластера — ragent и rmngr. Зависший rphost может держать сеансы нескольких баз. Прежде чем его завершать, убедитесь, что на нём нет живых сеансов, или заранее предупредите всех.
Принудительное завершение rphost или остановка службы сервера 1С отключает всех пользователей всех баз на этом сервере. Делайте это только в согласованное окно, когда крайне нужно, и после сохранения данных.
В Windows rphost завершают через диспетчер задач, в Linux — командой kill по идентификатору процесса. Кластер сам поднимет новый процесс.
Каталог кластера и права
У сервера 1С есть каталог служебных данных кластера (по умолчанию srvinfo). Там хранится реестр кластера и журналы. Что проверить:
- 💾 Свободное место на диске. Если оно закончилось, сервер перестаёт записывать данные, и база «зависает».
- 🔑 Права учётной записи, от которой работает служба сервера: она должна писать в каталог кластера.
- 📁 Не удаляйте служебные файлы реестра кластера вручную. Это ломает кластер, а не разблокирует его.
Файловая база на сервере
Если база файловая, а не клиент-серверная, блокировку держит сам файл базы: пока кто-то из пользователей работает, его служебные файлы заняты. Тогда достаточно завершить зависшие процессы 1cv8 на рабочих местах. Для клиент-серверной базы файлы на диске вручную не трогают вообще.
Блокировки в СУБД: PostgreSQL и MS SQL
Иногда ни консоль, ни rac блокировок не показывают, а программа тормозит. Тогда держит СУБД. Типичные причины: транзакция, которую открыли и не закрыли, или тяжёлый запрос, заблокировавший нужные таблицы.
PostgreSQL
Сначала найдите заблокированные и блокирующие процессы:
SELECT pid, pg_blocking_pids(pid) AS blocked_by, state, query
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;
Если запрос вернул строки, в blocked_by указан процесс, который держит блокировку. Посмотрите, что он делает:
SELECT pid, state, xact_start, query
FROM pg_stat_activity
WHERE pid = <номер_блокирующего>;
Состояние idle in transaction с давним xact_start означает, что транзакцию открыли и забыли закрыть. Завершить процесс можно так:
SELECT pg_terminate_backend(<номер>);
MS SQL Server
Блокировки показывает представление запросов:
SELECT session_id, blocking_session_id, wait_type, wait_time, status
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
Номер из blocking_session_id — это сеанс-«голова» цепочки. Для быстрого обзора подойдёт sp_who2. Завершить сеанс можно командой KILL <номер_сеанса>.
Принудительное завершение сеанса СУБД откатывает его транзакцию. Если она большая (проведение тысяч документов), откат может идти долго и сам будет держать блокировки. Не убивайте процесс повторно, если база не ожила сразу.
Сопоставить сеанс СУБД с пользователем 1С помогает список соединений в консоли кластера или технологический журнал. Без этого легко убить не тот процесс, а в рабочей базе ошибка стоит дорого.
Как не ловить блокировки снова
Разовое снятие запрета не лечит причину. Если блокировки повторяются, проверьте:
- 🕒 Регламентные задания. Тяжёлые задания (пересчёт итогов, обмены, закрытие периода ) запускайте ночью, а не в разгар рабочего дня.
- 🔁 Длинные транзакции. Обработки, которые проводят тысячи документов одной транзакцией, держат блокировки всё время. Пакетную обработку делайте порциями.
- 🚪 Забытая блокировка входа. Если после обновления или выгрузки запрет не снимается, задавайте время окончания при установке, а не оставляйте блокировку бессрочной.
- ⚙️ Настройки кластера и СУБД. Следите за версией платформы, обновляйте её, а на стороне СУБД поддерживайте обслуживание таблиц и статистику.
- 📊 Мониторинг. Раз в неделю смотрите, нет ли сеансов с давно не меняющейся активностью.
Если у вас часто встречается конфликт блокировок при проведении, откройте технологический журнал и настройте сбор событий управляемых блокировок: он покажет, кто и на какой ресурс конкурировал.
Если ничего не помогло
Пройдите по порядку, от безопасного к радикальному:
- Снимите запрет входа и запрет регламентных заданий в свойствах базы.
- Завершите брошенные сеансы выборочно.
- Найдите и устраните блокирующий процесс в СУБД.
- Завершите зависший
rphost, когда вы согласовали окно с пользователями. - Перезапустите службу сервера 1С: последняя мера, она отключает всех.
- Если база не открывается после аварийной остановки, восстанавливайте из резервной копии и не пытайтесь править файлы вручную.
Если после снятия запрета база всё равно не пускает, зафиксируйте точный текст ошибки, версию платформы и время события. С этими данными проще искать причину в журнале регистрации и технологическом журнале.
Частые вопросы
Можно ли снять блокировку, если нет доступа к консоли кластера?
rac infobase update.Почему блокировка возвращается после снятия?
rac. Найдите, кто устанавливает запрет, и поправьте сценарий.Что такое код разрешения и где его взять?
/UC при запуске) можно войти в заблокированную базу. Забыли код — просто снимите блокировку целиком.Разблокировка удалит данные или сеансы?
Можно ли удалять файлы блокировок с диска сервера?
rac или СУБД.