Как исправить ошибку «Не удалось заблокировать таблицу» в файловой базе 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

Работа с файловыми базами данных 1С:Предприятие объемом более 2–3 Гб часто преподносит неприятные сюрпризы системным администраторам и программистам. Одной из наиболее распространенных и критических проблем является блокировка таблиц при попытке проведения документов. Пользователи начинают жаловаться на регулярные сообщения вида «Не удалось заблокировать таблицу _INFORG15325» или аналогичные ошибки, связанные с системными таблицами.

В этой статье мы подробно разберем, почему возникают подобные сбои, как правильно проанализировать технологический журнал 1С, расшифровать имена «загадочных» таблиц, а также рассмотрим пошаговые методы лечения базы данных и способы облегчения жизни пользователям без дорогостоящего перехода на клиент-серверный вариант (MS SQL / PostgreSQL).

Выясняем причину: что за таблица блокируется?

Когда платформа выдает ошибку с загадочным именем вроде _INFORG15325, администраторы часто пытаются найти эту таблицу внешними утилитами, но не всегда преуспевают. В СУБД или внутреннем файле базы данных 1Cv8.1CD все объекты конфигурации (справочники, документы, регистры) хранятся под физическими именами, которые формирует сама платформа.

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


СтруктураБазы = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Таблица Из СтруктураБазы Цикл
    Если Таблица.ИмяТаблицыХранения = "_INFORG15325" Тогда
        Сообщить("Имя таблицы в конфигурации: " + Таблица.ИмяТаблицы);
        Сообщить("Метаданные: " + Таблица.Метаданные);
        Прервать;
    КонецЕсли;
КонецЦикла;

В большинстве типовых конфигураций, таких как «Управление торговлей 11» (УТ 11), таблица _INFORG15325 (или аналогичные индексы _INFORG) соответствует регистру сведений РегистрСведений.ВерсииОбъектов. Этот регистр отвечает за хранение истории изменений (версионирование) документов и справочников. При каждом проведении или записи любого документа система пытается сделать запись в эту таблицу. Если в базе одновременно работают несколько пользователей, возникает жесткая конкуренция за доступ к этому регистру.

Почему отключение версионирования меняет имя таблицы, но не решает проблему?

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

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

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

Анализируем технологический журнал: расшифровка логов

Для детальной диагностики настроим Технологический журнал (ТЖ) 1С. При анализе логов ТЖ во время возникновения ошибки проведения мы можем столкнуться со следующими строками исключений (EXCP):


EXCP,1,process=1cv8,Usr=Юзер,Exception=9db1fa37-b455-4f3f-b8dd-7de0ea7d6da3,
Descr="src\ClientFileCacheImpl.cpp(276): 9db1fa37-b455-4f3f-b8dd-7de0ea7d6da3: 
Файл не обнаружен 'v8stg64://c:/3/DynamicalWorkCache': src\Storage64.cpp(3116)"

Эта ошибка указывает на повреждение локального кэша динамического обновления конфигурации. Динамическое обновление (обновление базы «на лету», когда в ней работают пользователи) — злейший враг файловых баз данных. Оно приводит к рассинхронизации локальных кэшей пользователей и структуры таблиц в файле 1Cv8.1CD. База начинает «сходить с ума», хаотично блокируя таблицы транзакций.

Вторая характерная ошибка в логах:


EXCP,1,process=1cv8,Usr=Юзер,Exception=DatabaseException8,
Descr="Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) 
не выполнено 'DATAZONEOBJECTLOCKS'"

Это прямое следствие затянувшихся транзакций и сетевых задержек при обращении к общему файлу базы по сети.

Пошаговый план лечения и оптимизации файловой базы

Рассмотрим последовательность действий, которая поможет полностью очистить базу от накопившихся ошибок и оптимизировать ее работу для пользователей.

Шаг 1. Борьба с последствиями динамических обновлений (Выгрузка/Загрузка ИБ)

