Sql server filestream что это

Доступ к данным FILESTREAM с помощью Transact-SQL

В этом разделе описаны способы использования инструкций Transact-SQL INSERT, UPDATE и DELETE для управления данными FILESTREAM.

Для примеров в этом разделе требуется база данных с поддержкой FILESTREAM и таблица, которая создана в разделе Создание базы данных с поддержкой FILESTREAM и Создание таблицы для хранения данных FILESTREAM.

Вставка строки, содержащей данные FILESTREAM

Вставка значения NULL

Вставка записи с нулевой длиной

В следующем примере показано, как использовать инструкцию INSERT для создания записи с нулевой длиной. Это бывает полезно в случае, если нужно получить дескриптор файла, работать с которым предполагается с помощью API-интерфейсов Win32.

Создание файла данных

При выборе всех данных в таблице Archive.dbo.Records результат напоминает тот, который приведен в следующей таблице. Однако столбец Id будет содержать разные идентификаторы GUID.

ИдентификаторSerialNumberДиаграмма
C871B90F-D25E-47B3-A560-7CC0CA405DAC1NULL
F8F5C314-0559-4927-8FA9-1535EE0BDF5020x
7F680840-B7A4-45D4-8CD5-527C44D35B3F30x536569736D69632044617461

Обновление данных FILESTREAM

Transact-SQL можно использовать для обновления данных файла, хотя это может быть нежелательным при потоковой записи в файл больших объемов данных.

Удаление данных FILESTREAM

В следующем примере показано, как удалить строку и связанный с ней файл файловой системы.

При выборе всех данных в таблице Archive.dbo.Records строка удаляется, и связанный с ней файл больше нельзя использовать.

Базовые файлы удаляются сборщиком мусора FILESTREAM.

Источник

Совместимость FILESTREAM с другими компонентами SQL Server

Поскольку данные FILESTREAM находятся в файловой системе, в данном разделе приводятся основные сведения, рекомендации и ограничения по использованию FILESTREAM со следующими компонентами SQL Server:

Службы SQL Server Integration Services

Службы SQL Server Integration Services (SSIS) обрабатывают данные FILESTREAM в потоке данных как любые другие данные большого двоичного объекта с использованием типа данных DT_IMAGE SSIS.

Загрузку файлов из файловой системы в столбец FILESTREAM можно выполнить с помощью преобразования «Импорт столбца». Преобразование «Экспорт столбца» также можно использовать, чтобы извлечь файлы из столбца FILESTREAM в другую папку файловой системы.

Распределенные запросы и связанные серверы

Шифрование

Данные FILESTREAM не шифруются, даже если включено прозрачное шифрование данных.

Моментальные снимки базы данных

SQL Server не поддерживает моментальные снимки базы данных для файловых групп FILESTREAM. Если файловая группа FILESTREAM включена в предложение CREATE DATABASE ON, выполнение этой инструкции завершится сбоем и приведет к возникновению ошибки.

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

В инструкции SELECT, выполняемой в отношении таблицы FILESTREAM в моментальном снимке базы данных, не должно содержаться столбцов FILESTREAM; в противном случае будет возвращено следующее сообщение об ошибке:

Could not continue scan with NOLOCK due to data movement.

Replication

Репликация больших значений данных с подписчиков SQL Server в SQL Server 2005 (9.x) ограничена максимальным значением 256 МБ значений данных. Дополнительные сведения см. в разделе Maximum Capacity Specifications.

Вопросы использования репликации транзакций

При использовании столбцов FILESTREAM в таблицах, опубликованных для репликации транзакций, обратите внимание на следующие положения.

Если в какой-либо из таблиц содержатся столбцы с атрибутом FILESTREAM, значения database snapshot или database snapshot character нельзя использовать для свойства @sync_method хранимой процедуры sp_addpublication.

Параметр max text repl size задает максимально допустимый объем данных, добавляемых в опубликованный для репликации столбец. Этот параметр позволяет управлять размером реплицируемых данных FILESTREAM.

Общие вопросы репликации слиянием

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

При добавлении столбца FILESTREAM к таблице, уже опубликованной для репликации слиянием, необходимо убедиться, что у столбца uniqueidentifier имеется ограничение UNIQUE. Если ограничение UNIQUE отсутствует, добавьте именованное ограничение к таблице в базе данных публикации. По умолчанию репликация слиянием опубликует данное изменение схемы, и оно будет применено к каждой базе данных подписки.

