Требования к проверке подлинности Windows определяются особенностями API файлового
ввода-вывода Windows. Единственный способ передать идентификатор клиента из клиентского приложения в SQL Server во время операций файлового ввода-вывода — использовать токен Windows, связанный с потоком клиента.

Созданный контейнер данных FILESTREAM будет автоматически защищен, поэтому только учетная запись службы SQL Server и члены группы BUILTIN\Administrators имеют доступ к дереву каталогов контейнера данных. Следует соблюдать осторожность, чтобы содержимое контейнера данных изменялось только с помощью поддерживаемых транзакционных методов, так как изменение с помощью других методов приведет к повреждению контейнера.

Включение FILESTREAM в SQL Server

Второй шаг (включение FILESTREAM) выполняется на экземпляре SQL Server 2008. Этого
не следует делать до тех пор, пока не будет включен FILESTREAM на уровне Windows и не подготовлен том NTFS, на котором будут храниться данные FILESTREAM (как описано выше
в разделе «Настройка Windows для FILESTREAM»).

На экземпляре SQL Server доступ к FILESTREAM управляется с помощью процедуры sp_configure, которая позволяет установить параметр конфигурации filestream_access_level
в одно из трех значений. Допустимые параметры:

·  0 — отключить поддержку FILESTREAM для данного экземпляра.

·  1 — включить FILESTREAM только для доступа через Transact-SQL.

·  2 — включить FILESTREAM для Transact-SQL и потокового доступа через Win32.

В следующем примере показано, как включить FILESTREAM для Transact-SQL и потокового доступа через Win32.

НЕ нашли? Не то? Что вы ищете?

EXEC sp_configure filestream_access_level, 2;

GO

RECONFIGURE;

GO

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

EXEC sp_configure filestream_access_level;

GO

Если FILESTREAM не настроен на уровне Windows, то значение «config_value» на выходе sp_configure будет отличаться (т. е. 0) от «run_value» после выполнения инструкции RECONFIGURE.

Создание базы данных с поддержкой FILESTREAM

После того как компонент FILESTREAM будет включен на уровнях Windows и SQL Server,
станет возможно определить контейнер данных FILESTREAM. Это делается путем определения файловой группы FILESTREAM в базе данных. Существует соответствие 1:1 между файловыми группами FILESTREAM и контейнерами данных FILESTREAM.

Файловую группу FILESTREAM можно определить как во время создания базы данных,
так и отдельно с помощью инструкции ALTER DATABASE. В следующем примере создается файловая группа FILESTREAM в существующей базе данных.

ALTER DATABASE Production ADD

FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM;

GO

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

Сообщение 5591, уровень 16, состояние 3, строка 1

Компонент FILESTREAM отключен.

При условии, что FILESTREAM включен на уровнях Windows и SQL Server, файловая группа будет создана. На этом этапе контейнер данных FILESTREAM определен путем добавления одного файла в файловую группу. Указанный путь представляет собой путь к каталогу, который будет создан в качестве корневого для контейнера данных. Должен быть указан весь путь, за исключением окончательного имени каталога. В следующем примере определяется контейнер данных для созданной ранее файловой группы FileStreamGroup1.

ALTER DATABASE Production ADD FILE (

NAME = FSGroup1File,

FILENAME = 'F:\Production\FSDATA')

TO FILEGROUP FileStreamGroup1;

GO

На этом этапе будет создан каталог FSDATA. Он не будет содержать ничего, кроме двух объектов.

·  Файл filestream. hdr. Это метаданные FILESTREAM для контейнера данных.

·  Каталог $FSLOG. Аналог FILESTREAM для журнала транзакций базы данных.

Следует отметить, что база данных может иметь несколько файловых групп FILESTREAM.
Это может оказаться полезным для того, чтобы разделить хранилище больших двоичных объектов для нескольких таблиц в базе данных.

Создание таблицы для хранения данных FILESTREAM

Если база данных содержит файловую группу FILESTREAM, то можно создавать таблицы, содержащие столбцы FILESTREAM. Как упоминалось ранее, столбец FILESTREAM определяется как столбец varbinary (max) с атрибутом FILESTREAM. Следующий код создает таблицу с одним столбцом FILESTREAM.

USE Production;

GO

CREATE TABLE DocumentStore (

DocumentID INT IDENTITY PRIMARY KEY,

Document VARBINARY (MAX) FILESTREAM NULL,

DocGUID UNIQUEIDENTIFIER NOT NULL ROWGUIDCOL

UNIQUE DEFAULT NEWID ())

FILESTREAM_ON FileStreamGroup1;

GO

