Файловая группа filestream по умолчанию не доступна в базе данных
Для настройки потокового доступа СОД к документам (FILESTREAM) необходимо выполнить следующую последовательность действий, описанных в данном разделе:
1. Включить поддержку FILESTREAM в диспетчере конфигурации MS SQL Server.
2. Переключить имеющийся экземпляр СОД в режим работы с FILESTREAM, либо создать новый экземпляр с соответствующим флагом.
Resolution
This issue is fixed in the following cumulative updates for SQL Server:
Note This fix will work for users who have not updated their Windows 10 version, because the issue is already fixed in the latest Windows 10 version.
Each new cumulative update for SQL Server contains all the hotfixes and all the security fixes that were included with the previous cumulative update. Check out the latest cumulative updates for SQL Server:
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.
Learn about the terminologythat Microsoft uses to describe software updates.
Перед началом использования хранилища FILESTREAM его необходимо включить в экземпляре компонента Компонент SQL Server Database Engine. В этом разделе описано, как включить FILESTREAM с помощью диспетчера конфигурации SQL Server.
Физическая структура базы данных
При проектировании базы данных FILESTREAM следует учитывать следующие рекомендации.
Столбцу FILESTREAM должен соответствовать столбец типа uniqueidentifier ROWGUID. Кроме того, типам таблиц также должен соответствовать уникальный индекс. Как правило, этот индекс не является кластеризованным. Если бизнес-логика базы данных требует использовать кластеризованный индекс, следует убедиться, что значения, которые хранятся в индексе, не являются случайными. Случайные значения приведут к переупорядочению индекса при каждом добавлении или удалении строки в таблице.
По соображениям производительности файловые группы и контейнеры FILESTREAM находятся на томах, отличных от тех, где находится операционная система, база данных SQL Server , журнал SQL Server , база данных tempdb или файл подкачки.
Управление местом на диске и соответствующие политики не поддерживаются FILESTREAM напрямую. Однако можно управлять местом и применять политики косвенно путем присвоения каждой файловой группы FILESTREAM отдельному тому с последующим применением функций управления данного тома.
В данной статье я расскажу как включить работу с файловым типом данных - filestream - в случае, если база данных уже создана ранее. Большинство примеров в сети Интернет рассказывает только как настроить filestream при создании новой базы и приводят SQL-скрипты для этого. Есть и примеры с обновлением базы данных, но опять же с приведением SQL-скриптов. На самом деле это можно сделать и через визуальный интерфейс MS SQL Server Management Studio. Об это и пойдет речь в данной статье.
Итак, Ваша база данных уже создана и, например, работает некоторое время. Вы решили использовать filestream для каких-то новых данных в вашей базе. (О том как включить filestream на уже созданной таблице с blob (бинарными) данными читайте в следующей статье.)
Т.е. в данном примере стоит задача создать новую таблицу для хранения filestream данных на уже существующей базе данных.
Итак, инструкция:
Шаг 1. Создание файловой группы. Все созданные в дальнейшем папки для хранения записей типа filestream будут объединяться в эти группы. Вы можете создать одну группу или несколько в зависимости от потребностей.
Первоначально нам необходимо открыть свойства базы данных, для этого в окне Object Explorer выберите свою базу и в контекстном меню перейдите по пункту "Properties":
В открывшемся диалоговом окне свойств выбранной БД в блоке "Select a page" выберите пункт "Filegroups".
В правой части окна под блоком Filestream нажмите кнопку "Add". Появится новая строка, в которой в колонке "Name" введите любое произвольное название группы на англ.языке без пробелов.
Шаг 2. Создание папки для хранения данных типа filestream.
- Колонка "File Type" - выберите тип "Filestream Data"
- Колонка "Filegroup" - укажите ранее созданную файловую группу
- Колонка "Logical Name" - введите любое произвольное название на англ.языке без пробелов (в дальнейшем сервер создаст папку с таким именем)
- Колонка "Path" - укажите путь, где будут храниться все файлы типа filestream. Путь должен быть указан без последней папки, т.к. ее сервер создаст сам по имени предыдущей колонки.
Теперь можно нажать кнопку ОК, чтобы сохранить результат:
Чтобы увидеть, что сделал SQL сервер в результате наших действий, перейдите по пути, который Вы указали как путь для хранения filestream-данных.
Вы увидите, что была создана папка, по имени "Logical Name", в которой расположены некоторые служебные файлы и папки:
Изменять или удалять данную служебную информацию не рекомендуется.
Шаг 3. Создание новой таблицы для хранения данных типа filestream. Вот здесь к сожалению без SQL-скрипта не обойтись, т.к. создать подобный filestream-столбец через конструктор таблиц невозможно. Поэтому я рекомендую сначала создать таблицу с обязательными для filestream колонками с помощью скрипта, а затем уже через конструктор дополнить ее нужными Вам полями.
Итак, открываем окно для ввода скриптов (для этого выберите свою БД и нажмите кнопку "New Query").
В открывшемся окне введите следующий скрипт:
Будет создана таблица с двумя обязательными полями: поле fileGUID - обязательный идентификатор, который сервер будет использовать для обозначения фалов, и поле fileDATA, непосредственно ссылающее на нужный файл в файловой системе.
После выполнения данного скрипта в созданной ранее папке Вы увидите новую папку с именем, похожим на некий идентификатор. Эта папка будет соответствовать Вашей таблице и в ней будут храниться сохраненные файлы.
Теперь Вы можете перейти в конструктор таблицы и дополнить ее нужными полями.
Обратите внимание, что из конструктора не видно, является ли поле fileDATA полем типа filestream.
Если Вы хотите проверить, является ли колонка полем типа filestream, можно выполнить такой скрипт:
В результате выполнения этого скрипта, Вы увидите список всех колонок указанной таблицы, которые имеют атрибут filestream.
Использование ID в URL-адресах вместо UserKey
Пошаговая инструкция по переносу содержимого KooBoo с XML на SQL Server 2008 R2
Before you can start to use FILESTREAM, you must enable FILESTREAM on the instance of the SQL Server Database Engine. This topic describes how to enable FILESTREAM by using SQL Server Configuration Manager.
Включение FILESTREAM
Включение и изменение параметров FILESTREAM
В меню Пуск последовательно выберите пункты Все программы, SQL Server, Средства настройки и щелкните Диспетчер конфигурации SQL Server.
В списке служб щелкните правой кнопкой мыши Службы SQL Server и выберите команду Открыть.
В оснастке Диспетчер конфигурации SQL Server найдите экземпляр SQL Server , в котором нужно включить FILESTREAM.
Щелкните правой кнопкой мыши экземпляр и выберите пункт Свойства.
В диалоговом окне Свойства SQL Server перейдите на вкладку FILESTREAM .
Установите флажок Разрешить FILESTREAM при доступе через Transact-SQL .
Если нужно считывать и записывать данные FILESTREAM из Windows, установите флажок Разрешить FILESTREAM при потоковом доступе файлового ввода-вывода. Введите имя общего ресурса Windows в поле Имя общего ресурса Windows .
Если удаленные клиенты должны иметь доступ к данным FILESTREAM, хранящимся в этом общем ресурсе, установите флажок Разрешить удаленным клиентам потоковый доступ к данным FILESTREAM.
В среде SQL Server Management Studioнажмите кнопку Создать запрос , чтобы открыть редактор запросов.
В редакторе запросов введите следующий код Transact-SQL :
Перезапустите службу SQL Server .
Best practices
Physical database design
When you design a FILESTREAM database, consider the following guidelines:
FILESTREAM columns must be accompanied by a corresponding uniqueidentifierROWGUID column. These kinds of tables must also be accompanied by a unique index. Typically this index is not a clustered index. If the databases business logic requires a clustered index, you have to make sure that the values stored in the index are not random. Random values will cause the index to be reordered every time that a row is added or removed from the table.
For performance reasons, FILESTREAM filegroups and containers should reside on volumes other than the operating system, SQL Server database, SQL Server log, tempdb, or paging file.
Space management and policies are not directly supported by FILESTREAM. However, you can manage space and apply policies indirectly by assigning each FILESTREAM filegroup to a separate volume and using the volume's management features.
Включение FILESTREAM (БД расположена на одном сервере с экземпляром СОД)
FILESTREAM не включается автоматически при установке или обновлении SQL Server. FILESTREAM необходимо включить с помощью Диспетчера конфигурации SQL Server и среды SQL Server Management Studio.
В данном разделе приведена последовательность действий по включению FILESTREAM в соответствии с Инструкцией по включению FILESTREAM на официальном сайте Microsoft.
Действия в Диспетчере конфигурации SQL Server
В меню Пуск выберите пункт Все программы -> Microsoft SQL Server \ -> Средства настройки и выберите пункт Диспетчер конфигурации SQL Server.
В списке служб щелкните правой кнопкой мыши "Службы SQL Server" и выберите "Открыть".
В открывшейся оснастке Диспетчера конфигурации SQL Server найдите экземпляр SQL Server, в котором нужно включить FILESTREAM.
Щелкните правой кнопкой мыши экземпляр и выберите пункт "Свойства".
В диалоговом окне "Свойства: SQL Server" перейдите на вкладку FILESTREAM (1).
Установите флажок Enable FILESTREAM for Transact-SQL access (Разрешить FILESTREAM при доступе через Transact-SQL) (2).
Установите флажок Enable FILESTREAM for file I/O streaming access (Разрешить FILESTREAM при потоковом доступе ввода-вывода) Введите имя общего ресурса Windows в поле Windows share name . (3).
Примечание
Отмечать флажок "Allow remote clients to have streaming access to FILESTREAM data" (Разрешить удаленным клиентам потоковый доступ к данным FILESTREAM) необходимо только в том случае, если SQL Server развёрнут на отдельном сервере (см. Включение FILESTREAM при использовании БД на удаленном сервере).
Действия в SQL Server Management Studio
В среде SQL Server Management Studio нажмите кнопку Создать запрос, чтобы открыть редактор запросов. В редакторе запросов введите следующий код Transact-SQL:
Перезапустите службу SQL Server .
Включение FILESTREAM (БД расположена на одном сервере с экземпляром СОД)
FILESTREAM не включается автоматически при установке или обновлении SQL Server. FILESTREAM необходимо включить с помощью Диспетчера конфигурации SQL Server и среды SQL Server Management Studio.
В данном разделе приведена последовательность действий по включению FILESTREAM в соответствии с Инструкцией по включению FILESTREAM на официальном сайте Microsoft.
Действия в Диспетчере конфигурации SQL Server
В меню Пуск выберите пункт Все программы -> Microsoft SQL Server \ -> Средства настройки и выберите пункт Диспетчер конфигурации SQL Server.
В списке служб щелкните правой кнопкой мыши "Службы SQL Server" и выберите "Открыть".
В открывшейся оснастке Диспетчера конфигурации SQL Server найдите экземпляр SQL Server, в котором нужно включить FILESTREAM.
Щелкните правой кнопкой мыши экземпляр и выберите пункт "Свойства".
В диалоговом окне "Свойства: SQL Server" перейдите на вкладку FILESTREAM (1).
Установите флажок Enable FILESTREAM for Transact-SQL access (Разрешить FILESTREAM при доступе через Transact-SQL) (2).
Установите флажок Enable FILESTREAM for file I/O streaming access (Разрешить FILESTREAM при потоковом доступе ввода-вывода) Введите имя общего ресурса Windows в поле Windows share name . (3).
Примечание
Отмечать флажок "Allow remote clients to have streaming access to FILESTREAM data" (Разрешить удаленным клиентам потоковый доступ к данным FILESTREAM) необходимо только в том случае, если SQL Server развёрнут на отдельном сервере (см. Включение FILESTREAM при использовании БД на удаленном сервере).
Действия в SQL Server Management Studio
В среде SQL Server Management Studio нажмите кнопку Создать запрос, чтобы открыть редактор запросов. В редакторе запросов введите следующий код Transact-SQL:
Перезапустите службу SQL Server .
Включение FILESTREAM (БД расположена на удаленном сервере)
Выполните все действия, описанные в предыдущем пункте. Помимо этого, выполните следующее:
1. Установите флажок "Allow remote clients to have streaming access to FILESTREAM data (Разрешить удаленным клиентам потоковый доступ к данным FILESTREAM) в меню свойств SQL Server на вкладке FILESTREAM.
Примечание
При использовании FILESTREAM c удаленным SQL-сервером соединение должно устанавливаться только с применением Windows-аутентификации.
Настройка экземпляра СОД для работы с FILESTREAM
Примечание
Действия, описанные в данном разделе, должны выполняться ПОСЛЕ настройки FILESTREAM.
Настройка поддержки Сервисом Обработки Документов включенного ранее FILESTREAM состоит из следующих этапов:
1. Включение FILESTREAM на экземпляре СОД.
Даже если FILESTREAM уже настроен, необходимо настроить экземпляр СОД для работы с ним. Существует две ситуации:
В данном случае при создании экземпляра СОД в командлете New-DssDocumentStoreInstance необходимо установить флаг -CreateFileStreamDb в положение 1 . По умолчанию данный флаг не будет взведен, и FILESTREAM не будет использоваться, даже если он был включен ранее.
- Экземпляр СОД уже создан (и используется).
В данном случае необходимо переключить экземпляр в режим работы с FILESTREAM при помощи командлета SwitchDssDocumentStoreInstance.
Внимание!
Данное действие создает новый экземпляр БД СОД, предназначенный для работы с FILESTREAM. При этом:
- Старый экземпляр БД сохраняется вместе со всем содержимым.
- Все настройки старого экземпляра БД будут перенесены на новый.
- Файлы из БД старого экземпляра НЕ переносятся.
- С момента взведения флага СОД продолжает работу ТОЛЬКО с новым экземпляром БД.
2. Установка флага SmallFile в поле AdditionalDocumentInfo структуры PostDocumentInput при выполнении REST-запроса на загрузку документа в СОД.
Если выполнены все предыдущие пункты данного раздела, запись документов все еще производится полностью в БД, т.к. флаг SmallFile в поле AdditionalDocumentInfo структуры PostDocumentInput по умолчанию не установлен или установлен в значение true , а значит все загружаемые в СОД документы считаются "маленькими".
Для начала записи с использованием FILESTREAM установите для загружаемых в СОД документов, считаемых "большими", флаг SmallFile в значение false .
Примечание
Критерии установки флага SmallFile в значение true или false могут быть различными. Рекомендуется считать "маленькими" ( SmallFile = true ) документы размером до 10 Мбайт.
Внимание!
Если FILESTREAM не настроен или настроен некорректно, флаг SmallFile = false будет записан в состояние true , а загружаемый документ будет записан в БД без использования FILESTREAM.
SQL Server 2014 Developer SQL Server 2014 Enterprise SQL Server 2014 Enterprise Core SQL Server 2014 Standard SQL Server 2014 Service Pack 2 SQL Server 2016 Developer SQL Server 2016 Enterprise SQL Server 2016 Enterprise Core SQL Server 2016 Standard SQL Server 2016 Service Pack 1 More. Less
Symptoms
Consider the following scenario:
You install Microsoft SQL Server 2014 or 2016 on a Windows 10 device.
You enable the FILESTREAM feature at the instance level.
You create a database that contains a FILESTREAM data container.
After you apply the Windows 10 Creators Update, when you start the database that contains the FILESTREAM data container, you may receive the following FILESTREAM feature is disabled error message in the error log.
Date/Time Error: 5591, Severity: 16, State: 5.
Date/Time FILESTREAM feature is disabled.
Also, when SQL Server starts, you may notice the following messages in the SQL Server error log:
Date/Time Server Microsoft SQL Server 2016 (RTM-GDR) (KB3210111) – 13.0.1728.2 (X64)
Date/Time
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows 10 Enterprise 6.3 (Build 15063: ) (Hypervisor)
Date/Time Server The service account is ‘CustomerName\MSSQL$InstanceName’. This is an informational message; no user action is required.
>RsFxFt.Dll::RsFxNsoInitialize failed: Error 0x80070005 (-2147024891)
>Failed to initialize the CFsaShareFilter interface
>Failed to initialize CFsaShareFilter: Error 0x80070005 (-2147024891)
Date/Time FILESTREAM: effective level = 0, configured level = 2, file system access share name = ‘InstanceName’.
Physical configuration and maintenance
When you set up FILESTREAM storage volumes, consider the following guidelines:
Turn off short file names on FILESTREAM computer systems. Short file names take significantly longer to create. To disable short file names, use the Windows fsutil utility.
Regularly defragment FILESTREAM computer systems.
Use 64-KB NTFS clusters. Compressed volumes must be set to 4-KB NTFS clusters.
Disable indexing on FILESTREAM volumes and set disablelastaccess. To set disablelastaccess, use the Windows fsutil utility.
Disable antivirus scanning of FILESTREAM volumes when it is not necessary. If antivirus scanning is necessary, avoid setting policies that will automatically delete offending files.
Set up and tune the RAID level for fault tolerance and the performance that is required by an application.
Физическая настройка и обслуживание
При использовании томов хранилища FILESTREAM обратите внимание на следующие рекомендации.
Отключите короткие имена файлов на компьютерах с FILESTREAM. Короткие имена файлов создаются гораздо дольше. Отключить короткие имена файлов можно с помощью программы Windows fsutil .
Регулярно выполняйте дефрагментацию на компьютерах с FILESTREAM.
Используйте файловую систему NTFS с кластерами по 64 килобайт. На сжатых томах должна быть файловая система NTFS с кластерами по 4 килобайта.
Отключите индексирование на томах FILESTREAM и установите параметр disablelastaccess. Чтобы установить параметр disablelastaccess, воспользуйтесь служебной программой Windows fsutil.
Отключите антивирусное сканирование на томах FILESTREAM, если оно не требуется. Если антивирусное сканирование необходимо, не настраивайте политики автоматического удаления зараженных файлов.
Настройте уровень отказоустойчивости и производительности RAID в соответствии с требованиями приложения.
Enabling FILESTREAM
To enable and change FILESTREAM settings
On the Start menu, point to All Programs, point to SQL Server, point to Configuration Tools, and then click SQL Server Configuration Manager.
In the list of services, right-click SQL Server Services, and then click Open.
In the SQL Server Configuration Manager snap-in, locate the instance of SQL Server on which you want to enable FILESTREAM.
Right-click the instance, and then click Properties.
In the SQL Server Properties dialog box, click the FILESTREAM tab.
Select the Enable FILESTREAM for Transact-SQL access check box.
If you want to read and write FILESTREAM data from Windows, click Enable FILESTREAM for file I/O streaming access. Enter the name of the Windows share in the Windows Share Name box.
If remote clients must access the FILESTREAM data that is stored on this share, select Allow remote clients to have streaming access to FILESTREAM data.
Click Apply.
In SQL Server Management Studio, click New Query to display the Query Editor.
In Query Editor, enter the following Transact-SQL code:
Click Execute.
Restart the SQL Server service.
Рекомендации
Читайте также: