Эта короткая статья вызвана вопросом, поступившим через Twitter, (перефразированный) вопрос звучит так: «Могут ли данные FILESTREAM храниться удалённо?». Это сбивало с толку многих, и ни документация BOL по FILESTREAM, ни мой технический документ по FILESTREAM (см. здесь) прямо не отвечают на этот вопрос.
Контейнер данных FILESTREAM для базы данных должен располагаться на томе NTFS в локально подключённом хранилище. Так же, как файлы данных и журнала базы данных, каталог не может находиться в общей папке UNC. Путаница возникает из-за того, что к данным FILESTREAM можно обращаться удалённо через общую папку UNC — но что касается экземпляра-хозяина, хранилище FILESTREAM должно быть локальным.
Второй вопрос, который возник некоторое время назад: могут ли контейнеры данных FILESTREAM совместно использовать один и тот же каталог или быть вложенными. Ответы: отчасти да и отчасти нет... Давайте посмотрим.
Я создам первую базу данных с контейнером данных FILESTREAM:
CREATE DATABASE FileStreamTestDB1 ON PRIMARY
(NAME = FileStreamTestDB1_data, FILENAME = N'C:\SQLskills\FSTestDB1_data.mdf'),
FILEGROUP FileStreamFileGroup CONTAINS FILESTREAM
(NAME = FileStreamTestDB1Documents, FILENAME = N'C:\SQLskills\FSDC\Documents')
LOG ON
(NAME = FileStreamTestDB1_log, FILENAME = N'C:\SQLskills\FSTestDB1_log.ldf');
GO
А теперь попробуем создать другую базу данных с тем же родительским каталогом:
CREATE DATABASE FileStreamTestDB2 ON PRIMARY
(NAME = FileStreamTestDB2_data, FILENAME = N'C:\SQLskills\FSTestDB2_data.mdf'),
FILEGROUP FileStreamFileGroup CONTAINS FILESTREAM
(NAME = FileStreamTestDB2Documents, FILENAME = N'C:\SQLskills\FSDC\Documents2')
LOG ON
(NAME = FileStreamTestDB2_log, FILENAME = N'C:\SQLskills\FSTestDB2_log.ldf');
GO
Это работает нормально. Вы не можете использовать для другой базы данных тот же каталог, что и для первой (т.е. N'C:\SQLskills\FSDC\Documents'), но два контейнера данных FILESTREAM могут иметь один и тот же родительский каталог.
А теперь попробуем создать вложенный:
CREATE DATABASE FileStreamTestDB3 ON PRIMARY
(NAME = FileStreamTestDB3_data, FILENAME = N'C:\SQLskills\FSTestDB3_data.mdf'),
FILEGROUP FileStreamFileGroup CONTAINS FILESTREAM
(NAME = FileStreamTestDB3Documents, FILENAME = N'C:\SQLskills\FSDC\Documents\Documents3')
LOG ON
(NAME = FileStreamTestDB3_log, FILENAME = N'C:\SQLskills\FSTestDB3_log.ldf');
GO
Msg 5136, Level 16, State 2, Line 1
The path specified by 'C:\SQLskills\FSDC\Documents\Documents3' cannot be used for a FILESTREAM container since it is contained in another FILESTREAM container.
Msg 1802, Level 16, State 2, Line 1
CREATE DATABASE failed. Some file names listed could not be created. Check related errors.
Не работает, как и ожидалось, так как это описано в BOL здесь.

Комментариев нет:
Отправить комментарий