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


Включение предпосылок для FileTable

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

Включение предварительных условий для FileTable

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

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

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

Руководство по включению 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, необходимо указать требуемый уровень доступа без транзакций на уровне базы данных для каждой базы данных, содержащей fileTables.

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

Запросите представление каталога 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.

Как указать директорию для FileTables на уровне базы данных

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

Указание каталога для fileTables с помощью 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  

Требования и ограничения для каталога Database-Level

  • Настройка 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.

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

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

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