Почему возникает "Ошибка блочного хранения двоичных данных" в 1С:Предприятие 8.3.27 и как её исправить?

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

Приветствуем вас! Сегодня мы с вами разберем одну из весьма неприятных проблем, с которой могут столкнуться пользователи и разработчики 1С:Предприятие — "Ошибка блочного хранения двоичных данных", особенно актуальную для платформы версии 8.3.27. Эта ошибка, проявляющаяся в различных сценариях работы, может серьезно затруднить функционирование информационной базы. Давайте вместе выясним причины её возникновения и рассмотрим все возможные пути решения, начиная от официальных рекомендаций и заканчивая временными обходными путями.

Причины возникновения ошибки

Для начала, давайте проанализируем ситуацию и выясним основные причины, по которым возникает эта ошибка. Как правило, она связана с проблемами в работе с хранилищем двоичных данных (ХДД) в платформе 1С. Мы обнаружили несколько ключевых факторов:

  1. Изменения в механизмах хранения: В платформе 1С 8.3.27 были внесены существенные изменения в механизмы хранения двоичных данных. Эти изменения, вероятно, связаны с новой функцией прозрачной поддержки хранилища S3 и возможностью блочного хранения данных, что позволяет обойти ограничения СУБД на размер BLOB-данных. Однако, эти новшества могли привести к ошибкам в определенных сценариях.
  2. Повреждение данных или файловой системы: Ошибка может быть вызвана повреждением самих двоичных данных, проблемами с файловой системой на сервере, где хранится база, или нехваткой свободного места.
  3. Ошибки в конфигурации или кэше: Сбои в работе сервера 1С, повреждение кэша сервера или клиента, а также некорректные настройки конфигурации могут стать причиной данной проблемы.
  4. Неконтролируемый рост таблицы 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С

Давайте рассмотрим основной и наиболее надежный путь решения, предложенный разработчиками 1С.

Официально эта ошибка, известная под номером 60025066 на багборде 1С, была исправлена в платформе 1С:Предприятие версии 8.3.27.1786 или выше. Более того, в версии 8.3.27.1859 проблема с неконтролируемым ростом таблицы BinaryData также считается решенной.

Поэтому, самым первым и главным шагом, который мы рекомендуем предпринять, является обновление платформы 1С:Предприятие до актуальной стабильной версии 8.3.27.1786 или выше (например, до 8.3.27.1859).

После успешного обновления платформы, нам необходимо выполнить следующие действия:

  1. Полная индексация базы данных: Мы можем выполнить её через "Конфигуратор" (меню "Администрирование" -> "Тестирование и исправление"). Обязательно установите все флажки для максимальной проверки и исправления.
  2. Использование утилиты chdbfl.exe: Если предыдущий шаг не принес желаемого результата или если у вас файловая база, рекомендуем использовать утилиту chdbfl.exe, которая находится в каталоге установки платформы 1С. Запустите её, укажите путь к файлу базы данных и выполните проверку и исправление.

Временные решения и обходные пути (для платформ до официального исправления)

Что же делать, если по каким-либо причинам мы не можем обновиться до версии платформы с официальным исправлением? Или если обновление не полностью решило проблему? Рассмотрим различные временные решения и обходные пути, которые были успешно опробованы другими пользователями.

1. Обновление платформы до тестовых версий

Некоторые пользователи пытались решить проблему, обновляясь до более ранних тестовых версий платформы, таких как 8.3.27.1671 (которая впоследствии была отозвана) или 8.3.27.1688. Однако, как мы видим из опыта, проблема могла сохраняться даже после таких обновлений. Поэтому, если вы рассматриваете этот путь, будьте готовы к тому, что он может не дать полного решения, и лучше стремиться к официально исправленным версиям.

2. Работа с таблицей BinaryData через SQL

Таблица BinaryData в базе данных SQL Server (или аналогичной СУБД) является ключевой для хранения двоичных данных. Проблемы с этой таблицей часто вызывают рассматриваемую ошибку.

  1. Создание таблицы 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С и проверить её работоспособность.

  2. Ручная очистка и восстановление двоичных данных: Один из пользователей сообщал, что ему приходилось вручную очищать двоичные данные в SQL, а затем восстанавливать их в режиме предприятия 1С. Это достаточно трудоемкий процесс, который может включать удаление записей из BinaryData и последующую перезагрузку данных, например, фотографий или присоединенных файлов, через интерфейс 1С.

  3. Устранение неконтролируемого роста таблицы BinaryData: Если таблица BinaryData неадекватно растет после обновления на 8.3.27, мы можем попробовать следующий подход:

    • Выгнать всех пользователей из базы.
    • Убить зависшие сессии на сервере 1С.
    • Заблокировать регламентные задания.
    • При нормальном заходе и выходе единственного клиента, может сработать автоматическая чистка мусора.
  4. Прямой SQL-запрос для удаления неактуальных записей: В некоторых случаях, когда в таблице BinaryData накапливаются старые или некорректные записи, мы можем прибегнуть к прямому удалению. Будьте крайне осторожны! Мы настоятельно рекомендуем сначала проверить этот метод на копии базы данных!

    
    delete from binarydata where f_num > 0
    

    Этот запрос удаляет записи, которые, возможно, являются "мусором" или неактуальными. После его выполнения может потребоваться восстановление некоторых данных, если они были удалены ошибочно.