Если в базе накопились ошибки кэша конфигурации, стандартное «Тестирование и исправление» (ТиИ) может не помочь. Нам необходимо полностью пересобрать структуру базы данных. Выполним следующие шаги:

  1. Попросим всех пользователей полностью выйти из 1С.
  2. Откроем базу в режиме Конфигуратор.
  3. Перейдем в меню Администрирование — Выгрузить информационную базу... и сохраним резервную копию в файл с расширением .dt.
  4. Создадим абсолютно новую, пустую папку на диске.
  5. Добавим в список баз 1С новую пустую информационную базу, указав путь к созданной папке.
  6. Запустим эту новую базу в режиме Конфигуратор.
  7. Перейдем в меню Администрирование — Загрузить информационную базу... и выберем ранее созданный файл .dt.

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

Шаг 2. Очистка временных файлов сетевых блокировок

При аварийных завершениях работы 1С (выключение компьютера пользователя, сбои Wi-Fi/сетевого кабеля) в каталоге базы данных остаются «зависшие» маркеры блокировок. Выполним ручную очистку:

  1. Убедимся, что ни один пользователь не подключен к базе данных.
  2. Откроем папку, где физически лежит файл базы данных 1Cv8.1CD.
  3. Внимание! Файл 1Cv8.1CD трогать нельзя — это сама база.
  4. Удалим все остальные файлы в этой папке. Особое внимание уделим файлам со следующими расширениями: *.1CL, *.1CD.cfl, *.1CL.cfl, а также временным папкам удаленного доступа.

Эти файлы создаются платформой динамически для фиксации активных сессий и транзакций. Их очистка исключает ложные «фантомные» блокировки.

Шаг 3. Использование встроенной утилиты chdbfl.exe

Для поиска физических повреждений файловой структуры базы воспользуемся штатной утилитой проверки:

  1. Перейдем в каталог установки платформы 1С на компьютере (обычно это путь вида C:\Program Files\1cv8\номер_версии\bin\).
  2. Найдем и запустим файл chdbfl.exe.
  3. В поле «Имя файла БД» укажем путь к нашему основному файлу базы 1Cv8.1CD.
  4. Установим флаг «Исправлять обнаруженные ошибки» и запустим проверку.

Радикальные способы ускорения работы пользователей

Если база весит около 3 Гб и с ней одновременно работают более 3–5 пользователей, даже самые чистые индексы со временем начнут давать сбои из-за ограничений сетевого протокола Windows. Сетевой протокол SMB, используемый для работы с «расшаренными» папками, накладывает огромные задержки на транзакции файловой базы. Разберем архитектурные решения, которые позволят раз и навсегда забыть об этой проблеме.

Вариант А. Публикация базы на веб-сервере (Apache или IIS)

Это самый эффективный, быстрый и абсолютно бесплатный способ оптимизации. Вместо того чтобы открывать файл базы напрямую по сети через общий доступ Windows, мы настроим локальный веб-сервер:

  1. На компьютере, где физически лежит база (назовем его сервером), устанавливаем бесплатный веб-сервер Apache или включаем стандартный компонент Windows IIS.
  2. В Конфигураторе 1С под правами Администратора переходим в меню Администрирование — Публикация на веб-сервере....
  3. Выбираем установленный веб-сервер, указываем имя публикации и нажимаем кнопку «Опубликовать».
  4. На компьютерах пользователей в окне запуска 1С меняем тип подключения. Вместо «На данном компьютере или в локальной сети» выбираем «На веб-сервере» и указываем HTTP-ссылку на нашу публикацию.

При такой схеме работы пользователи подключаются через Тонкий клиент. Все обращения к файлу базы данных 1Cv8.1CD происходят строго локально на самом веб-сервере силами одного процесса. Сетевой трафик минимизируется, транзакции выполняются мгновенно, а ошибки блокировок таблиц исчезают практически полностью.

Вариант Б. Настройка исключений антивирусов и Windows Search

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

Для предотвращения подобных ситуаций выполним следующие настройки:

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

← На главную