SQL Server. FILESTREAM. Активация и взаимодействие с ОС. Часть 2.

Активация FILESTREAM

Активация FILESTREAM происходит в двух точках:

  • В SQL Server Configuration Manager в свойствах SQL Server;
  • В SQL Server Management Studio (SSMS).

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


Активация в SQL Server Configuration Manager

В SQL Server Configuration Manager в свойствах SQL Server выберите закладку FILESTREAM.
Выберите  "Enable FILESTREAM for Transact-SQL access".
Если вы не хотите иметь доступ к данным FILESTREAM из локальной Windows системы (специального Win32 API), то на этом можно действия прекратить и перейти к настройке в SSMS, если же вы хотите получать доступ к этим данным используя Windows API, то вам необходимо продолжить настройки.
Выберите "Enable FILESTREAM for file I/O streaming access."
Введите имя общей папки в поле "Windows Share Name" box. Через эту папку будут перенаправляться запросы к файлам FILESTREAM. Об этом мы поговорим далее.
Если вы хотите разрешить доступ к этим файлам не только с локального сервера, но и с удаленных клиентских компьютеров, то выберите пунк "Allow remote clients to have streaming access to FILESTREAM data."
Примечание:Если это кластер выполните эти действия на всех узлах кластера. Имя, введенное в "Windows Share Name", должно быть одинаково на всех узлах кластера. В данном случае я использовал имя SQL2014_FileStream


Активация в SQL Server Management Studio.

Для включения FILESTREAM и разрешения доступа к нему через Transact-SQL - выполните EXEC sp_configure 'filestream_access_level', 1;  RECONFIGURE 
Для включения FILESTREAM и разрешения доступа к нему через Transact-SQL и Win32 - выполните - EXEC sp_configure 'filestream_access_level', 2;  RECONFIGURE
Выполним команду EXEC sp_configure 'filestream_access_level', 2;  RECONFIGURE в SSMS и посмотрим, что произошло в ОС. Для этого из командной строки ОС выполним команду FLTMC.EXE. 
Для отключения FILESTREAM выполните - EXEC sp_configure 'filestream_access_level', 0;  RECONFIGURE

1_4.jpg

Как видим в Windows появился новый фильтр с именем RsFx0300. Этот фильтр монтируется в Windows на "высоте" 4100х и перехватывает обращения клиентов Win32 API к файлам FILESTREAM (как это происходит будет показано далее). Это фильтр представляет собой мини-фильтр драйвер (minifilter driver). Обратите также внимание, что он устанавливается сразу же после Wof-драйвера представляющего собой "Windows Overlay File System Filter Driver".
Информация для установки этого минидрайвера взята из файла "C:\Program Files\Microsoft SQL Server\120\Shared\RsFxInstall\RsFx0300.inf", установка файла произведена в ""C:\WINDOWS\system32\Drivers\RsFx0300.sys", а информация об установке драйвера находится HKLM\System\CurrentControlSet\Services\RsFx0300.  
Выполните "NET SHARE" в командной строке Windows, и вы должны увидеть

Share name                                    Resource                                                                                                             Remark
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL2014_FileStream     \\?\GLOBALROOT\Device\RsFx0300\\SQL2014_FileStream   SQL Server FILESTREAM share

Имя SQL2014_FileStream это имя общего ресурса, которое вы ввели в "Windows Share Name"
Попробуйте подсоединиться \\localhost\SQL2014_FileStream у вас это должно получиться, но папка должна быть пуста. Она всегда пуста поскольку это виртуальная точка соединения для Win32 API клиентов (C#, VB)
Общее имя "\localhost\SQL2014_FileStream" регистрируется в HKLM\System\CurrentControlSet\Services\LanManServer\Shares
Как было описано выше RsFx0300 это имя фильтра (драйвера), который монтируется в стек Windows и будет перехватывать обращения клиентов работающих через Win32 API и обращающихся к файлам по имени полученном функцией .PathName(...).
Как видно из описания настроек и конфигурации, несмотря на то, что создается общая папка, разработчики не предполагали общего доступа к файлам FILESTREAM через оболочку Windows как к стандартным файлам. Если вам нужна такая возможность вы должны вместо FILESTREAM использовать файловые таблицы (File Table).
Мы произвели все подготовительные мероприятия для развертывания системы FILESTREAM.
Дальнейшее рассмотрение этой темы мы продолжим в наших следующих статьях.


Александр Каленик, Senior Premier Field Engineer (PFE), MSFT (Russia)