Что такое таблица dbo.binarydata в 1С:Предприятие и как с ней работать?

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

При работе с базами данных 1С:Предприятие, использующими SQL Server, мы часто сталкиваемся с различными системными таблицами. Одна из таких таблиц, которая вызывает много вопросов из-за своего объема и содержимого, — это dbo.binarydata. Давайте разберемся, что это за таблица, для чего она нужна, как она работает и как нам с ней взаимодействовать.

Понимание назначения таблицы dbo.binarydata

Таблица dbo.binarydata является системной таблицей в базах данных 1С:Предприятие на SQL Server. Эта таблица предназначена для хранения различных двоичных данных, которые используются платформой 1С. Мы можем рассматривать ее как централизованное хранилище для всего, что не является обычными текстовыми или числовыми данными.

Рассмотрим подробнее, какие типы данных обычно хранятся в этой таблице:

  1. Прикрепленные файлы: Это могут быть сканы документов, изображения, PDF-файлы, архивы и любые другие файлы, которые пользователи прикрепляют к объектам 1С (например, к документам, элементам справочников).
  2. Вложения к объектам конфигурации: Платформа 1С использует эту таблицу для хранения вложений, связанных с различными объектами, такими как документы, справочники, регистры сведений и т.д.
  3. Данные механизмов "Приложения" и "Внешние обработки": Некоторые механизмы 1С, например, работа с внешними обработками или определенными "приложениями" в конфигурации, также могут сохранять свои двоичные данные здесь.
  4. Временные данные, кэш, миниатюры: В ряде случаев таблица может использоваться для временного хранения системных данных, кэша изображений или миниатюр.
  5. Электронные подписи: Двоичные данные, относящиеся к электронным подписям, также могут храниться в этой таблице.

Несмотря на возможные сомнения, dbo.binarydata — это стандартное наименование таблицы для хранения двоичных данных в базах 1С:Предприятие, использующих SQL Server.

Основные характеристики таблицы dbo.binarydata

Давайте проанализируем структуру этой таблицы, чтобы лучше понять, как она организована:

Как работает хранение:

В конфигурации 1С ссылки на эти данные обычно реализуются через поля типа ХранилищеЗначения (например, ХранилищеФайла) или через использование объекта Приложение в коде (например, Новый Приложение).

Как определить, к какому объекту 1С относятся данные

Один из наиболее частых вопросов — как понять, что именно хранится в таблице dbo.binarydata и к какому объекту 1С относится конкретная запись. Мы выяснили, что колонка objid содержит уникальный идентификатор (GUID) объекта 1С. Чаще всего этот objid соответствует ссылке (Ref) на объект в других таблицах базы данных.

Мы можем попробовать найти, к какому объекту относится конкретный objid, выполнив SQL-запрос к таблицам объектов 1С. Например, если мы предполагаем, что это документ, мы можем использовать следующий запрос:


SELECT TOP 10 *
FROM dbo.DOCUMENT_ИмяДокумента
WHERE Ref = 'A1B2C3D4-...' -- Замените на реальный GUID из objid

В этом примере DOCUMENT_ИмяДокумента — это имя таблицы конкретного документа в базе данных SQL Server (например, DOCUMENT_РеализацияТоваровУслуг). Вам потребуется подставить имя соответствующей таблицы. Аналогичные запросы можно выполнять для справочников (таблицы вида _ReferenceИмяСправочника) и других объектов.

Также для анализа содержимого и объема таблицы binarydata, а также для определения, к каким объектам 1С относятся те или иные двоичные данные, может использоваться специализированная обработка "базопузомер". Этот инструмент помогает выявить, что именно вызывает рост таблицы и занимает место в базе данных.

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

Пример SQL-запроса для анализа данных

Если нам нужно проанализировать двоичные данные для конкретного объекта, мы можем использовать SQL-запрос для получения всех частей данных. Это может быть полезно для оценки размера хранимого объекта:


-- Получить все части двоичных данных для конкретного объекта
SELECT objid, part, DATALENGTH(data) AS size
FROM dbo.binarydata
WHERE objid = 'A1B2C3D4-E5F6-7890-ABCD-EF1234567890' -- Замените на реальный GUID
ORDER BY part;

В этом примере DATALENGTH(data) возвращает размер двоичных данных в байтах для каждой части.

⚠️ Важно: Прямое редактирование таблицы dbo.binarydata напрямую в SQL категорически не рекомендуется, так как это может повредить целостность данных в 1С. Все операции с двоичными данными должны выполняться исключительно через платформу 1С:Предприятие.

Альтернативные способы хранения двоичных данных в 1С

В более новых версиях 1С:Предприятие существует возможность хранения двоичных данных не в таблице dbo.binarydata, а в отдельных файлах на диске. В этом случае в базе данных хранятся только ссылки на эти файлы. Эта настройка управляется параметром "Хранить двоичные данные в файлах" в конфигураторе 1С.

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

Выбор стратегии хранения: В базе данных или в файловой системе?

