Включение необходимых компонентов для FileTable

Применимо к:SQL Server

Описывает способ включения компонентов, обязательных для создания и использования таблиц FileTable.

Включение необходимых компонентов для FileTable

Чтобы включить необходимые компоненты для создания и использования таблиц FileTable, включите следующие элементы:

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

FileTables расширяет возможности функции FILESTREAM SQL Server. Перед созданием и использованием fileTable необходимо включить доступ к FILESTREAM на уровне Windows и экземпляре SQL Server.

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

Сведения о включении FILESTREAM см. в разделе Включение и настройка FILESTREAM.

При вызове sp_configure включения FILESTREAM на уровне экземпляра необходимо задать filestream_access_level параметр 2. Дополнительные сведения см. на уровне доступа FILESTREAM (параметр конфигурации сервера).

Разрешить FILESTREAM через брандмауэр

Сведения о разрешении FILESTREAM через брандмауэр см. в разделе Configure a Firewall for FILESTREAM Access.

Предоставление файловой группы FILESTREAM на уровне базы данных

Для создания в базе данных таблиц FileTables эта база должна иметь файловую группу FILESTREAM. Дополнительные сведения об этом предварительном требовании см. в статье Создание базы данных FILESTREAM-Enabled.

Включение нетрансактционного доступа на уровне базы данных

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

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

Запросите представление каталога sys.database_filestream_options (Transact-SQL) и проверка non_transacted_access столбцов и non_transacted_access_desc столбцов.

SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
    FROM sys.database_filestream_options;
GO

Включение нетрансактционного доступа на уровне базы данных

Доступные уровни нетрансактного доступа — FULL, READ_ONLY и OFF.

Укажите уровень нетрансактного доступа с помощью Transact-SQL

При создании базы данных вызовите инструкцию CREATE DATABASE (SQL Server Transact-SQL) с параметром NON_TRANSACTED_ACCESS FILESTREAM.

CREATE DATABASE database_name
  WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );

При изменении существующей базы данных вызовите инструкцию ALTER DATABASE (Transact-SQL) с параметром NON_TRANSACTED_ACCESS FILESTREAM.

ALTER DATABASE database_name
  SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );

Укажите уровень нетрансактного доступа с помощью SQL Server Management Studio

Уровень нетрансактного доступа можно указать в поле "Нетрансактный доступ" в поле "Нетрансактированного доступа" диалогового окна "Параметры" диалогового окна "Свойства базы данных". Дополнительные сведения об этом диалоговом окне см. в разделе "Свойства базы данных" (страница параметров).

Указание каталога для fileTables на уровне базы данных

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

В иерархии папок FileTable этот каталог на уровне базы данных является дочерним по отношению к общему ресурсу для FILESTREAM на уровне экземпляра и родительским по отношению к таблицам FileTable, созданным в базе данных. Дополнительные сведения см. в статье Work with Directories and Paths in FileTables.

Указание каталога для fileTables на уровне базы данных

Указанное имя должно быть уникальным в экземпляре для каталогов уровня базы данных.

Указание каталога для FileTables с помощью Transact-SQL

При создании базы данных вызовите инструкцию CREATE DATABASE (SQL Server Transact-SQL) с параметром DIRECTORY_NAME FILESTREAM.

CREATE DATABASE database_name
  WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );
GO

При изменении существующей базы данных вызовите инструкцию ALTER DATABASE (Transact-SQL) с параметром DIRECTORY_NAME FILESTREAM. Если эти параметры используются для изменения имени каталога, то база данных должна быть заблокирована в монопольном режиме при отсутствии открытых дескрипторов файлов.

ALTER DATABASE database_name
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );
GO

При присоединении базы данных вызовите инструкцию CREATE DATABASE (SQL Server Transact-SQL) с FOR ATTACH параметром и параметром DIRECTORY_NAME FILESTREAM.

CREATE DATABASE database_name
    FOR ATTACH WITH FILESTREAM ( DIRECTORY_NAME = N'directory_name' );
GO

При восстановлении базы данных вызовите инструкцию RESTORE (Transact-SQL) с параметром DIRECTORY_NAME FILESTREAM.

RESTORE DATABASE database_name
    WITH FILESTREAM ( DIRECTORY_NAME = N'directory_name' );
GO

Указание каталога для fileTables с помощью SQL Server Management Studio

Можно указать имя каталога в поле Имя каталога FILESTREAM на странице Параметры диалогового окна Свойства базы данных . Дополнительные сведения об этом диалоговом окне см. в разделе "Свойства базы данных" (страница параметров).

Просмотр существующих имен каталогов для экземпляра

Чтобы просмотреть список существующих имен каталогов для экземпляра, выполните запрос к представлению каталога sys.database_filestream_options (Transact-SQL) и проверка столбцаfilestream_database_directory_name.

SELECT DB_NAME ( database_id ), directory_name
    FROM sys.database_filestream_options;
GO

Требования и ограничения для каталога уровня базы данных

  • Установка необязательного DIRECTORY_NAME при вызове CREATE DATABASE или ALTER DATABASE. Если значение не указано DIRECTORY_NAME, имя каталога остается пустым. Однако нельзя создавать таблицы FileTable в базе данных, пока не укажите значение на DIRECTORY_NAME уровне базы данных.

  • Указываемое имя каталога должно соответствовать требованиям файловой системы для допустимых имен каталогов.

  • Если база данных содержит fileTables, вы не можете задать DIRECTORY_NAME значение NULL.

  • При присоединении или восстановлении базы данных операция завершается ошибкой, если новая база данных имеет значение, которое DIRECTORY_NAME уже существует в целевом экземпляре. Укажите уникальное значение при DIRECTORY_NAME вызове CREATE DATABASE FOR ATTACH или RESTORE DATABASE.

  • При обновлении существующей базы данных значение DIRECTORY_NAME равно NULL.

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

  • При удалении базы данных, в которой включены таблицы FileTable, каталог на уровне базы данных и все структуры каталогов всех находящихся в ней таблиц FileTable удаляются.