Поделиться через


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

Область применения:SQL Server

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

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

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

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

FileTables расширяет возможности функции FILESTREAM SQL Server. Перед тем как вы сможете создать и использовать FileTables, необходимо включить 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 и параметром FILESTREAM DIRECTORY_NAME.

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, то имя каталога остается равным null. Однако нельзя создавать FileTables в базе данных, пока не укажете значение DIRECTORY_NAME на уровне базы данных.

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

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

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

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

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

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