4.4.26

Структура каталогов FILESTREAM – откуда берутся GUID?

Автор: Andy Brownsword, FILESTREAM directory structure – where do the GUIDs come from?

На этой неделе я вёл курс «Microsoft Certified Masters – Database» здесь, в Редмонде, и в первый день мы обсуждали структуру каталогов FILESTREAM. Мне задали вопрос: откуда берутся GUID имён каталогов? Поэтому я начал копаться в системных таблицах, пока Кимберли читала лекцию. Посмотрите мою предыдущую статью блога (Структура каталога FILESTREAM) за прошлую неделю, чтобы увидеть схему базы данных, с которой я работаю. Я воссоздал её снова и написал несколько запросов, чтобы найти, где хранятся GUID, поскольку они должны где-то храниться в базе данных.

Вот запрос для поиска всех имён каталогов FILESTREAM для обоих уровней каталога (и вы должны выполнить его через выделенное административное соединение (DAC), так как он обращается к недокументированным, скрытым системным таблицам):

SELECT [o].[name] AS [Table], [cp].[name] AS [Column], [p].[partition_number] AS [Partition], [r].[rsguid] AS [Rowset GUID], [rs].[colguid] AS [Column GUID] FROM sys.sysrowsets [r] CROSS APPLY sys.sysrscols [rs] JOIN sys.partitions [p] ON [rs].[rsid] = [p].[partition_id] JOIN sys.objects [o] ON [o].[object_id] = [p].[object_id] JOIN sys.syscolpars [cp] ON [cp].[colid] = [rs].[rscolid] WHERE [rs].[colguid] IS NOT NULL AND [o].[object_id] = [cp].[id] AND [r].[rsguid] IS NOT NULL AND [r].[rowsetid] = [rs].[rsid]; GO

Ниже показан снимок экрана для моего сценария.


Вы можете видеть, что я подключён через административное соединение в SSMS, и что имя каталога верхнего уровня является производным от GUID набора строк (rowset), а имя каталога уровня столбца является производным от GUID столбца. Обратите внимание, что некоторые части имеют обратный порядок байтов (byte-reversed), но это определённо те самые GUID.




Комментариев нет:

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