3. Рекомендации от 1С для старых версий (обходной путь)

Представители 1С в переписке с пользователями предлагали следующий обходной путь для версий до официального исправления:

  1. Снять замок с конфигурации: В конфигураторе, в режиме сравнения/объединения или через "Конфигурация" -> "Поддержка" -> "Настройка поддержки", временно снимите замок с конфигурации (если она на поддержке).
  2. Понизить режим совместимости: В свойствах конфигурации, на вкладке "Общие", понизьте режим совместимости, например, с 8.3.27 на 8.3.26 или даже 8.3.25.
  3. "Передернуть" переключатель блочного хранения данных: Найдите в свойствах конфигурации параметр, связанный с блочным хранением двоичных данных (может называться "Режим использования блочного хранения двоичных данных"). Измените его значение, запишите конфигурацию, а затем верните обратно и снова запишите.
  4. Вернуть режим совместимости: Установите исходный режим совместимости обратно.

Этот метод направлен на принудительную переинициализацию механизмов хранения двоичных данных платформой.

4. Настройка встроенного хранилища двоичных данных

В платформе 1С реализована возможность управления встроенным хранилищем двоичных данных. Давайте разберем, как мы можем её использовать:

  1. Использование обработки "Управление хранилищем бинарных данных": Через "Функции для технического специалиста" (или "Все функции") найдите и запустите обработку "Управление хранилищем бинарных данных".
  2. Включить и настроить встроенное хранилище: Убедитесь, что встроенное хранилище включено и настроено. Мы можем указать каталог на сервере приложений 1С для хранения данных (например, BinDataStrg).
  3. Проверить наличие свободного места: Убедитесь, что на сервере приложений 1С, в каталоге, предназначенном для хранения двоичных данных, достаточно свободного места.
  4. Периодически производить очистку: Встроенное хранилище позволяет производить очистку от удаленных и перезаписанных версий объектов, что помогает контролировать размер хранилища.

5. Прочие рекомендации и диагностика

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

  1. Проверить диск и права доступа: Убедитесь, что на диске, где расположена база данных (или каталог хранения бинарных данных), достаточно свободного места, и что у учетной записи сервера 1С есть полные права доступа к соответствующим каталогам и файлам.
  2. Сделать резервную копию базы данных: Это критически важный шаг перед любыми манипуляциями с базой данных! Всегда делайте актуальную резервную копию.
  3. Перезапустить сервер 1С: Иногда простая перезагрузка сервера 1С:Предприятие может помочь сбросить кэш и решить временные сбои.
  4. Проверить логи сервера 1С: Внимательно изучите технологический журнал сервера 1С:Предприятие. Там могут содержаться более детальные сообщения об ошибках, которые помогут нам точнее определить причину проблемы.
  5. Выгрузка базы в DT и обратная загрузка: Этот классический метод часто помогает решить множество проблем с базой. Однако, в случае этой ошибки, выгрузка в DT иногда не удается из-за тех же проблем с двоичными данными. Если выгрузка прошла успешно, попробуйте загрузить DT-файл в новую, чистую базу.
  6. Пробежаться по таблицам и произвести чтение полей типа "ХранилищеЗначения": В монопольном режиме работы с базой можно попробовать программно или вручную просмотреть объекты, содержащие поля типа "ХранилищеЗначения" (например, присоединенные файлы, картинки), чтобы принудительно инициировать их чтение и, возможно, исправление.
  7. Остаться на более ранних стабильных версиях: Если ни одно из решений не помогает, и обновление до исправленной версии невозможно, некоторые пользователи предпочитали временно оставаться на более ранних, стабильных версиях платформы, например, 8.3.27.1606, пока не появится возможность безопасного перехода на новую версию.

Важные технические детали

Мы должны понимать, что в версиях 8.3.26 и 8.3.27 были реализованы новые возможности блочного хранения двоичных данных. В 8.3.26 эта возможность управлялась свойством конфигурации Режим использования блочного хранения двоичных данных в режиме совместимости с 8.3.25 и предшествующих. В остальных случаях эта возможность включена по умолчанию.

Для встроенного хранилища двоичных данных также реализована возможность управления местом хранения. В сертифицированной поставке "1С:Предприятие 8.3z" версии 8.3.27.1646 (основанной на 8.3.27.1644) была отключена возможность использования внешних хранилищ двоичных данных, что также могло повлиять на стабильность работы.

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

Надеемся, что представленные нами решения помогут вам успешно справиться с "Ошибкой блочного хранения двоичных данных". Всегда начинайте с наиболее безопасных и официальных методов, и не забывайте про резервное копирование перед любыми серьезными изменениями!

← К списку