Кто держит базу и как её освободить: разбор блокировок 1С 8.3
Содержание
Чтобы снять блокировку в 1С, сначала найдите сеанс, который её держит: Главное меню → Функции для технического специалиста → Стандартные → Активные пользователи или консоль администрирования серверов 1С. Затем завершите этот сеанс либо снимите запрет на вход в свойствах информационной базы. Если база не открывается из-за блокировки начала сеансов, помогает запуск с кодом разрешения через параметр /UC.
Блокировки бывают разные: одна не даёт записать документ, другая не пускает в базу, третья тормозит всех пользователей. Способ разблокировки зависит от вида, поэтому сначала определите его, а уже потом завершайте сеансы. Так вы не выгоните из базы полбухгалтерии ради одного открытого документа.
Какие блокировки бывают в 1С и как узнать свою
Начните с текста сообщения. По нему почти всегда видно, с чем вы столкнулись.
| Вид блокировки | Как проявляется | Где снимать |
|---|---|---|
| 🔒 Объектная (пессимистическая) | Ошибка блокировки объекта. Объект уже заблокирован при записи документа или элемента | Закрыть форму у другого пользователя или завершить его сеанс |
| ⏳ Транзакционная (управляемая) | Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки | Найти виновника в технологическом журнале, оптимизировать код или регламент |
| 🚪 Блокировка начала сеансов | Сообщение администратора при входе, база не пускает | Свойства базы в консоли кластера, обработка блокировки или /UC |
| 🛠 Блокировка для конфигурирования | Ошибка блокировки информационной базы для конфигурирования при обновлении структуры | Завершить все сеансы, затем повторить обновление |
| 🗄 Блокировка СУБД | Запросы висят, в 1С ошибка таймаута, в SQL видна цепочка ожиданий | Средства MS SQL или PostgreSQL |
| 📁 Файловая база | База не открывается, хотя все вышли | Найти процессы 1cv8.exe, проверить файл 1Cv8.1CL |
Объектная блокировка — самая безобидная. Пользователь открыл документ и начал его менять, а второй пытается записать тот же документ. В сообщении платформа указывает пользователя, компьютер и время начала сеанса. Часто достаточно попросить коллегу закрыть форму.
Транзакционные блокировки живут, пока идёт транзакция. Таймаут ожидания управляемой блокировки по умолчанию — 20 секунд. Если документ проводится дольше, второй пользователь получает ошибку конфликта.
Поиск зависших сеансов: кто сейчас в базе
Зависший сеанс — частая причина. Пользователь закрыл ноутбук, а сеанс остался на сервере и держит блокировки или лицензию.
Список активных пользователей в самой базе
- Откройте
Главное меню → Функции для технического специалиста. Если пункта нет, включите его:Сервис и настройки → Параметры → Отображать команду «Функции для технического специалиста». - Перейдите в
Стандартные → Активные пользователи. - Посмотрите колонки: пользователь, компьютер, приложение, начало работы, номер сеанса.
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) тот же список есть в разделе Администрирование → Обслуживание. Из него можно завершить выделенный сеанс — нужны права администратора.
Консоль администрирования серверов
В клиент-серверном варианте консоль даёт больше данных. Разверните Центральный сервер → Кластеры → <кластер> → Информационные базы → <база> → Сеансы.
💡 Добавьте в список колонки «Захвачено СУБД» и «Время вызова СУБД (текущее)». Сеанс, который давно висит в вызове СУБД, — первый кандидат в виновники.
Ниже в той же ветке есть узел «Блокировки». В нём видны объектные блокировки с указанием сеанса-владельца.
Командная строка rac
Если консоли нет под рукой, работает утилита rac. Она подключается к серверу администрирования ras (порт по умолчанию 1545).
rac cluster list
rac session list --cluster=<uuid_кластера>
rac lock list --cluster=<uuid_кластера> --infobase=<uuid_базы>
Если на кластере заданы администраторы, добавьте --cluster-user и --cluster-pwd. Полный список параметров — в rac help session.
Снятие блокировки из режима 1С:Предприятие
Завершить чужой сеанс
- Откройте список активных пользователей (раздел выше).
- Выделите строку зависшего сеанса.
- Нажмите «Завершить сеанс».
Пользователь потеряет несохранённые данные, а его незавершённая транзакция откатится. Предупредите человека, если он на месте.
Установить или снять запрет на вход
Перед обновлением или закрытием периода базу закрывают для всех. В конфигурациях на БСП это делается в Администрирование → Обслуживание → Блокировка работы пользователей.
Что можно задать:
- 📅 период действия блокировки;
- 💬 текст сообщения для пользователей;
- 🔑 код разрешения — с ним администратор войдёт даже при активной блокировке.
Чтобы снять запрет, откройте ту же форму и нажмите «Снять блокировку». Если сеанс администратора тоже не пускают, войдите с кодом разрешения:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /UC"12345"
Ещё один вариант для конфигураций на БСП — запуск с параметром, который снимает блокировку сразу при входе:
1cv8.exe ENTERPRISE /S"srv1c\buh" /C"РазрешитьРаботуПользователей" /UC"12345"
Если код разрешения забыли, а база закрыта, снимайте блокировку в консоли кластера — это быстрее, чем подбирать код.
Разблокировка базы через консоль кластера и rac
Блокировка начала сеансов хранится в свойствах информационной базы на сервере 1С. Её можно снять в обход самой конфигурации.
В консоли
- Откройте свойства базы: правой кнопкой по базе → «Свойства».
- Введите логин и пароль администратора информационной базы.
- Снимите флажок «Блокировка начала сеансов включена».
- Если отключены регламентные задания, снимите и флажок «Блокировка регламентных заданий включена».
- Нажмите «ОК».
Через rac
rac infobase update --cluster=<uuid_кластера> --infobase=<uuid_базы> ^
--infobase-user="Администратор" --infobase-pwd="***" ^
--sessions-deny=off --scheduled-jobs-deny=off
Включение работает так же: --sessions-deny=on, плюс --denied-message и --permission-code для текста и кода.
Завершить сеанс на сервере
В консоли: узел «Сеансы» → правой кнопкой по сеансу → «Удалить». В rac:
rac session terminate --cluster=<uuid_кластера> --session=<uuid_сеанса>
Не перезапускайте службу «Агент сервера 1С:Предприятия», чтобы снять одну блокировку. Оборвутся сеансы всех пользователей всех баз кластера. Это крайняя мера, только в нерабочее время.
Файловая база
У файловой базы кластера нет. Блокировки держат процессы 1cv8.exe на компьютерах пользователей.
- Узнайте у пользователей, кто не вышел, или посмотрите открытые файлы базы в «Управлении компьютером» на машине с общей папкой (
Общие папки → Открытые файлы). - Закройте программу у этого пользователя или закройте открытый файл на сервере.
- Файл
1Cv8.1CLв каталоге базы удаляйте только если уверены, что в базе никого нет. Иначе рискуете повредить данные.
Блокировки в Конфигураторе и хранилище
Ошибка при обновлении конфигурации базы данных
Сообщение Ошибка блокировки информационной базы для конфигурирования появляется, когда изменения затрагивают структуру базы, а в ней работают пользователи. Для обновления структуры нужен монопольный доступ. Он же нужен для загрузки .dt и тестирования и исправления.
Как поступить:
- Посмотрите, кто в базе: в Конфигураторе
Администрирование → Активные пользователи. - Попросите пользователей выйти или закройте базу для входа одним из способов выше.
- В клиент-серверном варианте Конфигуратор при ошибке предлагает завершить сеансы и повторить. Пользуйтесь этим, только если уверены, что никто не проводит документы.
- Повторите
Конфигурация → Обновить конфигурацию базы данных.
💡 Для мелких правок без изменения структуры подходит динамическое обновление. Но после него пользователям всё равно придётся перезайти, а тяжёлые изменения лучше применять монопольно.
Захваченные объекты в хранилище
Если разработчик захватил объекты в хранилище конфигурации и уволился или уехал, остальные не смогут их править.
- Попросите владельца поместить изменения или выполнить «Отменить захват».
- Если владельца нет, администратор хранилища открывает список пользователей хранилища, задаёт этому пользователю новый пароль и подключается от его имени.
- Из-под него выполните «Отменить захват» в окне хранилища. Его незафиксированные изменения при этом будут потеряны.
Технологический журнал: кто кого ждёт
Когда пользователи жалуются на ошибки конфликта блокировок, список сеансов не поможет: блокировка живёт секунды. Виновника показывает технологический журнал (ТЖ).
Настройка logcfg.xml
Создайте файл logcfg.xml в каталоге conf платформы на сервере 1С, например C:\Program Files\1cv8\conf\:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="D:\TJ\locks" history="24">
<event><eq property="name" value="TLOCK"/></event>
<event><eq property="name" value="TTIMEOUT"/></event>
<event><eq property="name" value="TDEADLOCK"/></event>
<property name="all"/>
</log>
</config>
Платформа подхватит файл без перезапуска, обычно в течение минуты. history="24" хранит журнал 24 часа.
Отведите под ТЖ отдельный диск с запасом места. На нагруженном сервере события блокировок дают гигабайты за день. Удалите файл настройки, когда соберёте данные.
Что смотреть в событиях
| Событие | Что значит | Ключевые свойства |
|---|---|---|
TLOCK | Установка управляемой блокировки | Regions — пространство блокировки, Locks — поля и значения, WaitConnections — кого ждали |
TTIMEOUT | Не дождались блокировки за таймаут | WaitConnections — номер соединения-виновника |
TDEADLOCK | Взаимоблокировка | DeadlockConnectionIntersections — кто кого держал |
Порядок разбора:
- Найдите событие
TTIMEOUTпо времени жалобы. - Возьмите из
WaitConnectionsномер соединения. - Найдите события
TLOCKэтого соединения чуть раньше. ПоRegionsвидно, какой регистр заблокирован, по контексту — какой документ или обработка.
Быстрый поиск по файлам журнала
Файлы ТЖ — обычный текст, по одному на час в подкаталоге каждого процесса. Искать удобно прямо из командной строки:
findstr /S /C:",TTIMEOUT," D:\TJ\locks\*.log
findstr /S /C:"t:connectID=1234," D:\TJ\locks\*.log
Первая команда находит все таймауты, вторая — все события конкретного соединения. На Linux то же делает grep -r.
Типичная находка: регламентное задание обмена или закрытия месяца держит регистр накопления, пока пользователи проводят документы. Лечится переносом задания на ночь или сокращением транзакции.
Блокировки на уровне СУБД: MS SQL и PostgreSQL
Если в ТЖ всё чисто, а запросы висят, смотрите в СУБД. Это особенно актуально для конфигураций в автоматическом режиме блокировок: там блокировки ставит сама СУБД.
MS SQL Server
Кто кого блокирует:
SELECT r.session_id, r.blocking_session_id, r.wait_type,
r.wait_time / 1000 AS wait_sec, DB_NAME(r.database_id) AS db
FROM sys.dm_exec_requests r
WHERE r.blocking_session_id <> 0;
Головной блокирующий процесс — тот, кто встречается в blocking_session_id, но сам ничего не ждёт. Завершить его: KILL 57, где 57 — номер процесса.
PostgreSQL
SELECT pid, pg_blocking_pids(pid) AS blocked_by,
state, now() - xact_start AS tx_age, left(query, 80) AS q
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;
Мягко прервать запрос: SELECT pg_cancel_backend(<pid>);. Закрыть соединение целиком: SELECT pg_terminate_backend(<pid>);.
Принудительное завершение на стороне СУБД откатывает транзакцию, а пользователь 1С получает ошибку. Начинайте с отмены запроса, завершение соединения — следующий шаг.
💡 Чтобы связать процесс СУБД с сеансом 1С, смотрите в консоли кластера свойство соединения или поле db-proc-info в выводе rac session list.
Профилактика: права, режим блокировок и регламент
Снять блокировку — полдела. Важнее, чтобы она не повторялась.
Права доступа
- 👤 Завершать чужие сеансы и закрывать базу должен узкий круг: администраторы базы. В БСП это права из профиля «Администратор».
- 🔐 Задайте администратора кластера. Без него любой, кто видит сервер в сети, может удалить сеансы через консоль или
rac. - 🧾 Не выдавайте полные права бухгалтерам «для удобства»: случайное завершение сеанса коллеги откатит его проведение.
Настройки конфигурации
- ⚙️ Проверьте режим блокировок: в Конфигураторе свойства корня конфигурации, поле «Режим управления блокировкой данных». Типовые конфигурации работают в управляемом режиме. Самописная база в автоматическом режиме блокирует таблицы шире, чем нужно.
- ⏱ Держите транзакции короткими. Тяжёлые выборки и обращения к внешним сервисам выносите за пределы транзакции.
- 🌙 Обмены, закрытие месяца , пересчёт итогов и групповое перепроведение запускайте вне рабочего времени.
Регламент обслуживания
Частые вопросы
Можно ли снять блокировку, не выгоняя пользователя?
Почему завершённый сеанс снова появляется в списке?
Влияет ли зависший сеанс на лицензии?
Где посмотреть, кто и когда завершил мой сеанс?
Функции для технического специалиста → Стандартные → Журнал регистрации, отбор по событиям сеансов.