Приветствуем вас! Сегодня мы с вами разберем одну из весьма неприятных проблем, с которой могут столкнуться пользователи и разработчики 1С:Предприятие — "Ошибка блочного хранения двоичных данных", особенно актуальную для платформы версии 8.3.27. Эта ошибка, проявляющаяся в различных сценариях работы, может серьезно затруднить функционирование информационной базы. Давайте вместе выясним причины её возникновения и рассмотрим все возможные пути решения, начиная от официальных рекомендаций и заканчивая временными обходными путями.
Для начала, давайте проанализируем ситуацию и выясним основные причины, по которым возникает эта ошибка. Как правило, она связана с проблемами в работе с хранилищем двоичных данных (ХДД) в платформе 1С. Мы обнаружили несколько ключевых факторов:
BinaryData: После обновления платформы до версии 8.3.27 (включая 8.3.27.1688), часто наблюдался неконтролируемый рост таблицы BinaryData в базе данных. Эта таблица предназначена для хранения значений реквизитов типа "ХранилищеЗначения", и её разрастание может указывать на проблемы с очисткой "мусора" или некорректной работой механизма хранения.Мы видим, что эта ошибка является известной и достаточно серьезной. Она проявляется в различных сценариях, таких как выгрузка данных в DT-файлы, работа с сообщениями КонтурEDI, а также при проблемах с фотографиями товаров и клиентов (долгое применение расширений, необходимость повторной загрузки фотографий, разрастание каталога img_cache). Мы знаем, что проблема наблюдалась в версии 8.3.27.1644 и предшествующих сборках 8.3.27, и, к сожалению, сохранялась даже в более поздних версиях, таких как 8.3.27.1719 и 8.3.27.1688, что подтверждает её устойчивость.
Давайте рассмотрим основной и наиболее надежный путь решения, предложенный разработчиками 1С.
Официально эта ошибка, известная под номером 60025066 на багборде 1С, была исправлена в платформе 1С:Предприятие версии 8.3.27.1786 или выше. Более того, в версии 8.3.27.1859 проблема с неконтролируемым ростом таблицы BinaryData также считается решенной.
Поэтому, самым первым и главным шагом, который мы рекомендуем предпринять, является обновление платформы 1С:Предприятие до актуальной стабильной версии 8.3.27.1786 или выше (например, до 8.3.27.1859).
После успешного обновления платформы, нам необходимо выполнить следующие действия:
chdbfl.exe: Если предыдущий шаг не принес желаемого результата или если у вас файловая база, рекомендуем использовать утилиту chdbfl.exe, которая находится в каталоге установки платформы 1С. Запустите её, укажите путь к файлу базы данных и выполните проверку и исправление.Что же делать, если по каким-либо причинам мы не можем обновиться до версии платформы с официальным исправлением? Или если обновление не полностью решило проблему? Рассмотрим различные временные решения и обходные пути, которые были успешно опробованы другими пользователями.
Некоторые пользователи пытались решить проблему, обновляясь до более ранних тестовых версий платформы, таких как 8.3.27.1671 (которая впоследствии была отозвана) или 8.3.27.1688. Однако, как мы видим из опыта, проблема могла сохраняться даже после таких обновлений. Поэтому, если вы рассматриваете этот путь, будьте готовы к тому, что он может не дать полного решения, и лучше стремиться к официально исправленным версиям.
BinaryData через SQLТаблица BinaryData в базе данных SQL Server (или аналогичной СУБД) является ключевой для хранения двоичных данных. Проблемы с этой таблицей часто вызывают рассматриваемую ошибку.
Создание таблицы BinaryData (если отсутствует или повреждена): В некоторых случаях, особенно после некорректных обновлений, таблица 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
После создания таблицы, мы можем попробовать запустить 1С и проверить её работоспособность.
Ручная очистка и восстановление двоичных данных: Один из пользователей сообщал, что ему приходилось вручную очищать двоичные данные в SQL, а затем восстанавливать их в режиме предприятия 1С. Это достаточно трудоемкий процесс, который может включать удаление записей из BinaryData и последующую перезагрузку данных, например, фотографий или присоединенных файлов, через интерфейс 1С.
Устранение неконтролируемого роста таблицы BinaryData: Если таблица BinaryData неадекватно растет после обновления на 8.3.27, мы можем попробовать следующий подход:
Прямой SQL-запрос для удаления неактуальных записей: В некоторых случаях, когда в таблице BinaryData накапливаются старые или некорректные записи, мы можем прибегнуть к прямому удалению. Будьте крайне осторожны! Мы настоятельно рекомендуем сначала проверить этот метод на копии базы данных!
delete from binarydata where f_num > 0
Этот запрос удаляет записи, которые, возможно, являются "мусором" или неактуальными. После его выполнения может потребоваться восстановление некоторых данных, если они были удалены ошибочно.
Представители 1С в переписке с пользователями предлагали следующий обходной путь для версий до официального исправления:
Этот метод направлен на принудительную переинициализацию механизмов хранения двоичных данных платформой.
В платформе 1С реализована возможность управления встроенным хранилищем двоичных данных. Давайте разберем, как мы можем её использовать:
BinDataStrg).Помимо вышеперечисленных решений, мы рекомендуем выполнить следующие действия для диагностики и устранения проблемы:
Мы должны понимать, что в версиях 8.3.26 и 8.3.27 были реализованы новые возможности блочного хранения двоичных данных. В 8.3.26 эта возможность управлялась свойством конфигурации Режим использования блочного хранения двоичных данных в режиме совместимости с 8.3.25 и предшествующих. В остальных случаях эта возможность включена по умолчанию.
Для встроенного хранилища двоичных данных также реализована возможность управления местом хранения. В сертифицированной поставке "1С:Предприятие 8.3z" версии 8.3.27.1646 (основанной на 8.3.27.1644) была отключена возможность использования внешних хранилищ двоичных данных, что также могло повлиять на стабильность работы.
Разработчики планируют дальнейшее развитие хранилища двоичных данных, включая работу нескольких информационных баз с одним хранилищем, поддержку хранилища для истории данных и дедупликацию, что говорит о важности этого функционала и постоянных улучшениях.
Надеемся, что представленные нами решения помогут вам успешно справиться с "Ошибкой блочного хранения двоичных данных". Всегда начинайте с наиболее безопасных и официальных методов, и не забывайте про резервное копирование перед любыми серьезными изменениями!
← К списку