Физическое расположение данных FILESTREAM

Как я мог узнать физическое местоположение (чтобы я мог видеть его в проводнике Windows) путь FILESTREAM данные, которые я только что вставил в БД?

5 ответов

Для этого есть одна опция: метод PhysicalPathName(). Если вы используете SQL Server 2012 или более позднюю версию, этот код будет работать для вас:

SELECT stream.PhysicalPathName() AS 'Path' FROM Media
OPTION (QUERYTRACEON 5556)

Для SQL Server 2008/2008 R2 вам необходимо включить флаг трассировки 5556 для всего экземпляра:

DBCC TRACEON (5556, -1)
GO

или для конкретного соединения, в котором вы вызываете метод PhysicalPathName ():

DBCC TRACEON (5556, -1)
GO

Я знаю, что это старая запись, но, поскольку она все еще занимает высокие позиции в поисковом рейтинге Google, я решил опубликовать ответ. Конечно, в более поздних версиях SQL (я не пробовал это в 2008 году) вы можете выполнить следующий запрос:

SELECT      t.name AS 'table',
            c.name AS 'column', 
            fg.name AS 'filegroup_name', 
            dbf.type_desc AS 'type_description',
            dbf.physical_name AS 'physical_location'
FROM        sys.filegroups fg
INNER JOIN  sys.database_files dbf
ON          fg.data_space_id = dbf.data_space_id
INNER JOIN  sys.tables t
ON          fg.data_space_id = t.filestream_data_space_id
INNER JOIN  sys.columns c
ON          t.object_id = c.object_id
AND         c.is_filestream = 1

Источник

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

Имена файлов FILESTREAM на самом деле представляют собой порядковый номер журнала из журнала транзакций базы данных во время создания файлов. Пол Рэндал объяснил это в этом посте. Итак, один из вариантов - узнать порядковый номер журнала и найти файл с именем, названным по имени, в контейнере данных потока файлов.

Прежде всего вам необходимо понять, что FileStream хранится на сервере, на котором размещена база данных SQL Server 2008. Если у вас есть администратор базы данных, спросите их, где они создали FileStream. Конечно, тогда вам понадобятся права на сервер для навигации по нему, чтобы увидеть каталоги. Вы также не сможете манипулировать файлами, но вы сможете их видеть. Большинство администраторов баз данных не захотят сообщить, где находится FileStream.

Однако вы можете попасть на путь несколькими другими способами. Один из способов, который приходит на ум, - это выбрать PathName() поля FileStream. Предположим, что включенным полем FileStream является ReportData, а таблицей, в которой он находится, является TblReports. Следующий синтаксис t-sql приведет к UNC-расположению:

select top 1 ReportData.PathName(0)
from dbo.datReport

Я верю, что вы также можете попасть на этот путь другими способами через менеджера предприятия, но сейчас я забываю, как это сделать.

--filestream путь к файлу

SELECT col.PathName() AS path FROM tbl
Другие вопросы по тегам