Как исправить ошибку разделенного доступа к базе данных и дублирования идентификаторов метаданных в РИБ 1С?

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

При сопровождении и обновлении распределенных информационных баз (РИБ) на платформе 1С:Предприятие 8.3 специалисты часто сталкиваются со следующей проблемой: при попытке применить изменения в периферийной базе данных система выдает сообщение «Ошибка разделенного доступа к базе данных. База данных заблокирована». Попытки повторного обмена и перезапуска не приносят результатов, а принудительный запуск обновления может вызвать сопутствующую ошибку: «Не удалось выполнить замену дублей идентификаторов объектов метаданных. Выполните действие в монопольном режиме».

В данной статье мы подробно проанализируем причины возникновения этой цепочки ошибок на примере конфигурации 1С:Розница (работающей под управлением Библиотеки стандартных подсистем — БСП) и разберем по шагам эффективные методы борьбы с ними в файловом варианте работы базы данных.

Выясняем причины возникновения ошибок

Для начала разберем природу этих неполадок. Почему платформа требует монопольный доступ и откуда берутся дубликаты идентификаторов?

  1. Суть ошибки разделенного доступа: Процедура обновления конфигурации или обработчики обновления БСП осуществляют реструктуризацию таблиц базы данных и перезапись системных каталогов. Для безопасности этих транзакций платформе необходим полный монопольный доступ к файлу 1Cv8.1CD. Если в этот момент к базе подключен хотя бы один сеанс (включая скрытые сессии, веб-серверы, фоновые или регламентные задания), платформа блокирует операцию.
  2. Зависание сеансов и файлов блокировок: В файловых базах физическое отсутствие пользователей в программе не всегда означает отсутствие блокировок. В каталоге базы часто зависают временные файлы блокировок (с расширением .1CL, .cdn или .lck), которые «обманывают» платформу, заставляя ее думать, что база кем-то занята. Кроме того, фоновые процессы операционной системы или зависшие в памяти процессы 1cv8.exe могут продолжать удерживать файл базы данных.
  3. Дублирование идентификаторов метаданных: Этот сбой связан с логикой работы БСП. При изменении метаданных в центральной базе (ЦБ) и передаче изменений в подчиненный узел, БСП пытается актуализировать данные в системном справочнике ИдентификаторыОбъектовМетаданных. Если в подчиненном узле этот справочник поврежден или содержит некорректные записи, БСП пытается сопоставить новые объекты и устранить дубли. Однако эта операция требует жесткого монопольного режима. Если система не может его обеспечить, после 10 неудачных автоматических попыток процесс прерывается аварийно.

Рассмотрим по шагам комплексное решение этой проблемы, двигаясь от простых административных мер к программным методам исправления структуры данных.

Шаг 1. Обеспечение реального монопольного доступа к файловой базе

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

  1. Завершение процессов: Закроем все активные сеансы работы с 1С на компьютере, где физически расположена база. Откроем Диспетчер задач операционной системы и убедимся, что в списке процессов отсутствуют запущенные экземпляры 1cv8.exe, 1cv8c.exe или 1cv8s.exe. Если они есть — завершим их принудительно.
  2. Остановка публикации: Если база опубликована на веб-сервере (IIS или Apache) для работы по HTTP/HTTPS, временно остановим службу веб-сервера. Веб-сервер держит постоянное фоновое соединение с пулом баз, что препятствует получению монопольного доступа.
  3. Удаление файлов блокировок: Перейдем в каталог файловой базы данных. Нам нужно найти и вручную удалить временные файлы со следующими расширениями:
    • *.1CL — файлы блокировок базы данных.
    • *.cdn — файлы блокировки установки обновлений.
    • *.lck — файлы локальных блокировок сеансов.
    Важно: Ни в коем случае не трогайте основной файл базы данных 1Cv8.1CD.
  4. Очистка локального кэша: Часто некорректная информация о сессиях кэшируется самой платформой. Удалим каталоги кэша пользователя по путям:
    • %userprofile%\AppData\Local\1C\1Cv8\
    • %userprofile%\AppData\Roaming\1C\1Cv8\

