При работе с базами данных 1С:Предприятие, использующими SQL Server, мы часто сталкиваемся с различными системными таблицами. Одна из таких таблиц, которая вызывает много вопросов из-за своего объема и содержимого, — это dbo.binarydata. Давайте разберемся, что это за таблица, для чего она нужна, как она работает и как нам с ней взаимодействовать.
dbo.binarydataТаблица dbo.binarydata является системной таблицей в базах данных 1С:Предприятие на SQL Server. Эта таблица предназначена для хранения различных двоичных данных, которые используются платформой 1С. Мы можем рассматривать ее как централизованное хранилище для всего, что не является обычными текстовыми или числовыми данными.
Рассмотрим подробнее, какие типы данных обычно хранятся в этой таблице:
Несмотря на возможные сомнения, dbo.binarydata — это стандартное наименование таблицы для хранения двоичных данных в базах 1С:Предприятие, использующих SQL Server.
dbo.binarydataДавайте проанализируем структуру этой таблицы, чтобы лучше понять, как она организована:
objid: Колонка типа uniqueidentifier. Это уникальный идентификатор объекта 1С, к которому привязано двоичное содержимое. Этот идентификатор играет ключевую роль в связывании двоичных данных с конкретными объектами конфигурации.part: Колонка типа int. Это номер части данных. Если файл очень большой, платформа 1С разбивает его на части, и каждая часть записывается в отдельную строку. Колонка part указывает на последовательность этих частей (например, 0, 1, 2...).data: Колонка типа varbinary(max). Это само двоичное содержимое, то есть непосредственно данные файла или другого объекта.Как работает хранение:
dbo.binarydata.objid, но с разным значением в колонке part. Затем платформа 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-запрос для получения всех частей данных. Это может быть полезно для оценки размера хранимого объекта:
-- Получить все части двоичных данных для конкретного объекта
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С:Предприятие существует возможность хранения двоичных данных не в таблице dbo.binarydata, а в отдельных файлах на диске. В этом случае в базе данных хранятся только ссылки на эти файлы. Эта настройка управляется параметром "Хранить двоичные данные в файлах" в конфигураторе 1С.
Мы рассмотрим эту опцию подробнее в следующем разделе, поскольку выбор стратегии хранения имеет свои преимущества и недостатки.
Выбор места хранения двоичных данных (непосредственно в базе данных или во внешней файловой системе) является важным решением, которое влияет на производительность, управляемость и надежность системы. Давайте разберем по шагам преимущества и недостатки каждого подхода.
dbo.binarydata)
SELECT *, особенно с большими BLOB-объектами (Binary Large Objects), могут негативно сказаться на производительности из-за значительного объема передаваемых данных и высокого потребления памяти.varbinary(max) могут приводить к переполнению строк, если их размер превышает размер страницы SQL Server, что также может сказаться на производительности.Выбирая стратегию, мы должны учитывать объем двоичных данных, требования к производительности, а также существующую инфраструктуру и возможности администрирования.
dbo.binarydataРегулярная очистка данных критически важна для поддержания производительности базы данных, особенно для таблиц, подобных dbo.binarydata, которые могут быстро расти. Мы должны активно управлять этими данными.
Рассмотрим, что мы можем сделать:
Платформа 1С:Предприятие предоставляет нам низкоуровневые средства для программного управления двоичными данными. Мы можем использовать их в своем коде для чтения, записи и обработки содержимого.
Разберем основные объекты и функции:
Поток, ФайловыйПоток и ПотокВПамяти предназначены для последовательного чтения и записи больших объемов двоичных данных. Это эффективный способ работы с файлами и другими источниками данных без загрузки всего содержимого в оперативную память сразу.ЧтениеДанных и ЗаписьДанных позволяют нам читать и записывать определенные байты, символы и числа из потоков, поддерживая различные кодировки. Это полезно, когда нам нужно работать с данными на более низком уровне.БуферДвоичныхДанных предоставляет произвольный доступ к данным в оперативной памяти. Он подходит для анализа и редактирования не слишком больших объемов двоичных данных, позволяя нам читать и изменять данные по индексу.ДвоичныеДанные:
И, ИЛИ, ИсключающееИЛИ).ДвоичныеДанные, что соответствует механизму хранения в dbo.binarydata.Работая с этими объектами, мы можем программно извлекать, модифицировать и сохранять двоичные данные, обеспечивая целостность и корректность операций.
Хотя мы настоятельно не рекомендуем прямое изменение таблицы dbo.binarydata через SQL, иногда нам может потребоваться извлечь данные для анализа или переноса. Для этого существуют некоторые утилиты SQL Server:
BCP (Bulk Copy Program): Эта утилита командной строки позволяет массово извлекать данные из SQL Server в файлы и наоборот. Мы можем использовать ее для экспорта содержимого колонки data в отдельные файлы.TextCopy.exe: Это еще одна утилита, которая может использоваться для работы с большими текстовыми и двоичными данными (BLOB-объектами) в SQL Server.При извлечении двоичных данных из SQL Server иногда требуется удалить заголовок OLE, который добавляется при хранении файлов. Это может потребовать дополнительной обработки извлеченных данных.
Мы хотим еще раз подчеркнуть: прямое редактирование таблицы dbo.binarydata напрямую в SQL Server является крайне рискованной операцией и может привести к необратимому повреждению базы данных 1С. Платформа 1С использует сложную логику для управления связями, частями файлов и целостностью данных. Любое вмешательство извне, не соответствующее этой логике, может нарушить работу системы.
Все операции с двоичными данными, включая их добавление, изменение и удаление, должны выполняться исключительно программно через платформу 1С:Предприятие, используя предоставленные ею объекты и методы. Анализ таблицы с помощью SQL возможен, но всегда с максимальной осторожностью и пониманием потенциальных рисков.
← К списку