Выбор места хранения двоичных данных (непосредственно в базе данных или во внешней файловой системе) является важным решением, которое влияет на производительность, управляемость и надежность системы. Давайте разберем по шагам преимущества и недостатки каждого подхода.

  1. Хранение в базе данных (таблица dbo.binarydata)
    • Преимущества:
      • Целостность и атомарность данных: Все данные, включая связанные файлы, хранятся в одном месте. Это обеспечивает высокую целостность данных, так как все операции (например, транзакции) выполняются атомарно.
      • Упрощенное резервное копирование и восстановление: Поскольку все компоненты (данные и файлы) находятся в одной базе, резервное копирование и восстановление становятся проще, так как все бэкапится и восстанавливается вместе.
      • Использование механизмов безопасности БД: Приложениям не требуются специальные сетевые разрешения для доступа к файлам, так как все управляется механизмами безопасности SQL Server.
      • Упрощение управления согласованностью: При восстановлении базы данных все связанные двоичные данные также восстанавливаются до согласованного состояния.
    • Недостатки:
      • Значительное увеличение размера БД: Большое количество двоичных данных может привести к очень быстрому росту базы данных, что увеличивает время создания резервных копий, требования к дисковому пространству и длительность операций восстановления.
      • Влияние на производительность: Рост базы данных может увеличить нагрузку на SQL Server и потреблять больше подключений. Запросы SELECT *, особенно с большими BLOB-объектами (Binary Large Objects), могут негативно сказаться на производительности из-за значительного объема передаваемых данных и высокого потребления памяти.
      • Переполнение строк: Большие поля varbinary(max) могут приводить к переполнению строк, если их размер превышает размер страницы SQL Server, что также может сказаться на производительности.
  2. Альтернативное файловое хранение (вне БД)
    • Преимущества:
      • Уменьшение размера базы данных: Основное преимущество — значительное сокращение размера основной базы данных, что улучшает время резервного копирования, восстановления и общую производительность SQL Server.
      • Повышение эффективности: Доступ к файлам напрямую с диска может быть быстрее для больших объектов, поскольку не требуется передача данных через движок SQL Server.
      • Снижение риска повреждения данных: Отдельное хранение двоичных данных может снизить риск повреждения основной базы данных из-за проблем с большими BLOB-объектами.
    • Недостатки:
      • Проблемы с неработающими ссылками: Если файлы перемещаются, удаляются или изменяются разрешения доступа к ним, могут возникнуть проблемы с неработающими ссылками в 1С.
      • Усложнение управления безопасностью: Требуется отдельное управление разрешениями на файловой системе, что может усложнить общую стратегию безопасности.
      • Синхронизация данных при восстановлении: При восстановлении базы данных необходимо также обеспечить синхронное восстановление файлового хранилища, чтобы избежать рассогласования данных.

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

Обслуживание и очистка таблицы dbo.binarydata

Регулярная очистка данных критически важна для поддержания производительности базы данных, особенно для таблиц, подобных dbo.binarydata, которые могут быстро расти. Мы должны активно управлять этими данными.

Рассмотрим, что мы можем сделать:

  1. Настройка автоматических задач: Мы можем настроить регламентные задания или другие автоматические задачи в 1С, которые будут удалять обработанные или устаревшие двоичные данные. Например, если прикрепленные файлы к старым документам больше не нужны, их можно удалять.
  2. Отслеживание и обработка ошибок: Важно отслеживать и обрабатывать ошибки во входящих данных. Непроверенные или непереобработанные ошибки могут препятствовать очистке данных, вызывая их накопление и неоправданный рост таблицы.
  3. Использование инструментов анализа: Регулярно используйте "базопузомер" или другие инструменты для анализа базы данных, чтобы выявлять наиболее крупные объекты и принимать решения об их хранении или удалении.

Инструменты 1С для работы с двоичными данными

Платформа 1С:Предприятие предоставляет нам низкоуровневые средства для программного управления двоичными данными. Мы можем использовать их в своем коде для чтения, записи и обработки содержимого.

Разберем основные объекты и функции:

  1. Потоки:
    • Объекты Поток, ФайловыйПоток и ПотокВПамяти предназначены для последовательного чтения и записи больших объемов двоичных данных. Это эффективный способ работы с файлами и другими источниками данных без загрузки всего содержимого в оперативную память сразу.
  2. Чтение/Запись данных:
    • Объекты ЧтениеДанных и ЗаписьДанных позволяют нам читать и записывать определенные байты, символы и числа из потоков, поддерживая различные кодировки. Это полезно, когда нам нужно работать с данными на более низком уровне.
  3. Буфер двоичных данных:
    • Объект БуферДвоичныхДанных предоставляет произвольный доступ к данным в оперативной памяти. Он подходит для анализа и редактирования не слишком больших объемов двоичных данных, позволяя нам читать и изменять данные по индексу.
  4. Дополнительные функции объекта ДвоичныеДанные:
    • Современные версии 1С предлагают функции для эффективного копирования потоков.
    • Мы можем выполнять побитовые логические операции над буферами двоичных данных (например, И, ИЛИ, ИсключающееИЛИ).
    • Доступны функции для преобразования двоичных данных в различные форматы, такие как Base64, BinHex и обычные строки, и обратно.
    • Существуют также функции для разделения двоичных данных на части и объединения нескольких объектов ДвоичныеДанные, что соответствует механизму хранения в dbo.binarydata.

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

Работа с двоичными данными на уровне SQL Server

Хотя мы настоятельно не рекомендуем прямое изменение таблицы dbo.binarydata через SQL, иногда нам может потребоваться извлечь данные для анализа или переноса. Для этого существуют некоторые утилиты SQL Server:

При извлечении двоичных данных из SQL Server иногда требуется удалить заголовок OLE, который добавляется при хранении файлов. Это может потребовать дополнительной обработки извлеченных данных.

Важное предупреждение о прямом редактировании

Мы хотим еще раз подчеркнуть: прямое редактирование таблицы dbo.binarydata напрямую в SQL Server является крайне рискованной операцией и может привести к необратимому повреждению базы данных 1С. Платформа 1С использует сложную логику для управления связями, частями файлов и целостностью данных. Любое вмешательство извне, не соответствующее этой логике, может нарушить работу системы.

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

← К списку