Если ограничение UNIQUE добавляется вручную согласно описанию и репликацию слиянием требуется удалить, то сначала необходимо удалить ограничение UNIQUE, иначе удаление репликации завершится неуспешно.

По умолчанию в репликации слиянием используется значение NEWSEQUENTIALID(), поскольку, по сравнению с NEWID(), оно обеспечивает лучшую производительность. При добавлении столбца uniqueidentifier к таблице, уже опубликованной для репликации слиянием, в качестве значения по умолчанию следует указать NEWSEQUENTIALID().

Репликация слиянием включает в себя оптимизацию репликации типов больших объектов. Оптимизация управляется при помощи параметра @stream_blob_columns хранимой процедуры sp_addmergearticle. Если параметр схемы настроен на репликацию атрибута FILESTREAM, параметру @stream_blob_columns присваивается значение true. Эта оптимизация может быть переопределена с помощью хранимой процедуры sp_changemergearticle. Эта хранимая процедура позволяет задать параметру @stream_blob_columns значение false. При добавлении столбца FILESTREAM в таблицу, уже опубликованную для репликации слиянием, значение true рекомендуется присвоить параметру при помощи хранимой процедуры sp_changemergearticle.

Включение параметра схемы для FILESTREAM после создания статьи может привести к сбою репликации, если размер данных столбца FILESTREAM превышает 2 ГБ и если во время репликации возникает конфликт. Если возникновение данной ситуации не исключено, рекомендуется удалить и повторно создать статью таблицы с соответствующим параметром схемы FILESTREAM, включенным во время создания.

Репликация слиянием позволяет синхронизировать данные FILESTREAM во время HTTPS-соединения при помощи веб-синхронизации. Размер этих данных не должен превышать ограничение в 50 МБ для веб-синхронизации, иначе возникнет ошибка выполнения.

Доставка журналов

Вдоставке журналов предусмотрена поддержка FILESTREAM. Как на сервере-источнике, так и на сервере-получателе должна быть запущена версия SQL Server 2008или более поздняя версия и должен быть включен параметр FILESTREAM.

Зеркальное отображение базы данных

Зеркальное отображение базы данных не поддерживает FILESTREAM. Создание файловой группы FILESTREAM на основном сервере невозможно. Настройка зеркального отображения для базы данных, содержащей файловые группы FILESTREAM, невозможна.

Полнотекстовое индексирование

Полнотекстовый поиск индексирует содержимое блоков больших двоичных объектов (BLOB) FILESTREAM. Индексирование таких файлов, как изображения, может оказаться нецелесообразным. При обновлении блоков больших двоичных объектов (BLOB) FILESTREAM выполняется их повторное индексирование.

Отказоустойчивая кластеризация

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

SQL Server Express

SQL Server Express предусмотрена поддержка FILESTREAM. Ограничение размера базы данных в 10 ГБ не включает контейнер данных FILESTREAM.

Автономные базы данных

Для использования функции FILESTREAM требуется выполнение определенной настройки вне базы данных. Поэтому база данных, использующая FILESTREAM или FileTable, не является полностью автономной.

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

Источник

Включение и настройка FILESTREAM

Перед началом использования хранилища FILESTREAM его необходимо включить в экземпляре компонента Компонент SQL Server Database Engine. В этом разделе описано, как включить FILESTREAM с помощью диспетчера конфигурации SQL Server.

Включение FILESTREAM

Включение и изменение параметров FILESTREAM

В меню Пуск последовательно выберите пункты Все программы, SQL Server, Средства настройки и щелкните Диспетчер конфигурации SQL Server.

В списке служб щелкните правой кнопкой мыши Службы SQL Server и выберите команду Открыть.

Щелкните правой кнопкой мыши экземпляр и выберите пункт Свойства.

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

Нажмите кнопку Применить.

В редакторе запросов введите следующий код Transact-SQL :

Нажмите кнопку Выполнить.

Рекомендации

Физическая настройка и обслуживание

При использовании томов хранилища FILESTREAM обратите внимание на следующие рекомендации.

Регулярно выполняйте дефрагментацию на компьютерах с FILESTREAM.

Используйте файловую систему NTFS с кластерами по 64 килобайт. На сжатых томах должна быть файловая система NTFS с кластерами по 4 килобайта.

Отключите индексирование на томах FILESTREAM и установите параметр disablelastaccess. Чтобы установить параметр disablelastaccess, воспользуйтесь служебной программой Windows fsutil.

Отключите антивирусное сканирование на томах FILESTREAM, если оно не требуется. Если антивирусное сканирование необходимо, не настраивайте политики автоматического удаления зараженных файлов.

Настройте уровень отказоустойчивости и производительности RAID в соответствии с требованиями приложения.

Уровень RAIDПроизводительность записиПроизводительность чтенияОтказоустойчивостьRemarks
RAID 5НормальныйНормальныйВысокаяПроизводительность лучше, чем у диска или JBOD, но хуже, чем у RAID 0 или RAID 5 с чередованием.
RAID 0ВысокаяВысокаяNone
RAID 5 + чередованиеВысокаяВысокаяВысокаяСамый дорогостоящий вариант.

Физическая структура базы данных

При проектировании базы данных FILESTREAM следует учитывать следующие рекомендации.

Столбцу FILESTREAM должен соответствовать столбец типа uniqueidentifier ROWGUID. Кроме того, типам таблиц также должен соответствовать уникальный индекс. Как правило, этот индекс не является кластеризованным. Если бизнес-логика базы данных требует использовать кластеризованный индекс, следует убедиться, что значения, которые хранятся в индексе, не являются случайными. Случайные значения приведут к переупорядочению индекса при каждом добавлении или удалении строки в таблице.

Управление местом на диске и соответствующие политики не поддерживаются FILESTREAM напрямую. Однако можно управлять местом и применять политики косвенно путем присвоения каждой файловой группы FILESTREAM отдельному тому с последующим применением функций управления данного тома.

Источник

Sql File Stream Класс

Определение

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

Предоставляет данные сервера SQL Server, сохраненные с помощью атрибута столбца FILESTREAM, как последовательность байтов.

Комментарии

указание атрибута FILESTREAM в varbinary(max) столбце приводит к тому, что SQL Server хранить данные в локальной файловой системе NTFS, а не в файле базы данных. инструкции Transact-SQL предоставляют возможности обработки данных на сервере, а интерфейсы файловой системы Win32 обеспечивают потоковый доступ к данным.

Отдельные файлы, хранящиеся в столбце FILESTREAM, не могут быть открыты непосредственно из файловой системы NTFS. потоковая передача данных FILESTREAM работает только в контексте SQL Server транзакции.

SqlFileStreamКласс является производным от Stream класса, который представляет абстракцию последовательности байтов из какого-либо произвольного источника данных, например файла или блока памяти. Чтение из FILESTREAM осуществляется путем передачи данных из потока в структуру данных, такую как массив байтов. Можно выполнить запись в FILESTREAM, передавая данные из структуры данных в поток. Можно также выполнить поиск в потоке, что позволяет запрашивать и изменять данные в текущей позиции в потоке.

Сведения о концептуальной документации и примеры кода см. в разделе данные FILESTREAM.

документацию по настройке и настройке данных filestream на SQL Server см. в разделе проектирование и реализация служба хранилища filestream в электронной документации по SQL Server 2008.

Конструкторы

Инициализирует новый экземпляр класса SqlFileStream.

Инициализирует новый экземпляр класса SqlFileStream.

Свойства

Возвращает значение, определяющее в текущем потоке наличие поддержки операций чтения.

Возвращает значение, определяющее в текущем потоке наличие поддержки операций поиска.

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

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

Возвращает значение, определяющее в текущем потоке наличие поддержки операций записи.

Возвращает значение, указывающее длину текущего потока в байтах.

Возвращает логический путь SqlFileStream, переданного в конструктор.

Получает или задает позицию в текущем потоке.

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

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

Возвращает или задает контекст транзакции для данного объекта SqlFileStream.

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

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

Методы

Начинает операцию асинхронного чтения.

Начинает операцию асинхронного чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32).)

Начинает операцию асинхронной записи.

Начинает операцию асинхронной записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32).)

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

Считывает байты из текущего потока и записывает их в другой поток.

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

