Переход на внешнее хранение двоичных данных вне СУБД — отличный способ оптимизировать размер информационной базы 1С, повысить скорость создания резервных копий СУБД и снизить нагрузку на сервер хранения данных. Однако у этого механизма есть обратная сторона. При нарушении связи между таблицами базы данных и внешними файлами администраторы часто сталкиваются с критической ошибкой: «Ошибка хранилища двоичных данных — Отсутствует запись в хранилище двоичных данных». Эта проблема полностью блокирует возможность выгрузки информационной базы в файл резервной копии .dt.
В этой статье мы подробно разберем природу возникновения данной ошибки, проанализируем, почему стандартные бэкапы SQL Server создаются без сбоев, и изучим пошаговые методы устранения неполадки с помощью встроенных инструментов платформы 1С:Предприятие.
Давайте выясним причину, по которой СУБД-бэкап (например, в формате .bak для Microsoft SQL Server) создается и восстанавливается абсолютно корректно, а попытка выгрузить базу средствами 1С в файл .dt завершается аварийно. Дело в принципиальной разнице подходов к резервному копированию:
Таким образом, возникновение данной ошибки свидетельствует о нарушении логической целостности связей между СУБД и внешним каталогом двоичных данных.
Самым эффективным и простым способом решения проблемы является запуск встроенного механизма тестирования и исправления конфигурации с корректными параметрами. Начиная с последних релизов платформы 1С v8.3, разработчики добавили в ТИИ специальный функционал для валидации внешних хранилищ.
Рассмотрим по шагам процесс запуска исправления:
.bak), так как исправление поврежденных ссылок может привести к удалению записей, не имеющих физических файлов.Процедура ТИИ проверит таблицу BinaryData, сопоставит её записи с реальным набором файлов во внешнем каталоге, исправит некорректные связи и удалит ссылки на сиротские объекты. После успешного завершения ТИИ попробуйте выполнить выгрузку в .dt заново.
Если вы предпочитаете выполнять обслуживание баз данных в автоматическом режиме в нерабочее время, мы можем настроить аналогичную процедуру через командную строку Windows или Linux. Для регламентного обслуживания нескольких баз можно использовать программу для автоматического обновления, тестирования и архивирования баз 1С. Пример команды для запуска ТИИ:
"C:\Program Files\1cv8\8.3.27.2130\bin\1cv8.exe" DESIGNER /S "ИмяСервера\ИмяБазы" /N "Администратор" /P "Пароль" /IBCheckAndRepair -Rebuild -IBDataIntegrity -BinaryData -CleanRefs
Иногда возникновение ошибки связано не с реальным повреждением базы данных, а с ошибками кода самой технологической платформы 1С. В официальном багборде 1С зарегистрирован баг под номером 60025066 (и смежный 60023075), который вызывает ошибку блочного хранения двоичных данных при попытке чтения констант или выгрузки ИБ.
Проанализируем версии платформы, подверженные этой уязвимости:
Если ваша система работает на уязвимом релизе, выполните следующие действия:
Рассмотрим ситуацию, когда база данных была перенесена на новый сервер средствами СУБД, файлы хранилища скопированы на новый диск, но при попытке открыть любой прикрепленный файл или сделать выгрузку система выдает ошибку отсутствия записи.
Причиной этого практически всегда является ограничение прав доступа на уровне операционной системы. Выясним, как правильно распределить права:
usr1cv8. В Linux-системах — пользователь 1cv8.usr1cv8 (или соответствующую доменную группу, если хранилище сетевое).Также важно проверить сетевые пути. Если в настройках вашей СУБД прописаны UNC-пути к сетевому диску (например, \\BackupServer\BinaryData\), убедитесь, что новый сервер 1С имеет беспрепятственный доступ к этой сетевой шаре под той учетной записью, под которой запущена его служба.
Если администрирование внешнего хранилища вызывает у вас регулярные трудности, а дисковая подсистема сервера СУБД позволяет хранить большие объемы информации внутри самой базы, хорошим решением будет перенос данных обратно в базу.
Начиная с технологической платформы 1С v8.5.4 (а также в ветке 8.3.28), разработчики добавили штатный инструмент для миграции бинарных данных:
Использование этого функционала позволяет полностью застраховаться от рассинхронизации файловой системы и СУБД, решая проблему выгрузки в .dt раз и навсегда.