Кто держит базу и как её освободить: разбор блокировок 1С 8.3

· 10 мин

Содержание

Чтобы снять блокировку в 1С, сначала найдите сеанс, который её держит: Главное меню → Функции для технического специалиста → Стандартные → Активные пользователи или консоль администрирования серверов 1С. Затем завершите этот сеанс либо снимите запрет на вход в свойствах информационной базы. Если база не открывается из-за блокировки начала сеансов, помогает запуск с кодом разрешения через параметр /UC.

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

Какие блокировки бывают в 1С и как узнать свою

Начните с текста сообщения. По нему почти всегда видно, с чем вы столкнулись.

Вид блокировкиКак проявляетсяГде снимать
🔒 Объектная (пессимистическая)Ошибка блокировки объекта. Объект уже заблокирован при записи документа или элементаЗакрыть форму у другого пользователя или завершить его сеанс
⏳ Транзакционная (управляемая)Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировкиНайти виновника в технологическом журнале, оптимизировать код или регламент
🚪 Блокировка начала сеансовСообщение администратора при входе, база не пускаетСвойства базы в консоли кластера, обработка блокировки или /UC
🛠 Блокировка для конфигурированияОшибка блокировки информационной базы для конфигурирования при обновлении структурыЗавершить все сеансы, затем повторить обновление
🗄 Блокировка СУБДЗапросы висят, в 1С ошибка таймаута, в SQL видна цепочка ожиданийСредства MS SQL или PostgreSQL
📁 Файловая базаБаза не открывается, хотя все вышлиНайти процессы 1cv8.exe, проверить файл 1Cv8.1CL

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

Транзакционные блокировки живут, пока идёт транзакция. Таймаут ожидания управляемой блокировки по умолчанию — 20 секунд. Если документ проводится дольше, второй пользователь получает ошибку конфликта.

Поиск зависших сеансов: кто сейчас в базе

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

Список активных пользователей в самой базе

  1. Откройте Главное меню → Функции для технического специалиста. Если пункта нет, включите его: Сервис и настройки → Параметры → Отображать команду «Функции для технического специалиста».
  2. Перейдите в Стандартные → Активные пользователи.
  3. Посмотрите колонки: пользователь, компьютер, приложение, начало работы, номер сеанса.

В типовых конфигурациях на БСП (Бухгалтерия 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С:Предприятие

Завершить чужой сеанс

  1. Откройте список активных пользователей (раздел выше).
  2. Выделите строку зависшего сеанса.
  3. Нажмите «Завершить сеанс».

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

Установить или снять запрет на вход

Перед обновлением или закрытием периода базу закрывают для всех. В конфигурациях на БСП это делается в Администрирование → Обслуживание → Блокировка работы пользователей.

Что можно задать:

  • 📅 период действия блокировки;
  • 💬 текст сообщения для пользователей;
  • 🔑 код разрешения — с ним администратор войдёт даже при активной блокировке.

Чтобы снять запрет, откройте ту же форму и нажмите «Снять блокировку». Если сеанс администратора тоже не пускают, войдите с кодом разрешения:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /UC"12345"

Ещё один вариант для конфигураций на БСП — запуск с параметром, который снимает блокировку сразу при входе:

1cv8.exe ENTERPRISE /S"srv1c\buh" /C"РазрешитьРаботуПользователей" /UC"12345"

Если код разрешения забыли, а база закрыта, снимайте блокировку в консоли кластера — это быстрее, чем подбирать код.

Разблокировка базы через консоль кластера и rac

Блокировка начала сеансов хранится в свойствах информационной базы на сервере 1С. Её можно снять в обход самой конфигурации.

В консоли

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

Через 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 на компьютерах пользователей.

  1. Узнайте у пользователей, кто не вышел, или посмотрите открытые файлы базы в «Управлении компьютером» на машине с общей папкой (Общие папки → Открытые файлы).
  2. Закройте программу у этого пользователя или закройте открытый файл на сервере.
  3. Файл 1Cv8.1CL в каталоге базы удаляйте только если уверены, что в базе никого нет. Иначе рискуете повредить данные.

Блокировки в Конфигураторе и хранилище

Ошибка при обновлении конфигурации базы данных

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

Как поступить:

  1. Посмотрите, кто в базе: в Конфигураторе Администрирование → Активные пользователи.
  2. Попросите пользователей выйти или закройте базу для входа одним из способов выше.
  3. В клиент-серверном варианте Конфигуратор при ошибке предлагает завершить сеансы и повторить. Пользуйтесь этим, только если уверены, что никто не проводит документы.
  4. Повторите Конфигурация → Обновить конфигурацию базы данных.

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

Захваченные объекты в хранилище

Если разработчик захватил объекты в хранилище конфигурации и уволился или уехал, остальные не смогут их править.

  1. Попросите владельца поместить изменения или выполнить «Отменить захват».
  2. Если владельца нет, администратор хранилища открывает список пользователей хранилища, задаёт этому пользователю новый пароль и подключается от его имени.
  3. Из-под него выполните «Отменить захват» в окне хранилища. Его незафиксированные изменения при этом будут потеряны.

Технологический журнал: кто кого ждёт

Когда пользователи жалуются на ошибки конфликта блокировок, список сеансов не поможет: блокировка живёт секунды. Виновника показывает технологический журнал (ТЖ).

Настройка 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 — кто кого держал

Порядок разбора:

  1. Найдите событие TTIMEOUT по времени жалобы.
  2. Возьмите из WaitConnections номер соединения.
  3. Найдите события 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.
  • 🧾 Не выдавайте полные права бухгалтерам «для удобства»: случайное завершение сеанса коллеги откатит его проведение.

Настройки конфигурации

  • ⚙️ Проверьте режим блокировок: в Конфигураторе свойства корня конфигурации, поле «Режим управления блокировкой данных». Типовые конфигурации работают в управляемом режиме. Самописная база в автоматическом режиме блокирует таблицы шире, чем нужно.
  • ⏱ Держите транзакции короткими. Тяжёлые выборки и обращения к внешним сервисам выносите за пределы транзакции.
  • 🌙 Обмены, закрытие месяца , пересчёт итогов и групповое перепроведение запускайте вне рабочего времени.

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

Перед монопольными работами
Выполнено: 0 / 5

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

Можно ли снять блокировку, не выгоняя пользователя?
Объектную — да: достаточно, чтобы он закрыл форму документа. Транзакционная снимется сама, когда завершится его операция.
Почему завершённый сеанс снова появляется в списке?
Клиент с включённым переподключением восстанавливает соединение. Если сеанс зависший, проверьте процесс 1cv8.exe на компьютере пользователя и закройте его там.
Влияет ли зависший сеанс на лицензии?
Да. Пока сеанс висит, он занимает клиентскую лицензию, и другому пользователю её может не хватить.
Где посмотреть, кто и когда завершил мой сеанс?
В журнале регистрации: Функции для технического специалиста → Стандартные → Журнал регистрации, отбор по событиям сеансов.
Нужно ли удалять файл logcfg.xml после диагностики?
Да. Журнал продолжит писаться и займёт место на диске, а запись событий нагружает сервер.