Шаг 2. Запуск принудительного обновления из командной строки

Если интерактивный запуск в режиме «Предприятие» сразу прерывается ошибкой разделенного доступа, мы можем заставить платформу выполнить процедуры обновления БСП в жестком монопольном режиме через командную строку. Это позволит обойти запуск стандартного интерфейса и сразу инициализировать обработчики.

Откроем командную строку (cmd) и выполним запуск 1С с параметром ЗапуститьОбновлениеИнформационнойБазы:


"C:\Program Files\1cv8\8.3.13.1865\bin\1cv8.exe" ENTERPRISE /F "C:\Put_K_Vashey_Baze" /N "ИмяАдминистратора" /P "Пароль" /C ЗапуститьОбновлениеИнформационнойБазы /UC КодРазрешения

Разберем подробнее используемые ключи запуска:

Шаг 3. Программная очистка дублей идентификаторов объектов метаданных

Если принудительное обновление все равно сообщает об ошибке «Не удалось выполнить замену дублей...», это означает, что в базе-приемнике (периферийном узле) справочник идентификаторов метаданных сильно поврежден или содержит дублирующиеся записи, которые БСП не может сопоставить автоматически.

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

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


ПараметрыОбновления = Новый Структура;
ПараметрыОбновления.Вставить("ЗапускатьВФоновомРежиме", Ложь);
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Истина);

Переданные параметры (Истина, Истина) указывают системе на необходимость полной перезаписи справочника и автоматического слияния дублирующихся элементов.

Если это не помогло из-за жестких ссылок, применим более радикальный («хирургический») способ очистки. Проанализируем ситуацию: мы можем попытаться удалить все записи из справочника ИдентификаторыОбъектовМетаданных непосредственно. Те элементы, которые связаны с реальными документами или справочниками в базе данных, платформа удалить не позволит (сработает исключение), а «битые» и неиспользуемые дубликаты будут успешно стерты.

Выполним следующий код:


Выборка = Справочники.ИдентификаторыОбъектовМетаданных.Выбрать();
СистематическиеОшибки = 0;

Пока Выборка.Следующий() Цикл
    Попытка
        ОбъектИдентификатора = Выборка.ПолучитьОбъект();
        ОбъектИдентификатора.Удалить();
    Исключение
        // Элемент используется реальными объектами базы данных, пропускаем его
        СистематическиеОшибки = СистематическиеОшибки + 1;
    КонецПопытки;
КонецЦикла;

// После удаления зависших дублей инициируем штатное заполнение справочника
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Истина);

Этот способ позволяет точечно вычистить «мусорные» записи, которые мешали штатному механизму обновления БСП сопоставить метаданные.

Шаг 4. Использование Тестирования и Исправления (ТиИ)

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

  1. Запустим 1С в режиме Конфигуратор монопольно.
  2. Перейдем в меню Администрирование — Тестирование и исправление.
  3. Установим флаги напротив следующих проверок:
    • Реструктуризация таблиц информационной базы.
    • Проверка ссылочной целостности информационной базы.
  4. В настройках действий при наличии битых ссылок выберем: «Очищать объекты» или «Создавать дефолтные объекты» (в зависимости от учетной политики вашей системы).
  5. Нажмем кнопку Выполнить и дождемся завершения процесса. После этого повторим запуск процедуры обновления в режиме Предприятия.

Шаг 5. Кардинальный метод для распределенных баз (РИБ)

В распределенных информационных базах справочник ИдентификаторыОбъектовМетаданных периферийной базы должен строго соответствовать аналогичному справочнику центральной базы. Если все вышеописанные методы не помогают, мы можем пойти по пути полной синхронизации этого справочника из ЦБ.

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

Используя предложенные инструкции последовательно, вы гарантированно решите проблему разделенного доступа и дублирования метаданных при обновлении файловых баз 1С.

← На главную