В таблице может содержаться несколько столбцов FILESTREAM, но данные из этих столбцов должны храниться в одной файловой группе FILESTREAM. Если предложение FILESTREAM_ON не указано, то будет использоваться файловая группа FILESTREAM, выбираемая по умолчанию. Такая конфигурация может оказаться неоптимальной и привести к проблемам с производительностью.

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

Обратите внимание, что таблица, имеющая один или несколько столбцов FILESTREAM, должна также иметь столбец типа uniqueidentifier с атрибутом ROWGUIDCOL. Этот столбец не должен допускать значений NULL и должен иметь относящееся к одному столбцу ограничение UNIQUE или PRIMARY KEY. Значение идентификатора GUID для столбца должно быть предоставлено либо приложением во время вставки данных, либо ограничением DEFAULT, которое использует функцию NEWID () (или NEWSEQUENTIALID (), если задана репликация слиянием, как описано
в разделе «Сочетания функций и ограничения» ниже).

Дополнительные сведения о подробностях и ограничениях схемы и параметров таблицы см.
в разделе «CREATE TABLE (Transact-SQL)» электронной документации по SQL Server 2008 на странице http://msdn. microsoft. com/ru-ru/library/ms174979.aspx.

Настройка сборки мусора FILESTREAM

Файлы данных FILESTREAM в контейнере данных FILESTREAM нельзя обновить частично. Это означает, что при любом изменении данных больших двоичных объектов в столбце FILESTREAM будет создаваться новый файл данных FILESTREAM. «Старый» файл необходимо хранить до
тех пор, пока он нужен для целей восстановления. Файлы, представляющие удаленные данные FILESTREAM, или подвергшиеся откату операции вставки данных FILESTREAM аналогичным образом сохраняются.

Файлы, которые больше не нужны, удаляются процессом сборки мусора. Это автоматический процесс, в отличие от Windows SharePoint® Services, где сборщик мусора необходимо реализовать вручную для внешнего хранилища больших двоичных объектов.

Все файловые операции FILESTREAM сопоставляются с регистрационным номером транзакции (LSN) в журнале транзакций базы данных. После усечения журнала транзакций с удалением номера LSN операции FILESTREAM файл больше не нужен и может быть обработан сборщиком мусора. Поэтому все, что может помешать усечению журнала транзакций, также может помешать и физическому удалению файла FILESTREAM. Некоторые примеры.

·  В модели восстановления FULL или BULK_LOGGED не было выполнено резервное копирование журналов.

·  Существует длительно выполняющаяся активная транзакция.

·  Не запущено задание чтения журнала репликации.

Сборка мусора FILESTREAM — фоновая задача, которая активируется процессом контрольной точки базы данных. Контрольная точка автоматически выполняется при создании достаточного журнала транзакций. Дополнительные сведения см. в разделе «CHECKPOINT и активная
часть журнала» электронной документации по SQL Server 2008 (http://msdn. /
ru-ru/library/ms189573.aspx). С учетом того, что файловые операции FILESTREAM минимально протоколируются в журнале транзакций базы данных, может пройти много времени, прежде чем число записей в журнале транзакций достигнет величины, которая запустит процесс контрольных точек, и начнется сборка мусора. При возникновении проблем можно начать сборку мусора
с помощью инструкции CHECKPOINT.

Вопросы секционирования

Если таблица, содержащая данные FILESTREAM, секционирована, то предложение FILESTREAM_ON должно задавать схему секционирования, в том числе файловые группы FILESTREAM, на основе функции секционирования таблицы. Это является обязательным, так как в обычной схеме секционирования задействованы обычные файловые группы, которые не могут использоваться для хранения данных FILESTREAM. Определение таблицы (в инструкции CREATE TABLE или CREATE CLUSTERED INDEX … WITH DROP_EXISTING) указывает обе схемы секционирования.

Схема секционирования FILESTREAM может указывать, что все секции сопоставляются с одной файловой группой, но так делать не рекомендуется, так как это может привести к снижению производительности.

Этот синтаксис показан в следующем (искусственном) примере.

CREATE PARTITION FUNCTION DocPartFunction (INT)

AS RANGE RIGHT FOR VALUES (100000, 200000);

GO

CREATE PARTITION SCHEME DocPartScheme AS

PARTITION DocPartFunction TO (Data_FG1, Data_FG2, Data_FG3);

GO

CREATE PARTITION SCHEME DocFSPartScheme AS

PARTITION DocPartFunction TO (FS_FG1, FS_FG2, FS_FG3);

GO

CREATE TABLE DocumentStore (

DocumentID INT IDENTITY PRIMARY KEY,

Document VARBINARY (MAX) FILESTREAM NULL,

DocGUID UNIQUEIDENTIFIER NOT NULL ROWGUIDCOL

UNIQUE DEFAULT NEWID () ON Data_FG1)

ON DocPartScheme (DocumentID)

FILESTREAM_ON DocFSPartScheme;

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8