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

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

  • Службы SQL Server Integration Services (SSIS)

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

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

  • Репликация

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

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

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

  • Кластер отработки отказа

  • SQL Server Express

Службы SQL Server Integration Services

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

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

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

Работать с данными FILESTREAM можно через распределенные запросы и связанные серверы, рассматривая эти данные как varbinary(max). Функция FILESTREAM PathName() не может использоваться в распределенных запросах с четырехкомпонентным именем, даже если это имя ссылается на локальный сервер. Но можно использовать функцию PathName() во внутреннем запросе передаваемого запроса, где используется OPENQUERY().

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

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

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

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

Could not continue scan with NOLOCK due to data movement.

Репликация

Столбец varbinary(max), атрибут FILESTREAM которого включен на издателе, может быть реплицирован на подписчик с атрибутом FILESTREAM или без него. Указать способ репликации этого столбца можно в диалоговом окне Свойства статьи — <статья> или в параметре @schema_option хранимой процедуры sp_addarticle или sp_addmergearticle. Дополнительные сведения о задании параметров схемы см. в разделах Как указать параметры схемы (среда SQL Server Management Studio) и Как задать параметры схемы (программирование репликации на языке Transact-SQL). Данные, реплицированные в столбец varbinary(max) без атрибута FILESTREAM, не должны превышать установленный в 2 ГБ предел для данного типа данных; в противном случае формируется ошибка выполнения. Рекомендуется выполнять репликацию атрибута FILESTREAM, если данные не реплицируются в SQL Server 2005. Репликация таблиц со столбцами FILESTREAM на подписчики SQL Server 2000 не поддерживается, независимо от установленного параметра схемы. Дополнительные сведения о репликации данных в более ранние версии SQL Server см. в разделе Использование нескольких версий SQL Server в топологии репликации.

ПримечаниеПримечание

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

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

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

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

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

  • Если параметр схемы настроен на репликацию параметра FILESTREAM, но необходимый для FILESTREAM столбец uniqueidentifier был отфильтрован, или если для этого столбца была отменена репликация ограничения UNIQUE, то репликация атрибута FILESTREAM осуществлена не будет. Столбец будет реплицирован только как столбец типа varbinary(max).

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

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

  • Как для репликации слиянием, так и для атрибута FILESTREAM необходим столбец типа данных uniqueidentifier, позволяющий идентифицировать каждую строку таблицы. Если в таблице такого столбца нет, репликация слиянием автоматически добавляет его. Для репликации слиянием требуется, чтобы было установлено свойство ROWGUIDCOL данного столбца и чтобы значениями по умолчанию для данного столбца являлись NEWID() или NEWSEQUENTIALID(). В дополнение к этим требованиям для атрибута FILESTREAM необходимо задание ограничения UNIQUE для данного столбца. Эти требования приводят к следующим последствиям.

    • При добавлении столбца 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, невозможна.

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

Полнотекстовое индексирование обрабатывает столбцы FILESTREAM так же, как и столбцы типа varbinary(max). В таблице FILESTREAM должен присутствовать столбец, в котором содержится расширение имени файла для каждого блока больших двоичных объектов (BLOB) FILESTREAM. Дополнительные сведения см. в разделах Запросы столбцов varbinary(max) и xml (полнотекстовый поиск), Фильтры полнотекстового поиска, Процесс полнотекстового индексирования и обработки запросов и sys.fulltext_document_types (Transact-SQL).

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

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

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

SQL Server Express

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