Асинхронно считывает байты из текущего потока и записывает их в другой поток.

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный токен отмены.

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

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

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

Освобождает все ресурсы, занятые модулем Stream.

Освобождает неуправляемые ресурсы, используемые объектом Stream, а при необходимости освобождает также управляемые ресурсы.

Асинхронно освобождает неуправляемые ресурсы, используемые классом Stream.

Ожидает завершения отложенного асинхронного чтения.

Ожидает завершения отложенного асинхронного чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32).)

Заканчивает операцию асинхронной записи.

Заканчивает операцию асинхронной записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32).)

Определяет, равен ли указанный объект текущему объекту.

Гарантирует, что ресурсы освобождены и выполнены другие операции очистки, когда сборщик мусора восстанавливает SqlFileStream.

Очищает все буферы для этого потока и приводит к записи всех буферизованных данных в базовое устройство.

Асинхронно очищает все буферы для этого потока и вызывает запись всех буферизованных данных в базовое устройство.

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

Служит хэш-функцией по умолчанию.

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

Возвращает объект Type для текущего экземпляра.

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

Создает неполную копию текущего объекта Object.

Создает неполную копию текущего объекта MarshalByRefObject.

Обеспечивает поддержку для Contract.

Считывает последовательность байтов из текущего потока и перемещает позицию внутри потока на число считанных байтов.

При переопределении в производном классе считывает последовательность байтов из текущего потока и перемещает позицию в потоке на число считанных байтов.

Асинхронно считывает последовательность байтов из текущего потока и перемещает позицию внутри потока на число считанных байтов.

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

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

Задает позицию в текущем потоке.

Устанавливает длину текущего потока.

Возвращает строку, представляющую текущий объект.

Записывает последовательность байтов в текущий поток и перемещает текущую позицию внутри потока на число записанных байтов.

При переопределении в производном классе записывает последовательность байтов в текущий поток и перемещает текущую позицию в нем вперед на число записанных байтов.

Асинхронно записывает последовательность байтов в текущий поток и перемещает текущую позицию внутри потока на число записанных байтов.

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

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

Записывает байт в текущее положение в потоке и перемещает позицию в потоке вперед на один байт.

Записывает байт в текущее положение в потоке и перемещает позицию в потоке вперед на один байт.

Явные реализации интерфейса

Освобождает все ресурсы, занятые модулем Stream.

Методы расширения

Асинхронно считывает байты из Stream и записывает их в указанный PipeWriter, используя токен отмены.

Преобразует заданный поток в поток прямого доступа.

Источник

Данные FILESTREAM

Для двоичных (BLOB) данных, хранимых в столбце varbinary(max), появился новый атрибут хранилища FILESTREAM. Перед созданием FILESTREAM для хранения двоичных данных требовалась специальная обработка. Неструктурированные данные, такие как текстовые документы, изображения и видео, часто хранятся вне базы данных, что затрудняет управление ими.

При указании для столбца varbinary(max) атрибута FILESTREAM сервер SQL Server сохраняет данные не в файле базы данных, а в файловой системе NTFS на локальном компьютере. Хотя эти данные хранятся отдельно, для работы с ними можно использовать те же инструкции Transact-SQL, что и для данных varbinary(max), хранящихся в базе данных.

Поддержка поставщика SqlClient для FILESTREAM

Поставщик данных Microsoft SqlClient для SQL Server (Microsoft.Data.SqlClient) поддерживает чтение и запись данных FILESTREAM с помощью класса SqlFileStream, определенного в пространстве имен System.Data.SqlTypes. SqlFileStream наследует от класса Stream, который предоставляет методы для чтения и записи в потоки данных. После считывания из потока данные передаются из потока в структуру данных, например массив байтов. Запись передает данные из структуры данных в поток.

Создание таблицы SQL Server

Приведенная ниже инструкция Transact-SQL создает таблицу employees и вставляет в нее строку данных. После включения хранилища FILESTREAM эту таблицу можно использовать вместе с приведенными ниже примерами кода. Ссылки на ресурсы электронной документации на SQL Server приведены в конце этой статьи.

Пример. Чтение, перезапись и вставка данных FILESTREAM

Ресурсы в электронной документации по SQL Server

Полная документация по FILESTREAM содержится в указанных ниже разделах электронной документации на SQL Server.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *