Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Объекты Файловых групп  [new]
Роман86
Member

Откуда:
Сообщений: 32
Хотел уточнить, у гуру сиквела, каким образом можно для конкретной файловой группы определить, какие в нее входят объекты БД?
10 июн 15, 12:50    [17754616]     Ответить | Цитировать Сообщить модератору
 Re: Объекты Файловых групп  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
DECLARE @file_group_id INT = FILEGROUP_ID('PRIMARY')

SELECT t.*
FROM (
	SELECT
		  o.[object_id]
		, [object_name] = ch.name + '.' + o.name
		, index_name = i.name
		, s.partition_number
		, i.data_space_id
		, s.row_count
	FROM sys.dm_db_partition_stats s
	JOIN sys.objects o ON s.[object_id] = o.[object_id]
	JOIN sys.schemas ch ON o.[schema_id] = ch.[schema_id]
	JOIN sys.indexes i ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
	WHERE o.[type] IN ('V', 'U')
		AND o.is_ms_shipped = 0
) t
OUTER APPLY (
	SELECT dd.data_space_id
	FROM sys.destination_data_spaces dd
	WHERE dd.partition_scheme_id = t.data_space_id
		AND dd.destination_id = t.partition_number
) dd
OUTER APPLY (
	SELECT t2.lob_data_space_id
	FROM sys.tables t2
	WHERE t2.[object_id] = t.[object_id]
		AND lob_data_space_id != 0
) ld
WHERE COALESCE(dd.data_space_id, ld.lob_data_space_id, t.data_space_id) = @file_group_id


Какие таблицы/вьюхи и индексы для них.... Если нужны просто объекты, то DISTINCT по полю object_name
10 июн 15, 13:03    [17754725]     Ответить | Цитировать Сообщить модератору
 Re: Объекты Файловых групп  [new]
o-o
Guest
sys.indexes, sys.filegroups, sys.all_objects?

что-то такое:
List All Objects Created on All Filegroups in Database
10 июн 15, 13:03    [17754727]     Ответить | Цитировать Сообщить модератору
 Re: Объекты Файловых групп  [new]
Basma4
Member

Откуда:
Сообщений: 124
SELECT DS.name AS FileGropName 
      ,OBJ.type_desc AS ObjectType       
      ,OBJ.name AS ObjectName 
      ,IDX.type_desc AS IndexType 
      ,IDX.name AS IndexName 
FROM sys.data_spaces AS DS 
     INNER JOIN sys.allocation_units AS AU 
         ON DS.data_space_id = AU.data_space_id 
     INNER JOIN sys.partitions AS PA 
         ON (AU.type IN (1, 3)  
             AND AU.container_id = PA.hobt_id) 
            OR 
            (AU.type = 2 
             AND AU.container_id = PA.partition_id) 
     INNER JOIN sys.objects AS OBJ 
         ON PA.object_id = OBJ.object_id 
     INNER JOIN sys.schemas AS SCH 
         ON OBJ.schema_id = SCH.schema_id 
     LEFT JOIN sys.indexes AS IDX 
         ON PA.object_id = IDX.object_id 
            AND PA.index_id = IDX.index_id 
WHERE DS.name='YOUR FILEGROUP'
ORDER BY DS.name 
        ,SCH.name 
        ,OBJ.name 
        ,IDX.name
10 июн 15, 13:05    [17754735]     Ответить | Цитировать Сообщить модератору
 Re: Объекты Файловых групп  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Basma4
SELECT DS.name AS FileGropName 
      ,OBJ.type_desc AS ObjectType       
      ,OBJ.name AS ObjectName 
      ,IDX.type_desc AS IndexType 
      ,IDX.name AS IndexName 
FROM sys.data_spaces AS DS 
     INNER JOIN sys.allocation_units AS AU 
         ON DS.data_space_id = AU.data_space_id 
     INNER JOIN sys.partitions AS PA 
         ON (AU.type IN (1, 3)  
             AND AU.container_id = PA.hobt_id) 
            OR 
            (AU.type = 2 
             AND AU.container_id = PA.partition_id) 
     INNER JOIN sys.objects AS OBJ 
         ON PA.object_id = OBJ.object_id 
     INNER JOIN sys.schemas AS SCH 
         ON OBJ.schema_id = SCH.schema_id 
     LEFT JOIN sys.indexes AS IDX 
         ON PA.object_id = IDX.object_id 
            AND PA.index_id = IDX.index_id 
WHERE DS.name='YOUR FILEGROUP'
ORDER BY DS.name 
        ,SCH.name 
        ,OBJ.name 
        ,IDX.name


похоже, даже с учетом того, что lob'ы могут лежать в своей файловой группе.
10 июн 15, 13:20    [17754842]     Ответить | Цитировать Сообщить модератору
 Re: Объекты Файловых групп  [new]
o-o
Guest
Basma4,

у вас же sys.allocation_units,
а у него по идее на каждого (если есть) выпадет по стоке на
IN_ROW_DATA
ROW_OVERFLOW_DATA
LOB_DATA
их, наверное, стОит показать в результате, или вписать DISTINCT в ваш запрос как есть
10 июн 15, 13:25    [17754873]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить