Приветствуем вас! Сегодня мы с вами разберем одну из весьма неприятных проблем, с которой могут столкнуться пользователи и разработчики 1С:Предприятие — "Ошибка блочного хранения двоичных данных", особенно актуальную для платформы версии 8.3.27. Эта ошибка, проявляющаяся в различных сценариях работы, может серьезно затруднить функционирование информационной базы. Давайте вместе выясним причины её возникновения и рассмотрим все возможные пути решения, начиная от официальных рекомендаций и заканчивая временными обходными путями.
Для начала, давайте проанализируем ситуацию и выясним основные причины, по которым возникает эта ошибка. Как правило, она связана с проблемами в работе с хранилищем двоичных данных (ХДД) в платформе 1С. Мы обнаружили несколько ключевых факторов:
BinaryData: После обновления платформы до версии 8.3.27 (включая 8.3.27.1688), часто наблюдался неконтролируемый рост таблицы BinaryData в базе данных. Эта таблица предназначена для хранения значений реквизитов типа "ХранилищеЗначения". Чтобы точно сопоставить объекты метаданных с физическими таблицами и понять масштаб проблемы, можно использовать обработку для анализа структуры хранения базы данных, которая включает поддержку таблицы BinaryData.Мы видим, что эта ошибка является известной и достаточно серьезной. Она проявляется в различных сценариях, таких как выгрузка данных в DT-файлы, работа с сообщениями КонтурEDI, а также при проблемах с фотографиями товаров и клиентов. Часто пользователи замечают разрастание каталога img_cache и необходимость повторной загрузки картинок. В таких случаях хорошим подспорьем может стать сжатие картинок средствами 1С, что помогает снизить нагрузку на таблицу двоичных данных. Проблема наблюдалась в версии 8.3.27.1644 и сохранялась даже в более поздних сборках, таких как 8.3.27.1719 и 8.3.27.1688.
Давайте рассмотрим основной и наиболее надежный путь решения, предложенный разработчиками 1С.
Официально эта ошибка, известная под номером 60025066 на багборде 1С, была исправлена в платформе 1С:Предприятие версии 8.3.27.1786 или выше. Более того, в версии 8.3.27.1859 проблема с неконтролируемым ростом таблицы BinaryData также считается решенной.
Поэтому, самым первым и главным шагом, который мы рекомендуем предпринять, является обновление платформы до актуальной стабильной версии. Если вам часто приходится менять версии в процессе тестирования, вам может пригодиться инструмент для консольного переключения между платформами.
После успешного обновления платформы, нам необходимо выполнить следующие действия:
chdbfl.exe: Если предыдущий шаг не принес желаемого результата или если у вас файловая база, рекомендуем использовать утилиту chdbfl.exe, которая находится в каталоге установки платформы 1С. Запустите её, укажите путь к файлу базы данных и выполните проверку и исправление.Что же делать, если по каким-либо причинам мы не можем обновиться до версии платформы с официальным исправлением? Рассмотрим различные временные решения.
Некоторые пользователи пытались решить проблему, обновляясь до более ранних тестовых версий платформы, таких как 8.3.27.1671 или 8.3.27.1688. Однако, как мы видим из опыта, проблема могла сохраняться, и лучше стремиться к официально исправленным версиям.
BinaryData через SQLТаблица BinaryData в базе данных SQL Server является ключевой для хранения двоичных данных. Чтобы понять, какие процессы вызывают ошибки в СУБД, полезно проанализировать SQL сервер глазами 1С-ника, изучив текущие запросы и ожидания.
Создание таблицы BinaryData (если отсутствует или повреждена): В некоторых случаях мы можем использовать SQL-скрипт для её создания. Обязательно выполняйте такие операции на резервной копии базы данных!
Посмотрим на пример SQL-скрипта:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[BinaryData](
[f_key] [varbinary](16) NOT NULL,
[f_off] [numeric](18, 0) NOT NULL,
[f_num] [numeric](18, 0) NOT NULL,
[f_data] [varbinary](max) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[BinaryData] SET (LOCK_ESCALATION = DISABLE)
GO
Ручная очистка и восстановление двоичных данных: Это трудоемкий процесс, который может включать удаление записей из BinaryData и последующую перезагрузку данных через интерфейс 1С.
Устранение неконтролируемого роста таблицы BinaryData: Если таблица неадекватно растет, попробуйте выгнать всех пользователей, убить зависшие сессии и заблокировать регламентные задания, чтобы спровоцировать автоматическую чистку мусора при входе единственного клиента.
Прямой SQL-запрос для удаления неактуальных записей: В крайнем случае можно прибегнуть к прямому удалению, предварительно протестировав это на копии:
delete from binarydata where f_num > 0
Представители 1С предлагали следующий метод: временно снять замок с конфигурации, понизить режим совместимости (например, до 8.3.26), "передернуть" переключатель параметра "Режим использования блочного хранения двоичных данных", а затем вернуть режим совместимости обратно. Это инициирует переинициализацию механизмов хранения.
Используйте обработку "Управление хранилищем бинарных данных" через "Функции для технического специалиста". Убедитесь, что встроенное хранилище включено, настроено на корректный каталог и на сервере достаточно свободного места для работы механизма — для этой задачи есть обработка переноса файлов из базы в тома.
Мы должны понимать, что в версиях 8.3.26 и 8.3.27 были реализованы новые возможности блочного хранения. Разработчики планируют дальнейшее развитие этого функционала, включая дедупликацию и поддержку истории данных, что подтверждает сложность и важность данных механизмов для современной платформы.
Надеемся, что представленные нами решения помогут вам успешно справиться с "Ошибкой блочного хранения двоичных данных". Всегда начинайте с наиболее безопасных и официальных методов!