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


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

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

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

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

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

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

Инструкции. Включение функции FILESTREAM на уровне экземпляра

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

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

Инструкции. Разрешение 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

```sql  
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
Можно задать уровень нетранзакционного доступа в поле Нетранзакционный доступ к файловому потоку на странице Параметры диалогового окна Свойства базы данных . Дополнительные сведения об этом диалоговом окне см. в разделе Свойства базы данных (страница параметров).

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

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

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

Инструкции. Указание каталога для таблиц FileTable на уровне базы данных

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

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

```sql  
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  
    

Задание каталога для таблиц FileTable в среде 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  

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

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

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

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

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

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

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

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